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 2015/11/05 13:51:27 UTC
svn commit: r1712753 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/cloud/ElectionContext.java
Author: noble
Date: Thu Nov 5 12:51:27 2015
New Revision: 1712753
URL: http://svn.apache.org/viewvc?rev=1712753&view=rev
Log:
SOLR-7989: After a new leader is elected it should change it's state to ACTIVE even
if the last published state is something else
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1712753&r1=1712752&r2=1712753&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Thu Nov 5 12:51:27 2015
@@ -325,9 +325,11 @@ Bug Fixes
a race condition can cause that client to hang in blockUntilFinished.
(Mark Miller, yonik)
-
* SOLR-8215: Only active replicas should handle incoming requests against a collection (Varun Thacker)
+* SOLR-7989: After a new leader is elected it should change it's state to ACTIVE even
+ if the last published state is something else (Ishan Chattopadhyaya, Mark Miller via noble )
+
Optimizations
----------------------
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=1712753&r1=1712752&r2=1712753&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 Thu Nov 5 12:51:27 2015
@@ -11,6 +11,7 @@ import org.apache.lucene.search.MatchAll
import org.apache.solr.cloud.overseer.OverseerAction;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.SolrZkClient;
@@ -107,6 +108,7 @@ class ShardLeaderElectionContextBase ext
private static Logger log = LoggerFactory
.getLogger(ShardLeaderElectionContextBase.class);
protected final SolrZkClient zkClient;
+ protected ZkStateReader zkStateReader;
protected String shardId;
protected String collection;
protected LeaderElector leaderElector;
@@ -119,6 +121,7 @@ class ShardLeaderElectionContextBase ext
+ "/leader_elect/" + shardId, ZkStateReader.getShardLeadersPath(
collection, shardId), props, zkStateReader.getZkClient());
this.leaderElector = leaderElector;
+ this.zkStateReader = zkStateReader;
this.zkClient = zkStateReader.getZkClient();
this.shardId = shardId;
this.collection = collection;
@@ -213,13 +216,28 @@ class ShardLeaderElectionContextBase ext
}
assert shardId != null;
- ZkNodeProps m = ZkNodeProps.fromKeyVals(Overseer.QUEUE_OPERATION,
- OverseerAction.LEADER.toLower(), ZkStateReader.SHARD_ID_PROP, shardId,
- ZkStateReader.COLLECTION_PROP, collection, ZkStateReader.BASE_URL_PROP,
- leaderProps.getProperties().get(ZkStateReader.BASE_URL_PROP),
- ZkStateReader.CORE_NAME_PROP,
- leaderProps.getProperties().get(ZkStateReader.CORE_NAME_PROP),
- ZkStateReader.STATE_PROP, Replica.State.ACTIVE.toString());
+
+ ZkNodeProps m;
+ ClusterState clusterState = zkStateReader.getClusterState();
+ Replica rep = (clusterState == null) ? null : clusterState.getReplica(collection,
+ leaderProps.getStr(ZkStateReader.CORE_NODE_NAME_PROP));
+ if (rep != null && rep.getState() != Replica.State.ACTIVE) {
+ m = ZkNodeProps.fromKeyVals(Overseer.QUEUE_OPERATION, OverseerAction.STATE.toLower(),
+ ZkStateReader.STATE_PROP, Replica.State.ACTIVE.toString(),
+ ZkStateReader.SHARD_ID_PROP, shardId,
+ ZkStateReader.COLLECTION_PROP, collection,
+ ZkStateReader.BASE_URL_PROP, leaderProps.getProperties().get(ZkStateReader.BASE_URL_PROP),
+ ZkStateReader.NODE_NAME_PROP, leaderProps.getProperties().get(ZkStateReader.NODE_NAME_PROP),
+ ZkStateReader.CORE_NODE_NAME_PROP, leaderProps.getProperties().get(ZkStateReader.CORE_NODE_NAME_PROP),
+ ZkStateReader.CORE_NAME_PROP, leaderProps.getProperties().get(ZkStateReader.CORE_NAME_PROP));
+ Overseer.getInQueue(zkClient).offer(Utils.toJSON(m));
+ }
+
+ m = ZkNodeProps.fromKeyVals(Overseer.QUEUE_OPERATION, OverseerAction.LEADER.toLower(),
+ ZkStateReader.SHARD_ID_PROP, shardId,
+ ZkStateReader.COLLECTION_PROP, collection,
+ ZkStateReader.BASE_URL_PROP, leaderProps.getProperties().get(ZkStateReader.BASE_URL_PROP),
+ ZkStateReader.CORE_NAME_PROP, leaderProps.getProperties().get(ZkStateReader.CORE_NAME_PROP));
Overseer.getInQueue(zkClient).offer(Utils.toJSON(m));
}