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/01/29 14:21:58 UTC
svn commit: r1562435 - in /lucene/dev/branches/branch_4x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/cloud/
solr/core/src/java/org/apache/solr/handler/admin/
solr/core/src/test/org/apache/solr/cloud/ solr/solrj/
solr/solrj/src/java/org/apac...
Author: noble
Date: Wed Jan 29 13:21:58 2014
New Revision: 1562435
URL: http://svn.apache.org/r1562435
Log:
SOLR-5476 tests were failing earlier
Modified:
lucene/dev/branches/branch_4x/ (props changed)
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/ElectionContext.java
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/handler/admin/CoreAdminHandler.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CoreAdminParams.java
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java?rev=1562435&r1=1562434&r2=1562435&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java Wed Jan 29 13:21:58 2014
@@ -43,7 +43,7 @@ import org.slf4j.LoggerFactory;
*/
public abstract class ElectionContext {
- private static Logger log = LoggerFactory.getLogger(ElectionContext.class);
+ static Logger log = LoggerFactory.getLogger(ElectionContext.class);
final String electionPath;
final ZkNodeProps leaderProps;
final String id;
@@ -451,11 +451,11 @@ final class OverseerElectionContext exte
@Override
void runLeaderProcess(boolean weAreReplacement) throws KeeperException,
InterruptedException {
-
+ log.info("I am going to be the leader {}", id);
final String id = leaderSeqPath
.substring(leaderSeqPath.lastIndexOf("/") + 1);
ZkNodeProps myProps = new ZkNodeProps("id", id);
-
+
zkClient.makePath(leaderPath, ZkStateReader.toJSON(myProps),
CreateMode.EPHEMERAL, true);
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=1562435&r1=1562434&r2=1562435&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 Wed Jan 29 13:21:58 2014
@@ -19,7 +19,6 @@ package org.apache.solr.cloud;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
@@ -223,18 +222,18 @@ public class OverseerCollectionProcessor
List overseerDesignates = (List) m.get("overseer");
if(overseerDesignates==null || overseerDesignates.isEmpty()) return;
-
+ if(overseerDesignates.size() == 1 && overseerDesignates.contains(getLeaderNode(zk))) return;
log.info("overseer designates {}", overseerDesignates);
List<String> nodeNames = getSortedNodeNames(zk);
if(nodeNames.size()<2) return;
//
- Set<String> nodesTobePushedBack = new HashSet<String>();
+ ArrayList<String> nodesTobePushedBack = new ArrayList<>();
//ensure that the node right behind the leader , i.r at position 1 is a Overseer
- Set<String> availableDesignates = new HashSet<String>();
+ List<String> availableDesignates = new ArrayList<String>();
- log.debug("sorted nodes {}", nodeNames);//TODO to be removed
+ log.info("sorted nodes {}", nodeNames);//TODO to be removed
for (int i = 0; i < nodeNames.size(); i++) {
String s = nodeNames.get(i);
@@ -243,7 +242,7 @@ public class OverseerCollectionProcessor
for(int j=0;j<i;j++){
if(!overseerDesignates.contains(nodeNames.get(j))) {
- nodesTobePushedBack.add(nodeNames.get(j));
+ if(!nodesTobePushedBack.contains(nodeNames.get(j))) nodesTobePushedBack.add(nodeNames.get(j));
}
}
@@ -252,9 +251,10 @@ public class OverseerCollectionProcessor
}
if(!availableDesignates.isEmpty()){
- for (String s : nodesTobePushedBack) {
+ for (int i = nodesTobePushedBack.size() - 1; i >= 0; i--) {
+ String s = nodesTobePushedBack.get(i);
log.info("pushing back {} ", s);
- invokeRejoinOverseer(s);
+ invokeOverseerOp(s, "rejoin");
}
//wait for a while to ensure the designate has indeed come in front
@@ -295,13 +295,20 @@ public class OverseerCollectionProcessor
if(leaderNode ==null) return;
if(!overseerDesignates.contains(leaderNode) && !availableDesignates.isEmpty()){
//this means there are designated Overseer nodes and I am not one of them , kill myself
- log.info("I am not an overseerdesignate , rejoining election {} ", leaderNode);
- invokeRejoinOverseer(leaderNode);
+ String newLeader = availableDesignates.get(0);
+ log.info("I am not an overseerdesignate , forcing a new leader {} ", newLeader);
+ invokeOverseerOp(newLeader, "leader");
}
}
public static List<String> getSortedNodeNames(SolrZkClient zk) throws KeeperException, InterruptedException {
- List<String> children = zk.getChildren(OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE, null, true);
+ List<String> children = null;
+ try {
+ children = zk.getChildren(OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE, null, true);
+ } catch (Exception e) {
+ log.warn("error ", e);
+ return new ArrayList<String>();
+ }
LeaderElector.sortSeqs(children);
ArrayList<String> nodeNames = new ArrayList<String>(children.size());
for (String c : children) nodeNames.add(LeaderElector.getNodeName(c));
@@ -323,9 +330,10 @@ public class OverseerCollectionProcessor
return nodeName;
}
- private void invokeRejoinOverseer(String nodeName) {
+ private void invokeOverseerOp(String nodeName, String op) {
ModifiableSolrParams params = new ModifiableSolrParams();
- params.set(CoreAdminParams.ACTION, CoreAdminAction.REJOINOVERSEERELECTION.toString());
+ params.set(CoreAdminParams.ACTION, CoreAdminAction.OVERSEEROP.toString());
+ params.set("op", op);
params.set("qt", adminPath);
ShardRequest sreq = new ShardRequest();
sreq.purpose = 1;
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=1562435&r1=1562434&r2=1562435&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 Wed Jan 29 13:21:58 2014
@@ -292,6 +292,19 @@ public final class ZkController {
return leaderVoteWait;
}
+ public void forceOverSeer(){
+ try {
+ zkClient.delete("/overseer_elect/leader",-1, true);
+ log.info("Forcing me to be leader {} ",getBaseUrl());
+ overseerElector.getContext().runLeaderProcess(true);
+ rejoinOverseerElection();
+ } catch (Exception e) {
+ throw new SolrException(ErrorCode.SERVER_ERROR, " Error becoming overseer ",e);
+
+ }
+
+ }
+
private void registerAllCoresAsDown(
final CurrentCoreDescriptorProvider registerOnReconnect, boolean updateLastPublished) {
List<CoreDescriptor> descriptors = registerOnReconnect
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1562435&r1=1562434&r2=1562435&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Wed Jan 29 13:21:58 2014
@@ -218,10 +218,13 @@ public class CoreAdminHandler extends Re
this.handleRequestBufferUpdatesAction(req, rsp);
break;
}
- case REJOINOVERSEERELECTION:{
+ case OVERSEEROP:{
ZkController zkController = coreContainer.getZkController();
if(zkController != null){
- zkController.rejoinOverseerElection();
+ String op = req.getParams().get("op");
+ if("leader".equals(op)){
+ zkController.forceOverSeer();
+ } else if ("rejoin".equals(op)) zkController.rejoinOverseerElection();
}
break;
}
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=1562435&r1=1562434&r2=1562435&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 Wed Jan 29 13:21:58 2014
@@ -17,6 +17,8 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import com.google.protobuf.TextFormat;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrServer;
@@ -47,8 +49,7 @@ import static org.apache.solr.cloud.Over
import static org.apache.solr.cloud.OverseerCollectionProcessor.getSortedNodeNames;
import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
import static org.apache.solr.common.params.CollectionParams.CollectionAction;
-
-@Ignore("Needs a reliable way to restart Overseer")
+@LuceneTestCase.Slow
public class OverseerRolesTest extends AbstractFullDistribZkTestBase{
private CloudSolrServer client;
@@ -120,12 +121,16 @@ public class OverseerRolesTest extends
}
Thread.sleep(100);
}
- if(!leaderchanged){
+ /*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",leaderchanged);
+ }*/
+ assertTrue("could not set the new overseer . expected "+
+ overseerDesignate + " current order : " +
+ getSortedNodeNames(client.getZkStateReader().getZkClient()) +
+ " ldr :"+ OverseerCollectionProcessor.getLeaderNode(client.getZkStateReader().getZkClient()) ,leaderchanged);
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CoreAdminParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CoreAdminParams.java?rev=1562435&r1=1562434&r2=1562435&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CoreAdminParams.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CoreAdminParams.java Wed Jan 29 13:21:58 2014
@@ -128,7 +128,7 @@ public abstract class CoreAdminParams
REQUESTAPPLYUPDATES,
LOAD_ON_STARTUP,
TRANSIENT,
- REJOINOVERSEERELECTION;
+ OVERSEEROP;
public static CoreAdminAction get( String p )
{