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();
+      }
     }
   }