You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/03/10 00:22:28 UTC
lucene-solr:branch_7x: SOLR-12051: Adding error log in case of data
loss
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7x 4d15ad1cb -> 4abdb2466
SOLR-12051: Adding error log in case of data loss
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4abdb246
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4abdb246
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4abdb246
Branch: refs/heads/branch_7x
Commit: 4abdb24667f28777be512047bb012a7346d8039b
Parents: 4d15ad1
Author: Cao Manh Dat <da...@apache.org>
Authored: Sat Mar 10 07:20:05 2018 +0700
Committer: Cao Manh Dat <da...@apache.org>
Committed: Sat Mar 10 07:21:29 2018 +0700
----------------------------------------------------------------------
.../src/java/org/apache/solr/cloud/ElectionContext.java | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4abdb246/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java b/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
index a7c21b4..7d64717 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
@@ -347,6 +347,7 @@ final class ShardLeaderElectionContext extends ShardLeaderElectionContextBase {
Replica.Type replicaType;
String coreNodeName;
+ boolean setTermToMax = false;
try (SolrCore core = cc.getCore(coreName)) {
if (core == null) {
@@ -365,9 +366,11 @@ final class ShardLeaderElectionContext extends ShardLeaderElectionContextBase {
ZkShardTerms zkShardTerms = zkController.getShardTerms(collection, shardId);
if (zkShardTerms.registered(coreNodeName) && !zkShardTerms.canBecomeLeader(coreNodeName)) {
if (!waitForEligibleBecomeLeaderAfterTimeout(zkShardTerms, coreNodeName, leaderVoteWait)) {
- log.info("Can't become leader, term of replica {} less than leader", coreNodeName);
rejoinLeaderElection(core);
return;
+ } else {
+ // only log an error if this replica win the election
+ setTermToMax = true;
}
}
@@ -470,7 +473,9 @@ final class ShardLeaderElectionContext extends ShardLeaderElectionContextBase {
}
}
// in case of leaderVoteWait timeout, a replica with lower term can win the election
- if (zkController.getShardTerms(collection, shardId).registered(coreNodeName)) {
+ if (setTermToMax) {
+ log.error("WARNING: Potential data loss -- Replica {} became leader after timeout (leaderVoteWait) " +
+ "without being up-to-date with the previous leader", coreNodeName);
zkController.getShardTerms(collection, shardId).setTermEqualsToLeader(coreNodeName);
}
super.runLeaderProcess(weAreReplacement, 0);