You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/07/15 18:36:01 UTC

[lucene-solr] branch reference_impl updated: #179 - Close the Overseer on ZK disconnect.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/reference_impl by this push:
     new 3db018b  #179 - Close the Overseer on ZK disconnect.
3db018b is described below

commit 3db018b95f717614231fb6357d7bc7685647243d
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Wed Jul 15 13:35:46 2020 -0500

    #179 - Close the Overseer on ZK disconnect.
---
 .../java/org/apache/solr/cloud/ZkController.java    |  8 +++++++-
 .../apache/solr/common/cloud/ConnectionManager.java | 21 ++++++++++++++++++++-
 .../org/apache/solr/common/cloud/SolrZkClient.java  |  5 +++++
 .../org/apache/solr/common/cloud/ZkCmdExecutor.java |  2 +-
 4 files changed, 33 insertions(+), 3 deletions(-)

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 1e6bcc8..91c30bc 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -528,7 +528,13 @@ public class ZkController implements Closeable {
       public boolean isClosed() {
         return cc.isShutDown();
       }});
-
+    zkClient.setDisconnectListener(() -> {
+      try {
+        ZkController.this.overseer.close();
+      } catch (NullPointerException e) {
+        // okay
+      }
+    });
     init();
 
     this.overseerRunningMap = Overseer.getRunningMap(zkClient);
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
index 86ad08c..726164f 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
@@ -58,6 +58,7 @@ public class ConnectionManager implements Watcher, Closeable {
 
   private CountDownLatch connectedLatch = new CountDownLatch(1);
   private CountDownLatch disconnectedLatch = new CountDownLatch(1);
+  private volatile DisconnectListener disconnectListener;
 
   public void setOnReconnect(OnReconnect onReconnect) {
     this.onReconnect = onReconnect;
@@ -123,8 +124,16 @@ public class ConnectionManager implements Watcher, Closeable {
     if (!likelyExpiredState.isLikelyExpired(0)) {
       likelyExpiredState = new LikelyExpiredState(LikelyExpiredState.StateType.TRACKING_TIME, System.nanoTime());
     }
-    disconnectedLatch.countDown();;
+    disconnectedLatch.countDown();
     connectedLatch = new CountDownLatch(1);
+
+    try {
+      disconnectListener.disconnected();
+    } catch (NullPointerException e) {
+      // okay
+    } catch (Exception e) {
+      log.warn("Exception firing disonnectListener");
+    }
   }
 
   @Override
@@ -293,7 +302,17 @@ public class ConnectionManager implements Watcher, Closeable {
 
   }
 
+  public interface DisconnectListener {
+    void disconnected();
+  }
+
+  public void setDisconnectListener(DisconnectListener dl) {
+    this.disconnectListener = dl;
+
+  }
+
   private void closeKeeper(SolrZooKeeper keeper) {
     keeper.close();
   }
+
 }
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
index 5ec8c23..19e54ac 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
@@ -1100,6 +1100,11 @@ public class SolrZkClient implements Closeable {
     this.higherLevelIsClosed = isClosed;
   }
 
+  public void setDisconnectListener(ConnectionManager.DisconnectListener dl) {
+    this.connManager.setDisconnectListener(dl);
+
+  }
+
   /**
    * Watcher wrapper that ensures that heavy implementations of process do not interfere with our ability
    * to react to other watches, but also ensures that two wrappers containing equal watches are considered
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java
index 418c78b..084db7d 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java
@@ -35,7 +35,7 @@ import java.util.concurrent.TimeoutException;
 public class ZkCmdExecutor {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  private long retryDelay = 500L; // 1 second would match timeout, so 500 ms over for padding
+  private long retryDelay = 50L;
   private int retryCount;
   private long timeoutms;
   private IsClosed isClosed;