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