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 2017/05/11 22:15:43 UTC
[2/2] lucene-solr:jira/solr-10233: Prevent NPE in ReplicateFromLeader
Prevent NPE in ReplicateFromLeader
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/1c0e2f20
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/1c0e2f20
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/1c0e2f20
Branch: refs/heads/jira/solr-10233
Commit: 1c0e2f20d5dd85cf26ff1a3df880f2e5f6e4d943
Parents: 88fa86c
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Thu May 11 15:09:47 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Thu May 11 15:09:47 2017 -0700
----------------------------------------------------------------------
.../org/apache/solr/cloud/ReplicateFromLeader.java | 4 +++-
.../src/java/org/apache/solr/cloud/ZkController.java | 14 +++++++++-----
2 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1c0e2f20/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
index 4441018..0800e0f 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
@@ -127,6 +127,8 @@ public class ReplicateFromLeader {
}
public void stopReplication() {
- replicationProcess.close();
+ if (replicationProcess != null) {
+ replicationProcess.close();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1c0e2f20/solr/core/src/java/org/apache/solr/cloud/ZkController.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index 11fff1f..02133d6 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -974,10 +974,12 @@ public class ZkController {
public void startReplicationFromLeader(String coreName, boolean switchTransactionLog) throws InterruptedException {
log.info("{} starting background replication from leader", coreName);
ReplicateFromLeader replicateFromLeader = new ReplicateFromLeader(cc, coreName);
- if (replicateFromLeaders.putIfAbsent(coreName, replicateFromLeader) == null) {
- replicateFromLeader.startReplication(switchTransactionLog);
- } else {
- log.warn("A replicate from leader instance already exists for core {}", coreName);
+ synchronized (replicateFromLeader) { // synchronize to prevent any stop before we finish the start
+ if (replicateFromLeaders.putIfAbsent(coreName, replicateFromLeader) == null) {
+ replicateFromLeader.startReplication(switchTransactionLog);
+ } else {
+ log.warn("A replicate from leader instance already exists for core {}", coreName);
+ }
}
}
@@ -985,7 +987,9 @@ public class ZkController {
log.info("{} stopping background replication from leader", coreName);
ReplicateFromLeader replicateFromLeader = replicateFromLeaders.remove(coreName);
if (replicateFromLeader != null) {
- replicateFromLeader.stopReplication();
+ synchronized (replicateFromLeader) {
+ replicateFromLeader.stopReplication();
+ }
}
}