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 2014/02/27 01:51:48 UTC

svn commit: r1572370 - /lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java

Author: markrmiller
Date: Thu Feb 27 00:51:48 2014
New Revision: 1572370

URL: http://svn.apache.org/r1572370
Log:
SOLR-5596: Improve this test.

Modified:
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java?rev=1572370&r1=1572369&r2=1572370&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java Thu Feb 27 00:51:48 2014
@@ -47,8 +47,8 @@ import org.apache.solr.handler.component
 import org.apache.solr.util.DefaultSolrThreadFactory;
 import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.KeeperException.NoNodeException;
 import org.apache.zookeeper.KeeperException.NodeExistsException;
-import org.apache.zookeeper.data.Stat;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -87,11 +87,12 @@ public class OverseerTest extends SolrTe
     }
 
     private void deleteNode(final String path) {
+      
       try {
-        Stat stat = zkClient.exists(path, null, true);
-        if (stat != null) {
-          zkClient.delete(path, stat.getVersion(), true);
-        }
+        zkClient.delete(path, -1, true);
+      } catch (NoNodeException e) {
+        // fine
+        log.warn("cancelElection did not find election node to remove");
       } catch (KeeperException e) {
         fail("Unexpected KeeperException!" + e);
       } catch (InterruptedException e) {
@@ -134,8 +135,7 @@ public class OverseerTest extends SolrTe
       }
       
       for (int i = 0; i < 120; i++) {
-        String shardId = getShardId("http://" + nodeName
-            + "/solr/", coreName);
+        String shardId = getShardId("http://" + nodeName + "/solr/", coreName);
         if (shardId != null) {
           try {
             zkClient.makePath("/collections/" + collection + "/leader_elect/"
@@ -150,6 +150,7 @@ public class OverseerTest extends SolrTe
           ShardLeaderElectionContextBase ctx = new ShardLeaderElectionContextBase(
               elector, shardId, collection, nodeName + "_" + coreName, props,
               zkStateReader);
+          elector.setup(ctx);
           elector.joinElection(ctx, false);
           return shardId;
         }
@@ -545,46 +546,52 @@ public class OverseerTest extends SolrTe
       
       reader = new ZkStateReader(controllerClient);
       reader.createClusterStateWatchersAndUpdate();
-
-      mockController = new MockZKController(server.getZkAddress(), "node1", "collection1");
+      
+      mockController = new MockZKController(server.getZkAddress(), "node1",
+          "collection1");
       
       overseerClient = electNewOverseer(server.getZkAddress());
-
+      
       Thread.sleep(1000);
-      mockController.publishState("core1", "core_node1", ZkStateReader.RECOVERING, 1);
-
+      mockController.publishState("core1", "core_node1",
+          ZkStateReader.RECOVERING, 1);
+      
       waitForCollections(reader, "collection1");
       verifyStatus(reader, ZkStateReader.RECOVERING);
-
+      
       int version = getClusterStateVersion(controllerClient);
       
-      mockController.publishState("core1", "core_node1", ZkStateReader.ACTIVE, 1);
+      mockController.publishState("core1", "core_node1", ZkStateReader.ACTIVE,
+          1);
+      
+      while (version == getClusterStateVersion(controllerClient))
+        ;
       
-      while(version == getClusterStateVersion(controllerClient));
-
       verifyStatus(reader, ZkStateReader.ACTIVE);
       version = getClusterStateVersion(controllerClient);
       overseerClient.close();
-      Thread.sleep(1000); //wait for overseer to get killed
-
-      mockController.publishState("core1",  "core_node1", ZkStateReader.RECOVERING, 1);
+      Thread.sleep(1000); // wait for overseer to get killed
+      
+      mockController.publishState("core1", "core_node1",
+          ZkStateReader.RECOVERING, 1);
       version = getClusterStateVersion(controllerClient);
       
       overseerClient = electNewOverseer(server.getZkAddress());
-
-      while(version == getClusterStateVersion(controllerClient));
-
+      
+      while (version == getClusterStateVersion(controllerClient));
+      
       verifyStatus(reader, ZkStateReader.RECOVERING);
       
-      assertEquals("Live nodes count does not match", 1, reader.getClusterState()
-          .getLiveNodes().size());
+      assertEquals("Live nodes count does not match", 1, reader
+          .getClusterState().getLiveNodes().size());
       assertEquals("Shard count does not match", 1, reader.getClusterState()
           .getSlice("collection1", "shard1").getReplicasMap().size());
       version = getClusterStateVersion(controllerClient);
-      mockController.publishState("core1", "core_node1", null,1);
-      while(version == getClusterStateVersion(controllerClient));
+      mockController.publishState("core1", "core_node1", null, 1);
+      while (version == getClusterStateVersion(controllerClient));
       Thread.sleep(500);
-      assertFalse("collection1 should be gone after publishing the null state", reader.getClusterState().getCollections().contains("collection1"));
+      assertFalse("collection1 should be gone after publishing the null state",
+          reader.getClusterState().getCollections().contains("collection1"));
     } finally {
       
       close(mockController);
@@ -898,18 +905,21 @@ public class OverseerTest extends SolrTe
   }
 
 
-  private SolrZkClient electNewOverseer(String address) throws InterruptedException,
- TimeoutException, IOException,
+  private SolrZkClient electNewOverseer(String address)
+      throws InterruptedException, TimeoutException, IOException,
       KeeperException, ParserConfigurationException, SAXException {
     SolrZkClient zkClient = new SolrZkClient(address, TIMEOUT);
     ZkStateReader reader = new ZkStateReader(zkClient);
     readers.add(reader);
     LeaderElector overseerElector = new LeaderElector(zkClient);
-    // TODO: close Overseer
+    if (overseers.size() > 0) {
+      overseers.get(overseers.size() -1).close();
+    }
     Overseer overseer = new Overseer(
         new HttpShardHandlerFactory().getShardHandler(), "/admin/cores", reader);
     overseers.add(overseer);
-    ElectionContext ec = new OverseerElectionContext(zkClient, overseer, address.replaceAll("/", "_"));
+    ElectionContext ec = new OverseerElectionContext(zkClient, overseer,
+        address.replaceAll("/", "_"));
     overseerElector.setup(ec);
     overseerElector.joinElection(ec, false);
     return zkClient;