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

jdyer pushed a commit to branch feature/SOLR-17771
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 17ba151c52e4baaa2a0a8941314f31b5b4f36edb
Author: jdyer1 <[email protected]>
AuthorDate: Mon Oct 13 12:00:50 2025 -0500

    Get rid of redundant Builder class on abstract CloudSolrClient
---
 .../java/org/apache/solr/cli/RunExampleTool.java   |  3 +-
 .../manager/consumer/KafkaCrossDcConsumer.java     |  3 +-
 .../examples/UsingSolrJRefGuideExamplesTest.java   |  7 +--
 .../solr/client/solrj/impl/CloudSolrClient.java    | 62 ----------------------
 .../impl/CloudHttp2SolrClientBuilderTest.java      |  2 +-
 .../solrj/impl/CloudSolrClientBuilderTest.java     | 13 +++--
 .../impl/CloudSolrClientMultiConstructorTest.java  |  4 +-
 .../client/solrj/impl/HttpClusterStateSSLTest.java |  2 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |  2 +-
 9 files changed, 19 insertions(+), 79 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java 
b/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
index 06547d4eb19..fd530bb2854 100644
--- a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
@@ -44,6 +44,7 @@ import org.apache.commons.exec.Executor;
 import org.apache.commons.exec.environment.EnvironmentUtils;
 import org.apache.commons.io.file.PathUtils;
 import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.EnvUtils;
