From c08e5eaf2011cbb5da96d0216b7713e6d0c24983 Mon Sep 17 00:00:00 2001 From: Yonik Seeley Date: Thu, 6 Dec 2012 22:36:52 +0000 Subject: [PATCH] SOLR-2592: fix composite id router slice selection git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1418116 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/solr/cloud/TestHashPartitioner.java | 10 ++++++++++ .../apache/solr/common/cloud/CompositeIdRouter.java | 10 ++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java b/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java index 6662b59297c..5f96b276021 100644 --- a/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java +++ b/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java @@ -17,6 +17,7 @@ package org.apache.solr.cloud; * the License. */ +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -97,6 +98,15 @@ public class TestHashPartitioner extends SolrTestCaseJ4 { DocRouter router = coll.getRouter(); Slice target = router.getTargetSlice(id, null, null, coll); assertEquals(expectedShard, target.getName()); + + Collection slices = router.getSearchSlices(id, null, coll); +if (slices.size() != 1) { // nocommit + slices = router.getSearchSlices(id, null, coll); +} + + assertEquals(1, slices.size()); + target = slices.iterator().next(); + assertEquals(expectedShard, target.getName()); } diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/CompositeIdRouter.java b/solr/solrj/src/java/org/apache/solr/common/cloud/CompositeIdRouter.java index 7718a429ae5..8d896943ba4 100644 --- a/solr/solrj/src/java/org/apache/solr/common/cloud/CompositeIdRouter.java +++ b/solr/solrj/src/java/org/apache/solr/common/cloud/CompositeIdRouter.java @@ -122,16 +122,18 @@ public class CompositeIdRouter extends HashBasedRouter { int upperBits = hash1 & m1; int lowerBound = upperBits; int upperBound = upperBits | m2; + + // lowerBound will be greater than upperBound if we are in the negatives Range completeRange = new Range(lowerBound, upperBound); - List slices = new ArrayList(1); - for (Slice slice : slices) { + List targetSlices = new ArrayList(1); + for (Slice slice : collection.getSlices()) { Range range = slice.getRange(); if (range != null && range.overlaps(completeRange)) { - slices.add(slice); + targetSlices.add(slice); } } - return slices; + return targetSlices; } }