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/11/09 04:08:05 UTC
[lucene-solr] 03/04: @1102 Remove leader watch on cancel/close.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 27ed84ad0657b1e5a9750605cf807d2639481ff6
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Sun Nov 8 21:05:45 2020 -0600
@1102 Remove leader watch on cancel/close.
---
.../java/org/apache/solr/cloud/LeaderElector.java | 28 ++++++++++++++++------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java b/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java
index a54aea7..9cb54a8 100644
--- a/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java
+++ b/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java
@@ -31,7 +31,9 @@ import org.apache.solr.common.AlreadyClosedException;
import org.apache.solr.common.ParWork;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.SolrZkClient;
+import org.apache.solr.common.cloud.SolrZooKeeper;
import org.apache.solr.common.cloud.ZooKeeperException;
+import org.apache.solr.common.util.IOUtils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.ConnectionLossException;
@@ -161,7 +163,7 @@ public class LeaderElector implements Closeable {
ElectionWatcher oldWatcher = watcher;
if (oldWatcher != null) {
- oldWatcher.cancel();
+ oldWatcher.close();
}
zkClient.exists(watchedNode, watcher = new ElectionWatcher(context.leaderSeqPath,
watchedNode, getSeq(context.leaderSeqPath), context));
@@ -344,10 +346,11 @@ public class LeaderElector implements Closeable {
@Override
public void close() throws IOException {
+ IOUtils.closeQuietly(watcher);
this.isClosed = true;
}
- private class ElectionWatcher implements Watcher {
+ private class ElectionWatcher implements Watcher, Closeable {
final String myNode, watchedNode;
final ElectionContext context;
@@ -359,10 +362,6 @@ public class LeaderElector implements Closeable {
this.context = context;
}
- void cancel() {
- canceled = true;
- }
-
@Override
public void process(WatchedEvent event) {
// session events are not change events, and do not remove the watcher
@@ -387,6 +386,21 @@ public class LeaderElector implements Closeable {
return;
}
}
+
+ @Override
+ public void close() throws IOException {
+ SolrZooKeeper zk = zkClient.getSolrZooKeeper();
+ if (zk != null) {
+ try {
+ zk.removeWatches(context.leaderSeqPath, this, WatcherType.Any, true);
+ } catch (InterruptedException e) {
+ log.info("Interrupted removing leader watch");
+ } catch (KeeperException e) {
+ log.error("Exception removing leader watch", e);
+ }
+ }
+ canceled = true;
+ }
}
/**
@@ -411,7 +425,7 @@ public class LeaderElector implements Closeable {
prevContext.close();
}
}
- if (watcher != null) watcher.cancel();
+ if (watcher != null) watcher.close();
this.context.close();
this.context = context;
joinElection(context, true, joinAtHead);