You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2018/02/13 16:58:53 UTC
lucene-solr:master: SOLR-11899 Fix a race condition when testing
removal of ephemeral nodes.
Repository: lucene-solr
Updated Branches:
refs/heads/master dd08400a3 -> 0231d5cdb
SOLR-11899 Fix a race condition when testing removal of ephemeral nodes.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/0231d5cd
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/0231d5cd
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/0231d5cd
Branch: refs/heads/master
Commit: 0231d5cdba6b6d8747220570449abd9a1ed327c1
Parents: dd08400
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Tue Feb 13 17:57:40 2018 +0100
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Tue Feb 13 17:58:45 2018 +0100
----------------------------------------------------------------------
.../sim/TestDistribStateManager.java | 23 ++++++++++++++++++--
.../solrj/impl/ZkDistribStateManager.java | 4 ++++
2 files changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0231d5cd/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestDistribStateManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestDistribStateManager.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestDistribStateManager.java
index a9c5140..be9ea34 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestDistribStateManager.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestDistribStateManager.java
@@ -82,6 +82,22 @@ public class TestDistribStateManager extends SolrTestCaseJ4 {
LOG.info("Using " + stateManager.getClass().getName());
}
+ private DistribStateManager createDistribStateManager() {
+ if (simulated) {
+ return new SimDistribStateManager(root);
+ } else {
+ SolrZkClient cli = new SolrZkClient(zkTestServer.getZkHost(), 30000);
+ return new ZkDistribStateManager(cli);
+ }
+ }
+
+ private void destroyDistribStateManager(DistribStateManager mgr) throws Exception {
+ mgr.close();
+ if (mgr instanceof ZkDistribStateManager) {
+ ((ZkDistribStateManager)mgr).getZkClient().close();
+ }
+ }
+
@After
public void teardown() throws Exception {
if (solrZkClient != null) {
@@ -248,10 +264,13 @@ public class TestDistribStateManager extends SolrTestCaseJ4 {
// watch should not fire now because it needs to be reset
stateManager.setData("/getData/persistentData", secondData, -1);
+ // create ephemeral node using another ZK connection
+ DistribStateManager ephemeralMgr = createDistribStateManager();
+ ephemeralMgr.createData("/getData/ephemeralData", firstData, CreateMode.EPHEMERAL);
+
nodeWatcher = new OnceWatcher();
- stateManager.createData("/getData/ephemeralData", firstData, CreateMode.EPHEMERAL);
vd = stateManager.getData("/getData/ephemeralData", nodeWatcher);
- reInit();
+ destroyDistribStateManager(ephemeralMgr);
if (!nodeWatcher.triggered.await(5, TimeUnit.SECONDS)) {
fail("Node watch should have fired!");
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0231d5cd/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java
index b0cc710..1662d5b 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java
@@ -187,4 +187,8 @@ public class ZkDistribStateManager implements DistribStateManager {
public void close() throws IOException {
}
+
+ public SolrZkClient getZkClient() {
+ return zkClient;
+ }
}