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/16 13:50:21 UTC
svn commit: r1558776 - in /lucene/dev/branches/branch_4x/solr: ./ core/
core/src/java/org/apache/solr/cloud/
core/src/java/org/apache/solr/handler/admin/
core/src/test/org/apache/solr/cloud/ solrj/
solrj/src/java/org/apache/solr/common/cloud/ solrj/src...
Author: noble
Date: Thu Jan 16 12:50:21 2014
New Revision: 1558776
URL: http://svn.apache.org/r1558776
Log:
SOLR-5476 Overseer Role for nodes
Added:
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java
- copied, changed from r1558760, lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java
Modified:
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt
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/LeaderElector.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/CollectionsHandler.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CoreAdminParams.java
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1558776&r1=1558775&r2=1558776&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Thu Jan 16 12:50:21 2014
@@ -118,6 +118,8 @@ New Features
* SOLR-5631: Add support for Lucene's FreeTextSuggester.
(Areek Zillur via Robert Muir)
+* SOLR-5476: Overseer Role for nodes (Noble Paul)
+
Bug Fixes
----------------------
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=1558776&r1=1558775&r2=1558776&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 Thu Jan 16 12:50:21 2014
@@ -432,10 +432,10 @@ final class OverseerElectionContext exte
private final SolrZkClient zkClient;
private Overseer overseer;
-
+ public static final String PATH = "/overseer_elect";
public OverseerElectionContext(SolrZkClient zkClient, Overseer overseer, final String zkNodeName) {
- super(zkNodeName, "/overseer_elect", "/overseer_elect/leader", null, zkClient);
+ super(zkNodeName,PATH , PATH+"/leader", null, zkClient);
this.overseer = overseer;
this.zkClient = zkClient;
try {
@@ -477,5 +477,5 @@ final class OverseerElectionContext exte
// leader changed - close the overseer
overseer.close();
}
-
+
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java?rev=1558776&r1=1558775&r2=1558776&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java Thu Jan 16 12:50:21 2014
@@ -59,7 +59,8 @@ public class LeaderElector {
private final static Pattern LEADER_SEQ = Pattern.compile(".*?/?.*?-n_(\\d+)");
private final static Pattern SESSION_ID = Pattern.compile(".*?/?(.*?-.*?)-n_\\d+");
-
+ private final static Pattern NODE_NAME = Pattern.compile(".*?/?(.*?-)(.*?)-n_\\d+");
+
protected SolrZkClient zkClient;
private ZkCmdExecutor zkCmdExecutor;
@@ -168,7 +169,7 @@ public class LeaderElector {
*
* @return sequence number
*/
- private int getSeq(String nStringSequence) {
+ public static int getSeq(String nStringSequence) {
int seq = 0;
Matcher m = LEADER_SEQ.matcher(nStringSequence);
if (m.matches()) {
@@ -191,6 +192,19 @@ public class LeaderElector {
}
return id;
}
+
+ public static String getNodeName(String nStringSequence){
+ String result;
+ Matcher m = NODE_NAME.matcher(nStringSequence);
+ if (m.matches()) {
+ result = m.group(2);
+ } else {
+ throw new IllegalStateException("Could not find regex match in:"
+ + nStringSequence);
+ }
+ return result;
+
+ }
/**
* Returns int list given list of form n_0000000001, n_0000000003, etc.
@@ -291,7 +305,7 @@ public class LeaderElector {
/**
* Sort n string sequence list.
*/
- private void sortSeqs(List<String> seqs) {
+ public static void sortSeqs(List<String> seqs) {
Collections.sort(seqs, new Comparator<String>() {
@Override
@@ -301,4 +315,8 @@ public class LeaderElector {
}
});
}
+ void retryElection() throws KeeperException, InterruptedException, IOException {
+ context.cancelElection();
+ joinElection(context, 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=1558776&r1=1558775&r2=1558776&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 Thu Jan 16 12:50:21 2014
@@ -39,6 +39,7 @@ import org.apache.solr.common.cloud.Plai
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.RoutingRule;
import org.apache.solr.common.cloud.Slice;
+import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
@@ -54,7 +55,9 @@ import org.apache.solr.handler.component
import org.apache.solr.handler.component.ShardRequest;
import org.apache.solr.handler.component.ShardResponse;
import org.apache.solr.update.SolrIndexSplitter;
+import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,6 +67,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -73,6 +77,8 @@ import static org.apache.solr.cloud.Assi
import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
import static org.apache.solr.common.cloud.ZkStateReader.REPLICA_PROP;
import static org.apache.solr.common.cloud.ZkStateReader.SHARD_ID_PROP;
+import static org.apache.solr.common.params.CollectionParams.CollectionAction.ADDROLE;
+import static org.apache.solr.common.params.CollectionParams.CollectionAction.REMOVEROLE;
public class OverseerCollectionProcessor implements Runnable, ClosableThread {
@@ -158,7 +164,14 @@ public class OverseerCollectionProcessor
log.debug("am_i_leader unclear {}", isLeader);
isLeader = amILeader(); // not a no, not a yes, try ask again
}
- while (!this.isClosed) {
+
+ try {
+ prioritizeOverseerNodes();
+ } catch (Exception e) {
+ log.error("Unable to prioritize overseer ", e);
+
+ }
+ while (!this.isClosed) {
try {
isLeader = amILeader();
if (LeaderStatus.NO == isLeader) {
@@ -198,7 +211,96 @@ public class OverseerCollectionProcessor
public void close() {
isClosed = true;
}
-
+
+ private void prioritizeOverseerNodes() throws KeeperException, InterruptedException {
+ log.info("prioritizing overseer nodes");
+ SolrZkClient zk = zkStateReader.getZkClient();
+ if(!zk.exists(ZkStateReader.ROLES,true))return;
+ Map m = (Map) ZkStateReader.fromJSON(zk.getData(ZkStateReader.ROLES, null, new Stat(), true));
+
+ List overseerDesignates = (List) m.get("overseer");
+ if(overseerDesignates==null || overseerDesignates.isEmpty()) return;
+
+ log.debug("overseer designates {}", overseerDesignates);
+
+ List<String> children = zk.getChildren(OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE, null, true);
+
+
+ if(children.size()<2) return;
+
+ LeaderElector.sortSeqs(children);
+ ArrayList<String> nodeNames = new ArrayList<String>(children.size());
+ for (String c : children) nodeNames.add(LeaderElector.getNodeName(c));
+ boolean overseerDesignateAvailable = false;
+ //ensure that the node right behind the leader , i.r at position 1 is a Overseer
+ String newOverseerDesignate = null;
+ log.debug("sorted nodes {}", nodeNames);
+ for (int i = 1; i < nodeNames.size(); i++) {
+ String s = nodeNames.get(i);
+ if (overseerDesignates.contains(s)) {
+ log.info(" found an overseer designate to be promoted to the front : {}, pushing others back", s);
+ overseerDesignateAvailable = true;
+ newOverseerDesignate = s;
+ for (int j = 1; j < i; j++) {
+ String nodeName = nodeNames.get(j);
+ log.debug("pushing back {} ", nodeName);
+ invokeRejoinOverseer(nodeName);
+ }
+ break;
+ }
+ if(overseerDesignateAvailable) break;
+ }
+
+ if(overseerDesignateAvailable){
+ //wait for a while to ensure the designate has indeed come in front
+ boolean prioritizationComplete = false;
+ long timeout = System.currentTimeMillis() + 5000;
+
+ for(;System.currentTimeMillis()< timeout ;){
+ children = zk.getChildren(OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE, null, true);
+ LeaderElector.sortSeqs(children);
+
+ String frontRunner = LeaderElector.getNodeName(children.get(1));
+ log.debug("Frontrunner : {}", frontRunner);
+ if(newOverseerDesignate.equals(frontRunner)){
+ prioritizationComplete = true;
+ break;
+ }
+ Thread.sleep(50);
+ }
+
+ if(!prioritizationComplete) {
+ log.warn("Could not make the Overseer designate '{}' the frontrunner", newOverseerDesignate);
+ }
+
+ } else {
+ log.warn("No overseer designates are available");
+ return;
+ }
+
+
+
+ if(!overseerDesignates.contains( nodeNames.get(0)) && overseerDesignateAvailable){
+ //this means there are designated Overseer nodes and I am not one of them , kill myself
+ invokeRejoinOverseer(nodeNames.get(0));
+ }
+
+
+ }
+
+ private void invokeRejoinOverseer(String nodeName) {
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set(CoreAdminParams.ACTION, CoreAdminAction.REJOINOVERSEERELECTION.toString());
+ params.set("qt", adminPath);
+ ShardRequest sreq = new ShardRequest();
+ sreq.purpose = 1;
+ String replica = nodeName.replaceFirst("_", "/");
+ sreq.shards = new String[]{replica};
+ sreq.actualShards = sreq.shards;
+ sreq.params = params;
+ shardHandler.submit(sreq, replica, sreq.params);
+ }
+
protected LeaderStatus amILeader() {
try {
ZkNodeProps props = ZkNodeProps.load(zkStateReader.getZkClient().getData(
@@ -250,7 +352,11 @@ public class OverseerCollectionProcessor
deleteReplica(zkStateReader.getClusterState(), message, results);
} else if (MIGRATE.equals(operation)) {
migrate(zkStateReader.getClusterState(), message, results);
- } else {
+ } else if(REMOVEROLE.toString().toLowerCase().equals(operation) || ADDROLE.toString().toLowerCase().equals(operation) ){
+ processRoleCommand(message, operation);
+ }
+
+ else {
throw new SolrException(ErrorCode.BAD_REQUEST, "Unknown operation:"
+ operation);
}
@@ -267,6 +373,48 @@ public class OverseerCollectionProcessor
return new OverseerSolrResponse(results);
}
+ private void processRoleCommand(ZkNodeProps message, String operation) throws KeeperException, InterruptedException {
+ SolrZkClient zkClient = zkStateReader.getZkClient();
+ Map roles = null;
+ String node = message.getStr("node");
+
+ String roleName = message.getStr("role");
+ boolean nodeExists = false;
+ if(nodeExists = zkClient.exists(ZkStateReader.ROLES, true)){
+ roles = (Map) ZkStateReader.fromJSON(zkClient.getData(ZkStateReader.ROLES, null, new Stat(), true));
+ } else {
+ roles = new LinkedHashMap(1);
+ }
+
+ List nodeList= (List) roles.get(roleName);
+ if(nodeList == null) roles.put(roleName, nodeList = new ArrayList());
+ if(ADDROLE.toString().toLowerCase().equals(operation) ){
+ log.info("Overseer role added to {}", node);
+ if(!nodeList.contains(node)) nodeList.add(node);
+ } else if(REMOVEROLE.toString().toLowerCase().equals(operation)) {
+ log.info("Overseer role removed from {}", node);
+ nodeList.remove(node);
+ }
+
+ if(nodeExists){
+ zkClient.setData(ZkStateReader.ROLES, ZkStateReader.toJSON(roles),true);
+ } else {
+ zkClient.create(ZkStateReader.ROLES, ZkStateReader.toJSON(roles), CreateMode.PERSISTENT,true);
+ }
+ //if there are too many nodes this command may time out. And most likely dedicated
+ // overseers are created when there are too many nodes . So , do this operation in a separate thread
+ new Thread(){
+ @Override
+ public void run() {
+ try {
+ prioritizeOverseerNodes();
+ } catch (Exception e) {
+ log.error("Error in prioritizing Overseer",e);
+ }
+
+ }
+ }.start();
+ }
private void deleteReplica(ClusterState clusterState, ZkNodeProps message, NamedList results) throws KeeperException, InterruptedException {
checkRequired(message, COLLECTION_PROP, SHARD_ID_PROP,REPLICA_PROP);
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=1558776&r1=1558775&r2=1558776&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 Thu Jan 16 12:50:21 2014
@@ -1602,4 +1602,14 @@ public final class ZkController {
}
return out;
}
+
+ public void rejoinOverseerElection() {
+ try {
+ overseerElector.retryElection();
+ } catch (Exception e) {
+ throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to rejoin election", e);
+ }
+
+ }
+
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java?rev=1558776&r1=1558775&r2=1558776&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java Thu Jan 16 12:50:21 2014
@@ -17,6 +17,8 @@ package org.apache.solr.handler.admin;
* limitations under the License.
*/
+import com.google.common.collect.ImmutableSet;
+import org.apache.commons.lang.StringUtils;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
@@ -32,6 +34,7 @@ import org.apache.solr.common.cloud.Impl
import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.common.params.CollectionParams;
import org.apache.solr.common.params.CollectionParams.CollectionAction;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -51,6 +54,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
import static org.apache.solr.cloud.Overseer.QUEUE_OPERATION;
import static org.apache.solr.cloud.OverseerCollectionProcessor.COLL_CONF;
@@ -65,6 +69,8 @@ import static org.apache.solr.cloud.Over
import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
import static org.apache.solr.common.cloud.ZkStateReader.SHARD_ID_PROP;
+import static org.apache.solr.common.params.CollectionParams.CollectionAction.ADDROLE;
+import static org.apache.solr.common.params.CollectionParams.CollectionAction.REMOVEROLE;
public class CollectionsHandler extends RequestHandlerBase {
protected static Logger log = LoggerFactory.getLogger(CollectionsHandler.class);
@@ -173,6 +179,12 @@ public class CollectionsHandler extends
case MIGRATE: {
this.handleMigrate(req, rsp);
break;
+ } case ADDROLE:{
+ handleRole(ADDROLE, req, rsp);
+ break;
+ } case REMOVEROLE:{
+ handleRole(REMOVEROLE, req, rsp);
+ break;
}
default: {
throw new RuntimeException("Unknown action: " + action);
@@ -181,7 +193,18 @@ public class CollectionsHandler extends
rsp.setHttpCaching(false);
}
-
+
+ static Set<String> KNOWN_ROLES = ImmutableSet.of("overseer");
+
+ private void handleRole(CollectionAction action, SolrQueryRequest req, SolrQueryResponse rsp) throws KeeperException, InterruptedException {
+ req.getParams().required().check("role", "node");
+ Map<String, Object> map = ZkNodeProps.makeMap(Overseer.QUEUE_OPERATION, action.toString().toLowerCase());
+ copyIfNotNull(req.getParams(), map,"role", "node");
+ ZkNodeProps m = new ZkNodeProps(map);
+ if(!KNOWN_ROLES.contains(m.getStr("role"))) throw new SolrException(ErrorCode.BAD_REQUEST,"Unknown role. Supported roles are ,"+ KNOWN_ROLES);
+ handleResponse(action.toString().toLowerCase(), m, rsp);
+ }
+
public static long DEFAULT_ZK_TIMEOUT = 60*1000;
private void handleResponse(String operation, ZkNodeProps m,
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=1558776&r1=1558775&r2=1558776&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 Thu Jan 16 12:50:21 2014
@@ -218,6 +218,13 @@ public class CoreAdminHandler extends Re
this.handleRequestBufferUpdatesAction(req, rsp);
break;
}
+ case REJOINOVERSEERELECTION:{
+ ZkController zkController = coreContainer.getZkController();
+ if(zkController != null){
+ zkController.rejoinOverseerElection();
+ }
+ break;
+ }
default: {
this.handleCustomAction(req, rsp);
break;
Copied: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java (from r1558760, lucene/dev/trunk/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?p2=lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java&p1=lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java&r1=1558760&r2=1558776&rev=1558776&view=diff
==============================================================================
--- lucene/dev/trunk/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 Thu Jan 16 12:50:21 2014
@@ -94,7 +94,7 @@ public class OverseerRolesTest extends
waitForRecoveriesToFinish(collectionName, false);
Set<String> nodes = client.getZkStateReader().getClusterState().getLiveNodes();
- ArrayList<String> l = new ArrayList<>(nodes);
+ ArrayList<String> l = new ArrayList<String>(nodes);
log.info("All nodes {}", l);
String currentLeader = getLeaderNode(client);
log.info("Current leader {} ", currentLeader);
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java?rev=1558776&r1=1558775&r2=1558776&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java Thu Jan 16 12:50:21 2014
@@ -68,7 +68,8 @@ public class ZkStateReader {
public static final String LIVE_NODES_ZKNODE = "/live_nodes";
public static final String ALIASES = "/aliases.json";
public static final String CLUSTER_STATE = "/clusterstate.json";
-
+ public static final String ROLES = "/roles.json";
+
public static final String RECOVERING = "recovering";
public static final String RECOVERY_FAILED = "recovery_failed";
public static final String ACTIVE = "active";
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java?rev=1558776&r1=1558775&r2=1558776&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java Thu Jan 16 12:50:21 2014
@@ -28,7 +28,7 @@ public interface CollectionParams
public enum CollectionAction {
- CREATE, DELETE, RELOAD, SYNCSHARD, CREATEALIAS, DELETEALIAS, SPLITSHARD, DELETESHARD, CREATESHARD, DELETEREPLICA, MIGRATE;
+ CREATE, DELETE, RELOAD, SYNCSHARD, CREATEALIAS, DELETEALIAS, SPLITSHARD, DELETESHARD, CREATESHARD, DELETEREPLICA, MIGRATE, ADDROLE,REMOVEROLE ;
public static CollectionAction get( String p )
{
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=1558776&r1=1558775&r2=1558776&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 Thu Jan 16 12:50:21 2014
@@ -127,7 +127,8 @@ public abstract class CoreAdminParams
REQUESTBUFFERUPDATES,
REQUESTAPPLYUPDATES,
LOAD_ON_STARTUP,
- TRANSIENT;
+ TRANSIENT,
+ REJOINOVERSEERELECTION;
public static CoreAdminAction get( String p )
{