You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2020/05/15 04:31:49 UTC
[lucene-solr] branch master updated: SOLR-14471: Fix last-place
replica after shards.preference rules (#1507)
This is an automated email from the ASF dual-hosted git repository.
tflobbe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new 54dca80 SOLR-14471: Fix last-place replica after shards.preference rules (#1507)
54dca80 is described below
commit 54dca800a9432a72b93723d40fa4abc9a8e11f14
Author: Michael Gibney <mi...@michaelgibney.net>
AuthorDate: Fri May 15 00:31:35 2020 -0400
SOLR-14471: Fix last-place replica after shards.preference rules (#1507)
Properly apply base replica ordering to last-place shards.preference matches
---
.../routing/RequestReplicaListTransformerGenerator.java | 3 ++-
.../RequestReplicaListTransformerGeneratorTest.java | 17 ++++++++++++++++-
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java
index 2f41768..4853787 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java
@@ -158,7 +158,7 @@ public class RequestReplicaListTransformerGenerator {
Object current;
int idx = 1;
int boundaryCount = 0;
- int[] boundaries = new int[choices.size() - 1];
+ int[] boundaries = new int[choices.size()];
do {
current = iter.next();
if (replicaComp.compare(prev, current) != 0) {
@@ -167,6 +167,7 @@ public class RequestReplicaListTransformerGenerator {
prev = current;
idx++;
} while (iter.hasNext());
+ boundaries[boundaryCount++] = idx;
// Finally inspect boundaries to apply base transformation, where necessary (separate phase to avoid ConcurrentModificationException)
int startIdx = 0;
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGeneratorTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGeneratorTest.java
index 5b64fde..c0ebad3 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGeneratorTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGeneratorTest.java
@@ -88,6 +88,19 @@ public class RequestReplicaListTransformerGeneratorTest extends SolrTestCaseJ4 {
)
);
+ // Add a PULL replica so that there's a tie for "last place"
+ replicas.add(
+ new Replica(
+ "node5",
+ map(
+ ZkStateReader.BASE_URL_PROP, "http://host2_2:8983/solr",
+ ZkStateReader.NODE_NAME_PROP, "node5",
+ ZkStateReader.CORE_NAME_PROP, "collection1",
+ ZkStateReader.REPLICA_TYPE, "PULL"
+ ), "c1","s1"
+ )
+ );
+
// replicaType and replicaBase combined rule param
String rulesParam = ShardParams.SHARDS_PREFERENCE_REPLICA_TYPE + ":NRT," +
ShardParams.SHARDS_PREFERENCE_REPLICA_TYPE + ":TLOG," +
@@ -101,6 +114,7 @@ public class RequestReplicaListTransformerGeneratorTest extends SolrTestCaseJ4 {
assertEquals("node2", replicas.get(1).getNodeName());
assertEquals("node4", replicas.get(2).getNodeName());
assertEquals("node3", replicas.get(3).getNodeName());
+ assertEquals("node5", replicas.get(4).getNodeName());
params.set("routingPreference", "1");
rlt = generator.getReplicaListTransformer(params);
@@ -108,7 +122,8 @@ public class RequestReplicaListTransformerGeneratorTest extends SolrTestCaseJ4 {
assertEquals("node1", replicas.get(0).getNodeName());
assertEquals("node4", replicas.get(1).getNodeName());
assertEquals("node2", replicas.get(2).getNodeName());
- assertEquals("node3", replicas.get(3).getNodeName());
+ assertEquals("node5", replicas.get(3).getNodeName());
+ assertEquals("node3", replicas.get(4).getNodeName());
}
@SuppressWarnings("unchecked")