You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2014/03/24 11:43:35 UTC

svn commit: r1580808 - in /lucene/dev/branches/branch_4x/solr: ./ core/ core/src/java/org/apache/solr/cloud/ core/src/java/org/apache/solr/core/ core/src/test/org/apache/solr/cloud/

Author: noble
Date: Mon Mar 24 10:43:34 2014
New Revision: 1580808

URL: http://svn.apache.org/r1580808
Log:
SOLR-5893 On restarting overseer designate , move itself to front of the queue

Modified:
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java?rev=1580808&r1=1580807&r2=1580808&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java Mon Mar 24 10:43:34 2014
@@ -302,7 +302,7 @@ public class OverseerCollectionProcessor
     if(overseerDesignates.size() == 1 && overseerDesignates.contains(getLeaderNode(zk))) return;
     log.info("overseer designates {}", overseerDesignates);
 
-    List<String> nodeNames = getSortedNodeNames(zk);
+    List<String> nodeNames = getSortedOverseerNodeNames(zk);
     if(nodeNames.size()<2) return;
 
 //
@@ -339,7 +339,7 @@ public class OverseerCollectionProcessor
       long timeout = System.nanoTime() + TimeUnit.NANOSECONDS.convert(2500, TimeUnit.MILLISECONDS);
 
       while (System.nanoTime() < timeout) {
-        List<String> currentNodeNames = getSortedNodeNames(zk);
+        List<String> currentNodeNames = getSortedOverseerNodeNames(zk);
 
         int totalLeaders = 0;
 
@@ -360,7 +360,7 @@ public class OverseerCollectionProcessor
       }
 
       if(!prioritizationComplete) {
-        log.warn("available designates and current state {} {} ", availableDesignates, getSortedNodeNames(zk));
+        log.warn("available designates and current state {} {} ", availableDesignates, getSortedOverseerNodeNames(zk));
       }
 
     } else {
@@ -378,7 +378,7 @@ public class OverseerCollectionProcessor
     }
 
   }
-  public static List<String> getSortedNodeNames(SolrZkClient zk) throws KeeperException, InterruptedException {
+  public static List<String> getSortedOverseerNodeNames(SolrZkClient zk) throws KeeperException, InterruptedException {
     List<String> children = null;
     try {
       children = zk.getChildren(OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE, null, true);

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1580808&r1=1580807&r2=1580808&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java Mon Mar 24 10:43:34 2014
@@ -58,6 +58,7 @@ import org.apache.solr.common.cloud.ZkCo
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.cloud.ZooKeeperException;
+import org.apache.solr.common.params.CollectionParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.URLUtil;
 import org.apache.solr.core.CoreContainer;
@@ -1666,4 +1667,26 @@ public final class ZkController {
 
   }
 
+  public void checkOverseerDesignate() {
+    try {
+      byte[] data = zkClient.getData(ZkStateReader.ROLES, null, new Stat(), true);
+      if(data ==null) return;
+      Map roles = (Map) ZkStateReader.fromJSON(data);
+      if(roles ==null) return;
+      List nodeList= (List) roles.get("overseer");
+      if(nodeList == null) return;
+      if(nodeList.contains(getNodeName())){
+        ZkNodeProps props = new ZkNodeProps(Overseer.QUEUE_OPERATION, CollectionParams.CollectionAction.ADDROLE.toString().toLowerCase(Locale.ROOT),
+            "node", getNodeName(),
+            "role", "overseer");
+        log.info("Going to add role {} ",props);
+        getOverseerCollectionQueue().offer(ZkStateReader.toJSON(props));
+      }
+    } catch (NoNodeException nne){
+      return;
+    } catch (Exception e) {
+      log.warn("could not readd the overseer designate ",e);
+    }
+  }
+
 }

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1580808&r1=1580807&r2=1580808&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java Mon Mar 24 10:43:34 2014
@@ -347,6 +347,7 @@ public class CoreContainer {
           }
         }
       }
+      zkSys.getZkController().checkOverseerDesignate();
     }
   }
 

Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java?rev=1580808&r1=1580807&r2=1580808&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java Mon Mar 24 10:43:34 2014
@@ -21,7 +21,7 @@ package org.apache.solr.cloud;
 import static org.apache.solr.cloud.OverseerCollectionProcessor.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.cloud.OverseerCollectionProcessor.NUM_SLICES;
 import static org.apache.solr.cloud.OverseerCollectionProcessor.REPLICATION_FACTOR;
