You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2017/05/13 00:53:32 UTC
[1/2] lucene-solr:jira/solr-10233: PrepRecovery throws NPE when core
is not found
Repository: lucene-solr
Updated Branches:
refs/heads/jira/solr-10233 096ed90b3 -> 659a0b412
PrepRecovery throws NPE when core is not found
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/e927db5a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/e927db5a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/e927db5a
Branch: refs/heads/jira/solr-10233
Commit: e927db5ad0cb425b8b1f14f8183235d5628412f6
Parents: 096ed90
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Fri May 12 17:52:50 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Fri May 12 17:52:50 2017 -0700
----------------------------------------------------------------------
.../solr/handler/admin/PrepRecoveryOp.java | 27 ++++++++------------
1 file changed, 10 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e927db5a/solr/core/src/java/org/apache/solr/handler/admin/PrepRecoveryOp.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/PrepRecoveryOp.java b/solr/core/src/java/org/apache/solr/handler/admin/PrepRecoveryOp.java
index 39892b0..748982d 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/PrepRecoveryOp.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/PrepRecoveryOp.java
@@ -64,18 +64,20 @@ class PrepRecoveryOp implements CoreAdminHandler.CoreAdminOp {
Boolean onlyIfLeader = params.getBool("onlyIfLeader");
Boolean onlyIfLeaderActive = params.getBool("onlyIfLeaderActive");
- log.info("Going to wait for coreNodeName: " + coreNodeName + ", state: " + waitForState
- + ", checkLive: " + checkLive + ", onlyIfLeader: " + onlyIfLeader
- + ", onlyIfLeaderActive: " + onlyIfLeaderActive);
- int maxTries = 0;
+ CoreContainer coreContainer = it.handler.coreContainer;
+ // wait long enough for the leader conflict to work itself out plus a little extra
+ int conflictWaitMs = coreContainer.getZkController().getLeaderConflictResolveWait();
+ int maxTries = (int) Math.round(conflictWaitMs / 1000) + 3;
+ log.info("Going to wait for coreNodeName: {}, state: {}, checkLive: {}, onlyIfLeader: {}, onlyIfLeaderActive: {}, maxTime: {} s",
+ coreNodeName, waitForState, checkLive, onlyIfLeader, onlyIfLeaderActive, maxTries);
+
Replica.State state = null;
boolean live = false;
int retry = 0;
while (true) {
- CoreContainer coreContainer = it.handler.coreContainer;
try (SolrCore core = coreContainer.getCore(cname)) {
- if (core == null && retry == 30) {
+ if (core == null && retry == Math.min(30, maxTries)) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "core not found:"
+ cname);
}
@@ -103,15 +105,6 @@ class PrepRecoveryOp implements CoreAdminHandler.CoreAdminOp {
coreContainer.getZkController().getZkStateReader().forceUpdateCollection(collectionName);
}
- if (maxTries == 0) {
- // wait long enough for the leader conflict to work itself out plus a little extra
- int conflictWaitMs = coreContainer.getZkController().getLeaderConflictResolveWait();
- maxTries = (int) Math.round(conflictWaitMs / 1000) + 3;
- log.info("Will wait a max of " + maxTries + " seconds to see " + cname + " (" +
- cloudDescriptor.getShardId() + " of " +
- cloudDescriptor.getCollectionName() + ") have state: " + waitForState);
- }
-
ClusterState clusterState = coreContainer.getZkController().getClusterState();
DocCollection collection = clusterState.getCollection(collectionName);
Slice slice = collection.getSlice(cloudDescriptor.getShardId());
@@ -161,6 +154,7 @@ class PrepRecoveryOp implements CoreAdminHandler.CoreAdminOp {
String collection = null;
String leaderInfo = null;
String shardId = null;
+
try {
CloudDescriptor cloudDescriptor =
core.getCoreDescriptor().getCloudDescriptor();
@@ -176,8 +170,7 @@ class PrepRecoveryOp implements CoreAdminHandler.CoreAdminOp {
"I was asked to wait on state " + waitForState + " for "
+ shardId + " in " + collection + " on " + nodeName
+ " but I still do not see the requested state. I see state: "
- + Objects.toString(state) + " live:" + live + " leader from ZK: " + leaderInfo
- );
+ + Objects.toString(state) + " live:" + live + " leader from ZK: " + leaderInfo);
}
if (coreContainer.isShutDown()) {
[2/2] lucene-solr:jira/solr-10233: Add support for ReplaceNodeCmd
Posted by tf...@apache.org.
Add support for ReplaceNodeCmd
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/659a0b41
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/659a0b41
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/659a0b41
Branch: refs/heads/jira/solr-10233
Commit: 659a0b4125559225e8c68efdabc8b670adf0715d
Parents: e927db5
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Fri May 12 17:53:22 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Fri May 12 17:53:22 2017 -0700
----------------------------------------------------------------------
.../org/apache/solr/cloud/ReplaceNodeCmd.java | 4 ++--
.../org/apache/solr/cloud/ReplaceNodeTest.java | 21 ++++++++++++++++++--
.../solrj/request/CollectionAdminRequest.java | 5 ++---
3 files changed, 23 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/659a0b41/solr/core/src/java/org/apache/solr/cloud/ReplaceNodeCmd.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ReplaceNodeCmd.java b/solr/core/src/java/org/apache/solr/cloud/ReplaceNodeCmd.java
index 92c9afe..e4240be 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ReplaceNodeCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ReplaceNodeCmd.java
@@ -154,9 +154,9 @@ public class ReplaceNodeCmd implements OverseerCollectionMessageHandler.Cmd {
SHARD_ID_PROP, slice.getName(),
ZkStateReader.CORE_NAME_PROP, replica.getCoreName(),
ZkStateReader.REPLICA_PROP, replica.getName(),
+ ZkStateReader.REPLICA_TYPE, replica.getType().name(),
CoreAdminParams.NODE, source);
- sourceReplicas.add(props
- );
+ sourceReplicas.add(props);
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/659a0b41/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
index 1c7575d..e1af607 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
@@ -21,6 +21,7 @@ package org.apache.solr.cloud;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.Set;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -29,6 +30,9 @@ import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
import org.apache.solr.client.solrj.response.CoreAdminResponse;
import org.apache.solr.client.solrj.response.RequestStatusState;
+import org.apache.solr.common.cloud.DocCollection;
+import org.apache.solr.common.cloud.Replica;
+import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.util.StrUtils;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -60,7 +64,12 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
Collections.shuffle(l, random());
String emptyNode = l.remove(0);
String node2bdecommissioned = l.get(0);
- CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 5, 2);
+ CollectionAdminRequest.Create create;
+ create = pickRandom(CollectionAdminRequest.createCollection(coll, "conf1", 5, 2),
+ CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,1,0),
+ CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,1,1),
+ CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,0,1),
+ CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,2,0));
create.setCreateNodeSet(StrUtils.join(l, ',')).setMaxShardsPerNode(3);
cloudClient.request(create);
log.info("excluded_node : {} ", emptyNode);
@@ -98,7 +107,15 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
assertTrue(success);
try (HttpSolrClient coreclient = getHttpSolrClient(cloudClient.getZkStateReader().getBaseUrlForNodeName(emptyNode))) {
CoreAdminResponse status = CoreAdminRequest.getStatus(null, coreclient);
- assertTrue(status.getCoreStatus().size() == 0);
+ assertEquals("Expecting no cores but found some: " + status.getCoreStatus(), 0, status.getCoreStatus().size());
+ }
+
+ DocCollection collection = cloudClient.getZkStateReader().getClusterState().getCollection(coll);
+ assertEquals(create.getNumShards().intValue(), collection.getSlices().size());
+ for (Slice s:collection.getSlices()) {
+ assertEquals(create.getNumNrtReplicas().intValue(), s.getReplicas(EnumSet.of(Replica.Type.NRT)).size());
+ assertEquals(create.getNumTlogReplicas().intValue(), s.getReplicas(EnumSet.of(Replica.Type.TLOG)).size());
+ assertEquals(create.getNumPullReplicas().intValue(), s.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/659a0b41/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
index 0b8dd74..dcfed27 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
@@ -457,9 +457,8 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
public Integer getReplicationFactor() { return getNumNrtReplicas(); }
public Integer getNumNrtReplicas() { return nrtReplicas; }
public Boolean getAutoAddReplicas() { return autoAddReplicas; }
- public Integer getNrtReplicas() { return nrtReplicas; }
- public Integer getTlogReplicas() {return tlogReplicas;}
- public Integer getPullReplicas() {return pullReplicas;}
+ public Integer getNumTlogReplicas() {return tlogReplicas;}
+ public Integer getNumPullReplicas() {return pullReplicas;}
public Integer getStateFormat() { return stateFormat; }