This is an automated email from the ASF dual-hosted git repository.

sanjaydutt pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new 6dcfdd7ddf0 SOLR-17644: SolrCloudManager directly uses 
HttpSolrClientProvider's client, resolving missing auth listeners (#3208)
6dcfdd7ddf0 is described below

commit 6dcfdd7ddf058b84ae286ded39f77284e089f4d7
Author: Sanjay Dutt <[email protected]>
AuthorDate: Fri Feb 28 13:12:50 2025 +0530

    SOLR-17644: SolrCloudManager directly uses HttpSolrClientProvider's client, 
resolving missing auth listeners (#3208)
    
    Co-authored-by: David Smiley <[email protected]>
    (cherry picked from commit f1badb755d11996742478ff8f19d5fac1951b56e)
---
 solr/CHANGES.txt                                   |  3 +++
 .../java/org/apache/solr/cloud/ZkController.java   | 12 +---------
 .../solr/security/BasicAuthIntegrationTest.java    | 28 ++++++++++++++++++++++
 3 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 28f0a7eba80..d8dce619b40 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -64,6 +64,9 @@ Bug Fixes
   Users can still opt-in by providing a "indexSearcherExecutorThreads" > 0.
   (Houston Putman, Varun Thacker, David Smiley, Luke Kot-Zaniewski)
 
+* SOLR-17644: Fixes collection creation failure when using a replica placement 
plugin with basic auth. SolrCloudManager
+  now directly uses HttpSolrClientProvider's client, resolving missing auth 
listeners. (Sanjay Dutt, David Smiley)
+
 Dependency Upgrades
 ---------------------
 * SOLR-17471: Upgrade Lucene to 9.12.1. (Pierre Salagnac, Christine Poerschke)
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java 
b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index 72333396039..7eafa88028e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -207,9 +207,6 @@ public class ZkController implements Closeable {
   public final ZkStateReader zkStateReader;
   private SolrCloudManager cloudManager;
 
-  // only for internal usage
-  private Http2SolrClient http2SolrClient;
-
   private CloudHttp2SolrClient cloudSolrClient;
 
   private final String zkServerAddress; // example: 127.0.0.1:54062/solr
@@ -765,7 +762,6 @@ public class ZkController implements Closeable {
       sysPropsCacher.close();
       customThreadPool.execute(() -> IOUtils.closeQuietly(cloudManager));
       customThreadPool.execute(() -> IOUtils.closeQuietly(cloudSolrClient));
-      customThreadPool.execute(() -> IOUtils.closeQuietly(http2SolrClient));
 
       try {
         try {
@@ -861,15 +857,9 @@ public class ZkController implements Closeable {
       if (cloudManager != null) {
         return cloudManager;
       }
-      http2SolrClient =
-          new Http2SolrClient.Builder()
-              .withHttpClient(cc.getDefaultHttpSolrClient())
-              .withIdleTimeout(30000, TimeUnit.MILLISECONDS)
-              .withConnectionTimeout(15000, TimeUnit.MILLISECONDS)
-              .build();
       cloudSolrClient =
           new CloudHttp2SolrClient.Builder(new 
ZkClientClusterStateProvider(zkStateReader))
-              .withHttpClient(http2SolrClient)
+              .withHttpClient(cc.getDefaultHttpSolrClient())
               .build();
       cloudManager = new SolrClientCloudManager(cloudSolrClient, 
cc.getObjectCache());
       cloudManager.getClusterStateProvider().connect();
diff --git 
a/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java 
b/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java
index a8396c1047a..8a38bb0dfb6 100644
--- a/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java
@@ -45,8 +45,11 @@ import org.apache.solr.client.solrj.request.QueryRequest;
 import 
org.apache.solr.client.solrj.request.RequestWriter.StringPayloadContentWriter;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.client.solrj.request.V2Request;
+import org.apache.solr.client.solrj.request.beans.PluginMeta;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.cloud.SolrCloudAuthTestCase;
+import org.apache.solr.cluster.placement.PlacementPluginFactory;
+import org.apache.solr.cluster.placement.plugins.MinimizeCoresPlacementFactory;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
@@ -352,6 +355,31 @@ public class BasicAuthIntegrationTest extends 
SolrCloudAuthTestCase {
       assertAuthMetricsMinimums(31, 20, 9, 1, 1, 0);
       assertPkiAuthMetricsMinimums(19, 19, 0, 0, 0, 0);
 
+      // This succeeds with auth enabled
+      CollectionAdminRequest.createCollection("c123", "conf", 3, 1)
+          .setBasicAuthCredentials("harry", "HarryIsUberCool")
+          .process(cluster.getSolrClient());
+      cluster.waitForActiveCollection("c123", 3, 3);
+
+      // SOLR-17644
+      // Test Collection creation when replica placement plugin and basic auth 
are enabled
+      PluginMeta plugin = new PluginMeta();
+      plugin.name = PlacementPluginFactory.PLUGIN_NAME;
+      plugin.klass = MinimizeCoresPlacementFactory.class.getName();
+      V2Request v2Request =
+          new V2Request.Builder("/cluster/plugin")
+              .forceV2(true)
+              .POST()
+              .withPayload(singletonMap("add", plugin))
+              .build();
+      v2Request.setBasicAuthCredentials("harry", "HarryIsUberCool");
+      v2Request.process(cluster.getSolrClient());
+
+      CollectionAdminRequest.createCollection("c456", "conf", 3, 1)
+          .setBasicAuthCredentials("harry", "HarryIsUberCool")
+          .process(cluster.getSolrClient());
+      cluster.waitForActiveCollection("c456", 3, 3);
+
       executeCommand(
           baseUrl + authcPrefix,
           cl,

Reply via email to