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/03/03 00:09:13 UTC

svn commit: r1573401 - in /lucene/dev/trunk/solr: core/src/java/org/apache/solr/cloud/ core/src/test/org/apache/solr/cloud/ solrj/src/java/org/apache/solr/common/util/

Author: markrmiller
Date: Sun Mar  2 23:09:13 2014
New Revision: 1573401

URL: http://svn.apache.org/r1573401
Log:
SOLR-5799: Fix impl.

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/RetryUtil.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java?rev=1573401&r1=1573400&r2=1573401&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java Sun Mar  2 23:09:13 2014
@@ -113,25 +113,26 @@ class ShardLeaderElectionContextBase ext
   }
   
   @Override
-  void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStart)
+  void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStartMs)
       throws KeeperException, InterruptedException, IOException {
     // register as leader - if an ephemeral is already there, wait just a bit
     // to see if it goes away
-    RetryUtil.retryOnThrowable(NodeExistsException.class, 15000, 1000,
-        new RetryCmd() {
-          
-          @Override
-          public void execute() throws InterruptedException {
-            try {
+    try {
+      RetryUtil.retryOnThrowable(NodeExistsException.class, 15000, 1000,
+          new RetryCmd() {
+            
+            @Override
+            public void execute() throws Throwable {
               zkClient.makePath(leaderPath, ZkStateReader.toJSON(leaderProps),
                   CreateMode.EPHEMERAL, true);
-            } catch (KeeperException e) {
-              throw new SolrException(
-                  ErrorCode.SERVER_ERROR,
-                  "Could not register as the leader because creating the ephemeral registration node in ZooKeeper failed", e);
             }
-          }
-        });
+          });
+    } catch (Throwable t) {
+      if (t instanceof OutOfMemoryError) {
+        throw (OutOfMemoryError) t;
+      }
+      throw new SolrException(ErrorCode.SERVER_ERROR, "Could not register as the leader because creating the ephemeral registration node in ZooKeeper failed", t);
+    }
     
     assert shardId != null;
     ZkNodeProps m = ZkNodeProps.fromKeyVals(Overseer.QUEUE_OPERATION,

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java?rev=1573401&r1=1573400&r2=1573401&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java Sun Mar  2 23:09:13 2014
@@ -1132,4 +1132,8 @@ public class Overseer {
     return !"false".equals(clusterProps.get(ZkStateReader.LEGACY_CLOUD));
   }
 
+  public ZkStateReader getZkStateReader() {
+    return reader;
+  }
+
 }

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=1573401&r1=1573400&r2=1573401&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 Sun Mar  2 23:09:13 2014
@@ -532,19 +532,23 @@ public class OverseerTest extends SolrTe
         + "zookeeper/server1/data";
     ZkTestServer server = new ZkTestServer(zkDir);
     
-    SolrZkClient controllerClient = null;
+
     SolrZkClient overseerClient = null;
     ZkStateReader reader = null;
     MockZKController mockController = null;
     
+    SolrZkClient zkClient = null;
     try {
       server.run();
-      controllerClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
+
       AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
       AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
-      controllerClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
       
-      reader = new ZkStateReader(controllerClient);
+      zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
+      
+      zkClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
+      
+      reader = new ZkStateReader(zkClient);
       reader.createClusterStateWatchersAndUpdate();
       
       mockController = new MockZKController(server.getZkAddress(), "node1",
@@ -559,25 +563,25 @@ public class OverseerTest extends SolrTe
       waitForCollections(reader, "collection1");
       verifyStatus(reader, ZkStateReader.RECOVERING);
       
-      int version = getClusterStateVersion(controllerClient);
+      int version = getClusterStateVersion(zkClient);
       
       mockController.publishState("core1", "core_node1", ZkStateReader.ACTIVE,
           1);
       
-      while (version == getClusterStateVersion(controllerClient));
+      while (version == getClusterStateVersion(zkClient));
       
       verifyStatus(reader, ZkStateReader.ACTIVE);
-      version = getClusterStateVersion(controllerClient);
+      version = getClusterStateVersion(zkClient);
       overseerClient.close();
       Thread.sleep(1000); // wait for overseer to get killed
       
       mockController.publishState("core1", "core_node1",
           ZkStateReader.RECOVERING, 1);
-      version = getClusterStateVersion(controllerClient);
+      version = getClusterStateVersion(zkClient);
       
       overseerClient = electNewOverseer(server.getZkAddress());
       
-      while (version == getClusterStateVersion(controllerClient));
+      while (version == getClusterStateVersion(zkClient));
       
       verifyStatus(reader, ZkStateReader.RECOVERING);
       
@@ -585,16 +589,16 @@ public class OverseerTest extends SolrTe
           .getClusterState().getLiveNodes().size());
       assertEquals("Shard count does not match", 1, reader.getClusterState()
           .getSlice("collection1", "shard1").getReplicasMap().size());
-      version = getClusterStateVersion(controllerClient);
+      version = getClusterStateVersion(zkClient);
       mockController.publishState("core1", "core_node1", null, 1);
-      while (version == getClusterStateVersion(controllerClient));
+      while (version == getClusterStateVersion(zkClient));
       Thread.sleep(500);
       assertFalse("collection1 should be gone after publishing the null state",
           reader.getClusterState().getCollections().contains("collection1"));
     } finally {
       close(mockController);
       close(overseerClient);
-      close(controllerClient);
+      close(zkClient);
       close(reader);
       server.shutdown();
     }
@@ -911,6 +915,7 @@ public class OverseerTest extends SolrTe
     LeaderElector overseerElector = new LeaderElector(zkClient);
     if (overseers.size() > 0) {
       overseers.get(overseers.size() -1).close();
+      overseers.get(overseers.size() -1).getZkStateReader().getZkClient().close();
     }
     Overseer overseer = new Overseer(
         new HttpShardHandlerFactory().getShardHandler(), "/admin/cores", reader);

Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/RetryUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/RetryUtil.java?rev=1573401&r1=1573400&r2=1573401&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/RetryUtil.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/RetryUtil.java Sun Mar  2 23:09:13 2014
@@ -21,10 +21,10 @@ import java.util.concurrent.TimeUnit;
 
 public class RetryUtil {
   public static interface RetryCmd {
-    public void execute() throws InterruptedException;
+    public void execute() throws Throwable;
   }
   
-  public static void retryOnThrowable(Class clazz, long timeoutms, long intervalms, RetryCmd cmd) throws InterruptedException {
+  public static void retryOnThrowable(Class clazz, long timeoutms, long intervalms, RetryCmd cmd) throws Throwable {
     long timeout = System.nanoTime() + TimeUnit.NANOSECONDS.convert(timeoutms, TimeUnit.MILLISECONDS);
     while (true) {
       try {