-import static org.apache.solr.cloud.OverseerCollectionProcessor.getSortedNodeNames;
+import static org.apache.solr.cloud.OverseerCollectionProcessor.getSortedOverseerNodeNames;
 import static org.apache.solr.cloud.OverseerCollectionProcessor.getLeaderNode;
 import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
 
@@ -96,7 +96,7 @@ public class OverseerRolesTest  extends 
     createCollection(collectionName, client);
 
     waitForRecoveriesToFinish(collectionName, false);
-    List<String> l = OverseerCollectionProcessor.getSortedNodeNames(client.getZkStateReader().getZkClient()) ;
+    List<String> l = OverseerCollectionProcessor.getSortedOverseerNodeNames(client.getZkStateReader().getZkClient()) ;
 
     log.info("All nodes {}", l);
     String currentLeader = OverseerCollectionProcessor.getLeaderNode(client.getZkStateReader().getZkClient());
@@ -119,15 +119,9 @@ public class OverseerRolesTest  extends 
       }
       Thread.sleep(100);
     }
-    /*if(!leaderchanged){
-
-      log.warn("expected {}, current order {}",
-          overseerDesignate,
-          getSortedNodeNames(client.getZkStateReader().getZkClient())+ " ldr :"+ OverseerCollectionProcessor.getLeaderNode(client.getZkStateReader().getZkClient()) );
-    }*/
     assertTrue("could not set the new overseer . expected "+
         overseerDesignate + " current order : " +
-        getSortedNodeNames(client.getZkStateReader().getZkClient()) +
+        getSortedOverseerNodeNames(client.getZkStateReader().getZkClient()) +
         " ldr :"+ OverseerCollectionProcessor.getLeaderNode(client.getZkStateReader().getZkClient()) ,leaderchanged);
 
 
@@ -146,7 +140,7 @@ public class OverseerRolesTest  extends 
     timeout = System.currentTimeMillis()+10000;
     leaderchanged = false;
     for(;System.currentTimeMillis() < timeout;){
-      List<String> sortedNodeNames = getSortedNodeNames(client.getZkStateReader().getZkClient());
+      List<String> sortedNodeNames = getSortedOverseerNodeNames(client.getZkStateReader().getZkClient());
       if(sortedNodeNames.get(1) .equals(anotherOverseer) || sortedNodeNames.get(0).equals(anotherOverseer)){
         leaderchanged =true;
         break;
@@ -154,14 +148,18 @@ public class OverseerRolesTest  extends 
       Thread.sleep(100);
     }
 
-    assertTrue("New overseer not the frontrunner : "+ getSortedNodeNames(client.getZkStateReader().getZkClient()) + " expected : "+ anotherOverseer, leaderchanged);
+    assertTrue("New overseer not the frontrunner : "+ getSortedOverseerNodeNames(client.getZkStateReader().getZkClient()) + " expected : "+ anotherOverseer, leaderchanged);
 
 
     String currentOverseer = getLeaderNode(client.getZkStateReader().getZkClient());
 
+    String killedOverseer = currentOverseer;
+
     log.info("Current Overseer {}", currentOverseer);
     Pattern pattern = Pattern.compile("(.*):(\\d*)(.*)");
     Matcher m = pattern.matcher(currentOverseer);
+    JettySolrRunner stoppedJetty =null;
+
     if(m.matches()){
       String hostPort =  m.group(1)+":"+m.group(2);
 
@@ -172,7 +170,7 @@ public class OverseerRolesTest  extends 
         if(s.contains(hostPort)){
           log.info("leader node {}",s);
           ChaosMonkey.stop(jetty);
-
+          stoppedJetty = jetty;
           timeout = System.currentTimeMillis()+10000;
           leaderchanged = false;
           for(;System.currentTimeMillis() < timeout;){
@@ -190,6 +188,25 @@ public class OverseerRolesTest  extends 
 
     }
 
+    ChaosMonkey.start(stoppedJetty);
+
+    timeout = System.currentTimeMillis()+10000;
+    leaderchanged = false;
+    for(;System.currentTimeMillis() < timeout;){
+      List<String> sortedNodeNames = getSortedOverseerNodeNames(client.getZkStateReader().getZkClient());
+      if(sortedNodeNames.get(1).equals(killedOverseer) || sortedNodeNames.get(0).equals(killedOverseer)){
+        leaderchanged =true;
+        break;
+      }
+      Thread.sleep(100);
+    }
+
+    assertTrue("New overseer not the frontrunner : "+ getSortedOverseerNodeNames(client.getZkStateReader().getZkClient()) + " expected : "+ killedOverseer, leaderchanged);
+
+
+
+
+
     client.shutdown();