You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by no...@apache.org on 2022/09/19 12:11:14 UTC
[solr] branch main updated: SOLR-16344: PlacementPlugin gets a request without a collection (#1022)
This is an automated email from the ASF dual-hosted git repository.
noble pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 45d5575b89a SOLR-16344: PlacementPlugin gets a request without a collection (#1022)
45d5575b89a is described below
commit 45d5575b89a4bfbc708beabc8c071740a1354033
Author: Noble Paul <no...@users.noreply.github.com>
AuthorDate: Mon Sep 19 22:11:09 2022 +1000
SOLR-16344: PlacementPlugin gets a request without a collection (#1022)
---
.../cloud/api/collections/CreateCollectionCmd.java | 32 ++++++++++++++++++++++
1 file changed, 32 insertions(+)
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 9f082ec4521..6cbcd910a57 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
@@ -45,10 +45,13 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import org.apache.solr.client.solrj.cloud.AlreadyExistsException;
import org.apache.solr.client.solrj.cloud.BadVersionException;
+import org.apache.solr.client.solrj.cloud.DelegatingCloudManager;
+import org.apache.solr.client.solrj.cloud.DelegatingClusterStateProvider;
import org.apache.solr.client.solrj.cloud.DistribStateManager;
import org.apache.solr.client.solrj.cloud.NotEmptyException;
import org.apache.solr.client.solrj.cloud.SolrCloudManager;
import org.apache.solr.client.solrj.cloud.VersionedData;
+import org.apache.solr.client.solrj.impl.ClusterStateProvider;
import org.apache.solr.cloud.DistributedClusterStateUpdater;
import org.apache.solr.cloud.Overseer;
import org.apache.solr.cloud.RefreshCollectionMessage;
@@ -511,6 +514,7 @@ public class CreateCollectionCmd implements CollApiCmds.CollectionApiCommand {
int numPullReplicas = message.getInt(PULL_REPLICAS, 0);
int numSlices = shardNames.size();
+ cloudManager = wrapCloudManager(clusterState, cloudManager);
// we need to look at every node and see how many cores it serves
// add our new cores to existing nodes serving the least number of cores
@@ -553,6 +557,34 @@ public class CreateCollectionCmd implements CollApiCmds.CollectionApiCommand {
}
return replicaPositions;
}
+ // the cloud manager should reflect the latest internal cluster state
+ private static SolrCloudManager wrapCloudManager(
+ ClusterState clusterState, SolrCloudManager solrCloudManager) {
+ final ClusterStateProvider csp =
+ new DelegatingClusterStateProvider(solrCloudManager.getClusterStateProvider()) {
+ @Override
+ public ClusterState.CollectionRef getState(String collection) {
+ return clusterState.getCollectionRef(collection);
+ }
+
+ @Override
+ public ClusterState getClusterState() {
+ return clusterState;
+ }
+
+ @Override
+ public DocCollection getCollection(String name) throws IOException {
+ return clusterState.getCollection(name);
+ }
+ };
+
+ return new DelegatingCloudManager(solrCloudManager) {
+ @Override
+ public ClusterStateProvider getClusterStateProvider() {
+ return csp;
+ }
+ };
+ }
public static void checkReplicaTypes(ZkNodeProps message) {
int numTlogReplicas = message.getInt(TLOG_REPLICAS, 0);