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 2021/02/08 00:50:35 UTC
[lucene-solr] 01/01: wait for all replicas to be active
This is an automated email from the ASF dual-hosted git repository.
noble pushed a commit to branch jira/solr15138
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit bc7813b52325d6621b09eeac171c64afa7adbea7
Author: noblepaul <no...@gmail.com>
AuthorDate: Mon Feb 8 11:50:09 2021 +1100
wait for all replicas to be active
---
.../solr/cloud/api/collections/CreateCollectionCmd.java | 5 ++++-
.../java/org/apache/solr/common/cloud/PerReplicaStates.java | 13 +++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
index d9de9a5..8596f90 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
@@ -264,8 +264,11 @@ public class CreateCollectionCmd implements OverseerCollectionMessageHandler.Cmd
log.info("Cleaned up artifacts for failed create collection for [{}]", collectionName);
throw new SolrException(ErrorCode.BAD_REQUEST, "Underlying core creation failed while creating collection: " + collectionName);
} else {
+ //we want to wait till all the replicas are ACTIVE for PRS collections because
+ ocmh.zkStateReader.waitForState(collectionName, 30, TimeUnit.SECONDS, (liveNodes, c) ->
+ c.getPerReplicaStates() == null || // this is not a PRS collection
+ c.getPerReplicaStates().allActive());
log.debug("Finished create command on all shards for collection: {}", collectionName);
-
// Emit a warning about production use of data driven functionality
boolean defaultConfigSetUsed = message.getStr(COLL_CONF) == null ||
message.getStr(COLL_CONF).equals(DEFAULT_CONFIGSET_NAME);
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/PerReplicaStates.java b/solr/solrj/src/java/org/apache/solr/common/cloud/PerReplicaStates.java
index af4bb43..be40066 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/PerReplicaStates.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/PerReplicaStates.java
@@ -67,6 +67,8 @@ public class PerReplicaStates implements ReflectMapWriter {
@JsonProperty
public final SimpleMap<State> states;
+ private volatile Boolean allActive;
+
/**
* Construct with data read from ZK
* @param path path from where this is loaded
@@ -92,6 +94,17 @@ public class PerReplicaStates implements ReflectMapWriter {
}
+ /** Check and return if all replicas are ACTIVE
+ */
+ public boolean allActive() {
+ if (this.allActive != null) return allActive;
+ boolean[] result = new boolean[]{true};
+ states.forEachEntry((r, s) -> {
+ if (s.state != Replica.State.ACTIVE) result[0] = false;
+ });
+ return this.allActive = result[0];
+ }
+
/**Get the changed replicas
*/
public static Set<String> findModifiedReplicas(PerReplicaStates old, PerReplicaStates fresh) {