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 <[email protected]>
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);

Reply via email to