You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2018/09/26 11:50:14 UTC
[43/45] lucene-solr:jira/solr-12709: SOLR-12805: Store previous term
(generation) of replica when start recovery process
SOLR-12805: Store previous term (generation) of replica when start recovery process
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/667b8299
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/667b8299
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/667b8299
Branch: refs/heads/jira/solr-12709
Commit: 667b8299e69755abfef89b3beb44cacdd292d479
Parents: 5816766
Author: Cao Manh Dat <da...@apache.org>
Authored: Wed Sep 26 10:35:44 2018 +0700
Committer: Cao Manh Dat <da...@apache.org>
Committed: Wed Sep 26 10:35:44 2018 +0700
----------------------------------------------------------------------
solr/CHANGES.txt | 2 ++
.../src/java/org/apache/solr/cloud/ZkShardTerms.java | 8 ++++++--
.../test/org/apache/solr/cloud/ZkShardTermsTest.java | 14 +++++++++-----
3 files changed, 17 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/667b8299/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 6128986..98fb204 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -71,6 +71,8 @@ Other Changes
java.time.DateTimeFormatter instead of Joda time (see upgrade notes). "Lenient" is enabled. Removed Joda Time dependency.
(David Smiley, Bar Rotstein)
+* SOLR-12805: Store previous term (generation) of replica when start recovery process (Cao Manh Dat)
+
================== 7.6.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/667b8299/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
index 99df2a2..bcbb347 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
@@ -588,12 +588,16 @@ public class ZkShardTerms implements AutoCloseable{
*/
Terms startRecovering(String coreNodeName) {
long maxTerm = getMaxTerm();
- if (values.get(coreNodeName) == maxTerm && values.getOrDefault(coreNodeName+"_recovering", -1L) == maxTerm)
+ if (values.get(coreNodeName) == maxTerm)
return null;
HashMap<String, Long> newValues = new HashMap<>(values);
+ if (!newValues.containsKey(coreNodeName+"_recovering")) {
+ long currentTerm = newValues.getOrDefault(coreNodeName, 0L);
+ // by keeping old term, we will have more information in leader election
+ newValues.put(coreNodeName+"_recovering", currentTerm);
+ }
newValues.put(coreNodeName, maxTerm);
- newValues.put(coreNodeName+"_recovering", maxTerm);
return new Terms(newValues, version);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/667b8299/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java
index 201de26..1c1b1d2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java
@@ -83,16 +83,19 @@ public class ZkShardTermsTest extends SolrCloudTestCase {
// List all possible orders of ensureTermIsHigher, startRecovering, doneRecovering
zkShardTerms.registerTerm("replica1");
zkShardTerms.registerTerm("replica2");
+
+ // normal case when leader start lir process
zkShardTerms.ensureTermsIsHigher("replica1", Collections.singleton("replica2"));
zkShardTerms.startRecovering("replica2");
assertEquals(zkShardTerms.getTerm("replica2"), 1);
- assertEquals(zkShardTerms.getTerm("replica2_recovering"), 1);
+ assertEquals(zkShardTerms.getTerm("replica2_recovering"), 0);
zkShardTerms.doneRecovering("replica2");
assertEquals(zkShardTerms.getTerm("replica1"), 1);
assertEquals(zkShardTerms.getTerm("replica2"), 1);
assertEquals(zkShardTerms.getTerm("replica2_recovering"), -1);
+ // stack of lir processes
zkShardTerms.ensureTermsIsHigher("replica1", Collections.singleton("replica2"));
assertEquals(zkShardTerms.getTerm("replica1"), 2);
assertEquals(zkShardTerms.getTerm("replica2"), 1);
@@ -100,16 +103,17 @@ public class ZkShardTermsTest extends SolrCloudTestCase {
zkShardTerms.startRecovering("replica2");
assertEquals(zkShardTerms.getTerm("replica2"), 2);
- assertEquals(zkShardTerms.getTerm("replica2_recovering"), 2);
+ assertEquals(zkShardTerms.getTerm("replica2_recovering"), 1);
zkShardTerms.ensureTermsIsHigher("replica1", Collections.singleton("replica2"));
assertEquals(zkShardTerms.getTerm("replica1"), 3);
assertEquals(zkShardTerms.getTerm("replica2"), 2);
- assertEquals(zkShardTerms.getTerm("replica2_recovering"), 2);
- zkShardTerms.doneRecovering("replica2");
+ assertEquals(zkShardTerms.getTerm("replica2_recovering"), 1);
+ zkShardTerms.doneRecovering("replica2");
assertEquals(zkShardTerms.getTerm("replica2"), 2);
assertEquals(zkShardTerms.getTerm("replica2_recovering"), -1);
+
zkShardTerms.startRecovering("replica2");
zkShardTerms.doneRecovering("replica2");
@@ -119,7 +123,7 @@ public class ZkShardTermsTest extends SolrCloudTestCase {
zkShardTerms.startRecovering("replica2");
assertEquals(zkShardTerms.getTerm("replica1"), 5);
assertEquals(zkShardTerms.getTerm("replica2"), 5);
- assertEquals(zkShardTerms.getTerm("replica2_recovering"), 5);
+ assertEquals(zkShardTerms.getTerm("replica2_recovering"), 3);
zkShardTerms.doneRecovering("replica2");
assertEquals(zkShardTerms.getTerm("replica2_recovering"), -1);