@@ -629,7 +630,7 @@ public class RunExampleTool extends ToolBase {
   /** wait until the number of live nodes == numNodes. */
   protected void waitToSeeLiveNodes(String zkHost, int numNodes) {
     try (CloudSolrClient cloudClient =
-        new CloudSolrClient.Builder(Collections.singletonList(zkHost), 
Optional.empty()).build()) {
+        new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost), 
Optional.empty()).build()) {
       cloudClient.connect();
       Set<String> liveNodes = cloudClient.getClusterState().getLiveNodes();
       int numLiveNodes = (liveNodes != null) ? liveNodes.size() : 0;
diff --git 
a/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/KafkaCrossDcConsumer.java
 
b/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/KafkaCrossDcConsumer.java
index bf1ba691f26..7e6e9f1bd65 100644
--- 
a/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/KafkaCrossDcConsumer.java
+++ 
b/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/KafkaCrossDcConsumer.java
@@ -43,6 +43,7 @@ import org.apache.kafka.common.errors.WakeupException;
 import org.apache.kafka.common.serialization.StringDeserializer;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrResponse;
+import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.common.SolrInputDocument;
@@ -121,7 +122,7 @@ public class KafkaCrossDcConsumer extends 
Consumer.CrossDcConsumer {
 
     protected CloudSolrClient createSolrClient() {
       log.debug("Creating new SolrClient...");
-      return new CloudSolrClient.Builder(
+      return new CloudHttp2SolrClient.Builder(
               Collections.singletonList(zkConnectString), Optional.empty())
           .build();
     }
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/examples/UsingSolrJRefGuideExamplesTest.java
 
b/solr/solr-ref-guide/modules/deployment-guide/examples/UsingSolrJRefGuideExamplesTest.java
index 5cf438775a1..ad60010c125 100644
--- 
a/solr/solr-ref-guide/modules/deployment-guide/examples/UsingSolrJRefGuideExamplesTest.java
+++ 
b/solr/solr-ref-guide/modules/deployment-guide/examples/UsingSolrJRefGuideExamplesTest.java
@@ -31,6 +31,7 @@ import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrQuery.ORDER;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.beans.Field;
+import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -254,7 +255,7 @@ public class UsingSolrJRefGuideExamplesTest extends 
SolrCloudTestCase {
     final List<String> solrUrls = new ArrayList<>();
     solrUrls.add("http://solr1:8983/solr";);
     solrUrls.add("http://solr2:8983/solr";);
-    return new CloudSolrClient.Builder(solrUrls).build();
+    return new CloudHttp2SolrClient.Builder(solrUrls).build();
     // end::solrj-cloudsolrclient-baseurl[]
   }
 
@@ -264,7 +265,7 @@ public class UsingSolrJRefGuideExamplesTest extends 
SolrCloudTestCase {
     zkServers.add("zookeeper1:2181");
     zkServers.add("zookeeper2:2181");
     zkServers.add("zookeeper3:2181");
-    return new CloudSolrClient.Builder(zkServers, Optional.empty()).build();
+    return new CloudHttp2SolrClient.Builder(zkServers, 
Optional.empty()).build();
     // end::solrj-cloudsolrclient-zookeepernoroot[]
   }
 
@@ -274,7 +275,7 @@ public class UsingSolrJRefGuideExamplesTest extends 
SolrCloudTestCase {
     zkServers.add("zookeeper1:2181");
     zkServers.add("zookeeper2:2181");
     zkServers.add("zookeeper3:2181");
-    return new CloudSolrClient.Builder(zkServers, 
Optional.of("/solr")).build();
+    return new CloudHttp2SolrClient.Builder(zkServers, 
Optional.of("/solr")).build();
     // end::solrj-cloudsolrclient-zookeeperroot[]
   }
 
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
index 647071ef0bf..b75bee952f0 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
@@ -120,68 +120,6 @@ public abstract class CloudSolrClient extends SolrClient {
 
   protected volatile Object[] locks = objectList(3);
 
-  /** Constructs {@link CloudSolrClient} instances from provided 
configuration. */
-  public static class Builder extends CloudHttp2SolrClient.Builder {
-
-    /**
-     * Provide a series of Solr URLs to be used when configuring {@link 
CloudSolrClient} instances.
-     * The solr client will use these urls to understand the cluster topology, 
which solr nodes are
-     * active etc.
-     *
-     * <p>Provided Solr URLs are expected to point to the root Solr path
-     * ("http://hostname:8983/solr";); they should not include any collections, 
cores, or other path
-     * components.
-     *
-     * <p>Usage example:
-     *
-     * <pre>
-     *   final List&lt;String&gt; solrBaseUrls = new ArrayList&lt;String&gt;();
-     *   solrBaseUrls.add("http://solr1:8983/solr";); 
solrBaseUrls.add("http://solr2:8983/solr";); 
solrBaseUrls.add("http://solr3:8983/solr";);
-     *   final SolrClient client = new 
CloudSolrClient.Builder(solrBaseUrls).build();
-     * </pre>
-     */
-    public Builder(List<String> solrUrls) {
-      super(solrUrls);
-    }
-
-    /**
-     * Provide a series of ZK hosts which will be used when configuring {@link 
CloudSolrClient}
-     * instances. This requires a dependency on {@code solr-solrj-zookeeper} 
which transitively
-     * depends on more JARs. The ZooKeeper based connection is the most 
reliable and performant
-     * means for CloudSolrClient to work. On the other hand, it means exposing 
ZooKeeper more
-     * broadly than to Solr nodes, which is a security risk.
-     *
-     * <p>Usage example when Solr stores data at the ZooKeeper root ('/'):
-     *
-     * <pre>
-     *   final List&lt;String&gt; zkServers = new ArrayList&lt;String&gt;();
-     *   zkServers.add("zookeeper1:2181"); zkServers.add("zookeeper2:2181"); 
zkServers.add("zookeeper3:2181");
-     *   final SolrClient client = new CloudSolrClient.Builder(zkServers, 
Optional.empty()).build();
-     * </pre>
-     *
-     * Usage example when Solr data is stored in a ZooKeeper chroot:
-     *
-     * <pre>
-     *    final List&lt;String&gt; zkServers = new ArrayList&lt;String&gt;();
-     *    zkServers.add("zookeeper1:2181"); zkServers.add("zookeeper2:2181"); 
zkServers.add("zookeeper3:2181");
-     *    final SolrClient client = new CloudSolrClient.Builder(zkServers, 
Optional.of("/solr")).build();
-     *  </pre>
-     *
-     * @param zkHosts a List of at least one ZooKeeper host and port (e.g. 
"zookeeper1:2181")
-     * @param zkChroot the path to the root ZooKeeper node containing Solr 
data. Provide {@code
-     *     java.util.Optional.empty()} if no ZK chroot is used.
-     */
-    @Deprecated(since = "10.0")
-    public Builder(List<String> zkHosts, Optional<String> zkChroot) {
-      super(zkHosts, zkChroot);
-    }
-
-    /** for an expert use-case */
-    public Builder(ClusterStateProvider stateProvider) {
-      super(stateProvider);
-    }
-  }
-
   static class StateCache extends ConcurrentHashMap<String, 
ExpiringCachedDocCollection> {
     final AtomicLong puts = new AtomicLong();
     final AtomicLong hits = new AtomicLong();
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientBuilderTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientBuilderTest.java
index 2530beb34a0..ac07fb12028 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientBuilderTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientBuilderTest.java
@@ -230,7 +230,7 @@ public class CloudHttp2SolrClientBuilderTest extends 
SolrCloudTestCase {
 
   public void testCustomStateProvider() throws IOException {
     ZkClientClusterStateProvider stateProvider = 
mock(ZkClientClusterStateProvider.class);
-    try (CloudSolrClient cloudSolrClient = new 
CloudSolrClient.Builder(stateProvider).build()) {
+    try (CloudSolrClient cloudSolrClient = new 
CloudHttp2SolrClient.Builder(stateProvider).build()) {
       assertEquals(stateProvider, cloudSolrClient.getClusterStateProvider());
     }
     verify(stateProvider, times(1)).close();
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientBuilderTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientBuilderTest.java
index 348e8e1d65e..4089faa454e 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientBuilderTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientBuilderTest.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import org.apache.solr.SolrTestCase;
-import org.apache.solr.client.solrj.impl.CloudSolrClient.Builder;
 import org.junit.Test;
 
 public class CloudSolrClientBuilderTest extends SolrTestCase {
@@ -35,7 +34,7 @@ public class CloudSolrClientBuilderTest extends SolrTestCase {
   @Test
   public void testSingleZkHostSpecified() throws IOException {
     try (CloudSolrClient createdClient =
-        new Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT)).build(); ) {
+        new 
CloudHttp2SolrClient.Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT)).build(); ) {
       try (ZkClientClusterStateProvider zkClientClusterStateProvider =
           ZkClientClusterStateProvider.from(createdClient)) {
         final String clientZkHost = zkClientClusterStateProvider.getZkHost();
@@ -49,7 +48,7 @@ public class CloudSolrClientBuilderTest extends SolrTestCase {
     final List<String> zkHostList = new ArrayList<>();
     zkHostList.add(ANY_ZK_HOST);
     zkHostList.add(ANY_OTHER_ZK_HOST);
-    try (CloudSolrClient createdClient = new Builder(zkHostList, 
Optional.of(ANY_CHROOT)).build()) {
+    try (CloudSolrClient createdClient = new 
CloudHttp2SolrClient.Builder(zkHostList, Optional.of(ANY_CHROOT)).build()) {
       try (ZkClientClusterStateProvider zkClientClusterStateProvider =
           ZkClientClusterStateProvider.from(createdClient)) {
         final String clientZkHost = zkClientClusterStateProvider.getZkHost();
@@ -64,7 +63,7 @@ public class CloudSolrClientBuilderTest extends SolrTestCase {
     final ArrayList<String> zkHosts = new ArrayList<>();
     zkHosts.add(ANY_ZK_HOST);
     zkHosts.add(ANY_OTHER_ZK_HOST);
-    try (CloudSolrClient createdClient = new Builder(zkHosts, 
Optional.of(ANY_CHROOT)).build()) {
+    try (CloudSolrClient createdClient = new 
CloudHttp2SolrClient.Builder(zkHosts, Optional.of(ANY_CHROOT)).build()) {
       try (ZkClientClusterStateProvider zkClientClusterStateProvider =
           ZkClientClusterStateProvider.from(createdClient)) {
         final String clientZkHost = zkClientClusterStateProvider.getZkHost();
@@ -77,7 +76,7 @@ public class CloudSolrClientBuilderTest extends SolrTestCase {
   @Test
   public void testByDefaultConfiguresClientToSendUpdatesOnlyToShardLeaders() 
throws IOException {
     try (CloudSolrClient createdClient =
-        new Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT)).build()) {
+        new 
CloudHttp2SolrClient.Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT)).build()) {
       assertTrue(createdClient.isUpdatesToLeaders());
     }
   }
@@ -85,7 +84,7 @@ public class CloudSolrClientBuilderTest extends SolrTestCase {
   @Test
   public void testIsDirectUpdatesToLeadersOnlyDefault() throws IOException {
     try (CloudSolrClient createdClient =
-        new Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT)).build()) {
+        new 
CloudHttp2SolrClient.Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT)).build()) {
       assertFalse(createdClient.isDirectUpdatesToLeadersOnly());
     }
   }
@@ -105,7 +104,7 @@ public class CloudSolrClientBuilderTest extends 
SolrTestCase {
   @Test
   public void testDefaultCollectionPassedFromBuilderToClient() throws 
IOException {
     try (CloudSolrClient createdClient =
-        new Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT))
+        new 
CloudHttp2SolrClient.Builder(Collections.singletonList(ANY_ZK_HOST), 
Optional.of(ANY_CHROOT))
             .withDefaultCollection("aCollection")
             .build()) {
       assertEquals("aCollection", createdClient.getDefaultCollection());
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientMultiConstructorTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientMultiConstructorTest.java
index 84c315637f3..dc540e49693 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientMultiConstructorTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientMultiConstructorTest.java
@@ -69,7 +69,7 @@ public class CloudSolrClientMultiConstructorTest extends 
SolrTestCase {
     }
 
     try (CloudSolrClient client =
-        (new CloudSolrClient.Builder(new ArrayList<>(hosts), 
Optional.ofNullable(clientChroot))
+        (new CloudHttp2SolrClient.Builder(new ArrayList<>(hosts), 
Optional.ofNullable(clientChroot))
             .build())) {
       try (ZkClientClusterStateProvider zkClientClusterStateProvider =
           ZkClientClusterStateProvider.from(client)) {
@@ -113,6 +113,6 @@ public class CloudSolrClientMultiConstructorTest extends 
SolrTestCase {
   public void testBadChroot() {
     final List<String> zkHosts = new ArrayList<>();
     zkHosts.add("host1:2181");
-    new CloudSolrClient.Builder(zkHosts, Optional.of("foo")).build();
+    new CloudHttp2SolrClient.Builder(zkHosts, Optional.of("foo")).build();
   }
 }
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClusterStateSSLTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClusterStateSSLTest.java
index 24e005c28c7..d160a5d43da 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClusterStateSSLTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClusterStateSSLTest.java
@@ -83,7 +83,7 @@ public class HttpClusterStateSSLTest extends 
SolrCloudTestCase {
 
     // verify the http derived cluster state (on the client side) agrees with 
what the server stored
     try (CloudSolrClient httpBasedCloudSolrClient =
-        new 
CloudSolrClient.Builder(Collections.singletonList(url0.toExternalForm())).build())
 {
+        new 
CloudHttp2SolrClient.Builder(Collections.singletonList(url0.toExternalForm())).build())
 {
       ClusterStateProvider csp = 
httpBasedCloudSolrClient.getClusterStateProvider();
       assertTrue(csp instanceof Http2ClusterStateProvider);
       verifyUrlSchemeInClusterState(csp.getCollection(collectionId), 
expectedReplicas);
diff --git 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
index 70fdbc57a87..21e5c954d6f 100644
--- 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
+++ 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
@@ -2154,7 +2154,7 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
   /**
    * This method <i>may</i> randomize unspecified aspects of the resulting 
SolrClient. Tests that do
    * not wish to have any randomized behavior should use the {@link
-   * org.apache.solr.client.solrj.impl.CloudSolrClient.Builder} class directly
+   * org.apache.solr.client.solrj.impl.CloudHttp2SolrClient.Builder} class 
directly
    */
   public static CloudSolrClient getCloudSolrClient(
       String zkHost,

Reply via email to