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();