You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ab...@apache.org on 2024/03/12 15:06:19 UTC

(solr-sandbox) branch main updated: Update to Solr 9. (#100)

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

ab pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr-sandbox.git


The following commit(s) were added to refs/heads/main by this push:
     new 6e0d0a4  Update to Solr 9. (#100)
6e0d0a4 is described below

commit 6e0d0a4a2f4c5acf8b304c6361d3b7248ff9f328
Author: Andrzej BiaƂecki <ab...@apache.org>
AuthorDate: Tue Mar 12 16:06:13 2024 +0100

    Update to Solr 9. (#100)
---
 .../common/MirroredSolrRequestSerializerTest.java  |  4 ++--
 crossdc-consumer/build.gradle                      | 24 +++++++++++++++++-----
 .../org/apache/solr/crossdc/consumer/Consumer.java |  2 +-
 .../messageprocessor/SolrMessageProcessor.java     | 11 ++++++++--
 .../solr/crossdc/SimpleSolrIntegrationTest.java    |  2 +-
 crossdc-producer/build.gradle                      |  4 ++++
 .../MirroringUpdateRequestProcessorFactory.java    |  2 +-
 .../solr/update/processor/ProducerMetrics.java     | 12 +++++------
 .../apache/solr/crossdc/DeleteByQueryToIdTest.java | 16 ++++++++-------
 .../solr/crossdc/RetryQueueIntegrationTest.java    | 12 +++++++----
 .../solr/crossdc/SolrAndKafkaIntegrationTest.java  | 13 ++++++------
 ...SolrAndKafkaMultiCollectionIntegrationTest.java | 10 ++++-----
 .../solr/crossdc/SolrAndKafkaReindexTest.java      | 14 ++++++-------
 .../solr/crossdc/ZkConfigIntegrationTest.java      | 14 ++++++-------
 .../admin/MirroringCollectionsHandlerTest.java     |  4 ++--
 .../admin/MirroringConfigSetsHandlerTest.java      |  4 ++--
 gradle.properties                                  |  2 +-
 17 files changed, 90 insertions(+), 60 deletions(-)

diff --git a/crossdc-commons/src/test/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializerTest.java b/crossdc-commons/src/test/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializerTest.java
index da6478f..d814f6a 100644
--- a/crossdc-commons/src/test/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializerTest.java
+++ b/crossdc-commons/src/test/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializerTest.java
@@ -1,7 +1,7 @@
 package org.apache.solr.crossdc.common;
 
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.TestUtil;
+import org.apache.lucene.tests.util.LuceneTestCase;
+import org.apache.lucene.tests.util.TestUtil;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.common.SolrInputDocument;
 import org.junit.Test;
diff --git a/crossdc-consumer/build.gradle b/crossdc-consumer/build.gradle
index f4109cf..561a1c7 100644
--- a/crossdc-consumer/build.gradle
+++ b/crossdc-consumer/build.gradle
@@ -29,16 +29,30 @@ application {
 }
 
 dependencies {
-    implementation group: 'org.apache.solr', name: 'solr-solrj', version: "${solrVersion}"
+    implementation group: 'org.apache.solr', name: 'solr-solrj', version: "${solrVersion}", {
+        exclude group: "org.apache.logging.log4j", module: "*"
+        exclude group: "org.slf4j", module: "*"
+        exclude group: "org.eclipse.jetty", module: "jetty-http"
+        exclude group: "org.eclipse.jetty", module: "jetty-server"
+        exclude group: "org.eclipse.jetty", module: "jetty-servlet"
+    }
+    implementation group: 'org.apache.solr', name: 'solr-solrj-zookeeper', version: "${solrVersion}", {
+        exclude group: "org.apache.logging.log4j", module: "*"
+        exclude group: "org.slf4j", module: "*"
+        exclude group: "org.eclipse.jetty", module: "jetty-http"
+        exclude group: "org.eclipse.jetty", module: "jetty-server"
+        exclude group: "org.eclipse.jetty", module: "jetty-servlet"
+    }
     implementation project(path: ':crossdc-commons', configuration: 'shadow')
 
     implementation 'io.dropwizard.metrics:metrics-core:4.2.17'
     implementation 'io.dropwizard.metrics:metrics-servlets:4.2.17'
     implementation 'org.slf4j:slf4j-api:2.0.5'
-    implementation 'org.eclipse.jetty:jetty-http:9.4.41.v20210516'
-    implementation 'org.eclipse.jetty:jetty-server:9.4.41.v20210516'
+    implementation 'org.eclipse.jetty:jetty-http:10.0.13'
+    implementation 'org.eclipse.jetty:jetty-server:10.0.13'
+    implementation group: 'commons-logging', name: 'commons-logging', version: '1.3.0'
     implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.20.0' // log4j impl can use StackLocatorUtil which is in the api jar
-    implementation 'org.eclipse.jetty:jetty-servlet:9.4.41.v20210516'
+    implementation 'org.eclipse.jetty:jetty-servlet:10.0.13'
     implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'
     implementation group: 'org.slf4j', name: 'slf4j-simple', version: '2.0.9'
     testImplementation project(path: ':crossdc-commons')
@@ -78,4 +92,4 @@ tasks.withType(Tar){
 }
 tasks.withType(Zip){
     duplicatesStrategy = DuplicatesStrategy.EXCLUDE
-}
\ No newline at end of file
+}
diff --git a/crossdc-consumer/src/main/java/org/apache/solr/crossdc/consumer/Consumer.java b/crossdc-consumer/src/main/java/org/apache/solr/crossdc/consumer/Consumer.java
index 3369da9..429423e 100644
--- a/crossdc-consumer/src/main/java/org/apache/solr/crossdc/consumer/Consumer.java
+++ b/crossdc-consumer/src/main/java/org/apache/solr/crossdc/consumer/Consumer.java
@@ -73,7 +73,7 @@ public class Consumer {
             throw new IllegalArgumentException("zkConnectString not specified for producer");
         }
 
-        try (SolrZkClient client = new SolrZkClient(zkConnectString, 15000)) {
+        try (SolrZkClient client = new SolrZkClient.Builder().withUrl(zkConnectString).withTimeout(15000, TimeUnit.MILLISECONDS).build()) {
             // update properties, potentially also from ZK
             ConfUtil.fillProperties(client, properties);
         }
diff --git a/crossdc-consumer/src/main/java/org/apache/solr/crossdc/messageprocessor/SolrMessageProcessor.java b/crossdc-consumer/src/main/java/org/apache/solr/crossdc/messageprocessor/SolrMessageProcessor.java
index fa77250..cf0186d 100644
--- a/crossdc-consumer/src/main/java/org/apache/solr/crossdc/messageprocessor/SolrMessageProcessor.java
+++ b/crossdc-consumer/src/main/java/org/apache/solr/crossdc/messageprocessor/SolrMessageProcessor.java
@@ -21,6 +21,7 @@ import com.codahale.metrics.SharedMetricRegistries;
 import com.codahale.metrics.Timer;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.client.solrj.response.SolrResponseBase;
 import org.apache.solr.common.SolrException;
@@ -179,8 +180,14 @@ public class SolrMessageProcessor extends MessageProcessor implements IQueueHand
      * Process the SolrRequest. If not, this method throws an exception.
      */
     private Result<MirroredSolrRequest> processMirroredSolrRequest(SolrRequest request, MirroredSolrRequest.Type type) throws Exception {
+        String connectString;
+        if (client.getClusterStateProvider() instanceof ZkClientClusterStateProvider) {
+            connectString = ((ZkClientClusterStateProvider) client.getClusterStateProvider()).getZkHost();
+        } else {
+            connectString = client.toString();
+        }
         if (log.isDebugEnabled()) {
-            log.debug("Sending request to Solr at ZK address={} with params {}", client.getZkStateReader().getZkClient().getZkServerAddress(), request.getParams());
+            log.debug("Sending request to Solr at address={} with params {}", connectString, request.getParams());
         }
         Result<MirroredSolrRequest> result;
         SolrResponseBase response = null;
@@ -204,7 +211,7 @@ public class SolrMessageProcessor extends MessageProcessor implements IQueueHand
         }
 
         if (log.isDebugEnabled()) {
-            log.debug("Finished sending request to Solr at ZK address={} with params {} status_code={}", client.getZkStateReader().getZkClient().getZkServerAddress(), request.getParams(), status);
+            log.debug("Finished sending request to Solr at address={} with params {} status_code={}", connectString, request.getParams(), status);
         }
         result = new Result<>(ResultStatus.HANDLED);
         return result;
diff --git a/crossdc-consumer/src/test/java/org/apache/solr/crossdc/SimpleSolrIntegrationTest.java b/crossdc-consumer/src/test/java/org/apache/solr/crossdc/SimpleSolrIntegrationTest.java
index c3c7191..71c43ad 100644
--- a/crossdc-consumer/src/test/java/org/apache/solr/crossdc/SimpleSolrIntegrationTest.java
+++ b/crossdc-consumer/src/test/java/org/apache/solr/crossdc/SimpleSolrIntegrationTest.java
@@ -27,7 +27,7 @@ public class SimpleSolrIntegrationTest extends SolrCloudTestCase {
   public static void beforeSimpleSolrIntegrationTest() throws Exception {
 
     cluster1 =
-        new SolrCloudTestCase.Builder(2, createTempDir())
+        configureCluster(2)
             .addConfig("conf", getFile("src/test/resources/configs/cloud-minimal/conf").toPath())
             .configure();
 
diff --git a/crossdc-producer/build.gradle b/crossdc-producer/build.gradle
index 87b2a06..60327f9 100644
--- a/crossdc-producer/build.gradle
+++ b/crossdc-producer/build.gradle
@@ -42,8 +42,12 @@ dependencies {
     testImplementation 'org.hamcrest:hamcrest:2.2'
     testImplementation 'junit:junit:4.13.2'
     testImplementation('org.mockito:mockito-inline:5.1.1')
+    testImplementation 'commons-io:commons-io:2.15.1'
     testImplementation group: 'org.apache.solr', name: 'solr-core', version: "${solrVersion}"
+    testImplementation group: 'org.apache.solr', name: 'solr-solrj', version: "${solrVersion}"
+    testImplementation group: 'org.apache.solr', name: 'solr-solrj-zookeeper', version: "${solrVersion}"
     testImplementation group: 'org.apache.solr', name: 'solr-test-framework', version: "${solrVersion}"
+    testImplementation group: 'org.apache.zookeeper', name: 'zookeeper', version: '3.9.1'
 
     testImplementation group: 'org.slf4j', name: 'slf4j-simple', version: '2.0.9'
     testImplementation "org.apache.kafka:kafka-clients:${kafkaVersion}:test"
diff --git a/crossdc-producer/src/main/java/org/apache/solr/update/processor/MirroringUpdateRequestProcessorFactory.java b/crossdc-producer/src/main/java/org/apache/solr/update/processor/MirroringUpdateRequestProcessorFactory.java
index 13ce938..96e8b85 100644
--- a/crossdc-producer/src/main/java/org/apache/solr/update/processor/MirroringUpdateRequestProcessorFactory.java
+++ b/crossdc-producer/src/main/java/org/apache/solr/update/processor/MirroringUpdateRequestProcessorFactory.java
@@ -97,7 +97,7 @@ public class MirroringUpdateRequestProcessorFactory extends UpdateRequestProcess
     }
 
 
-    private static class MyCloseHook extends CloseHook {
+    private static class MyCloseHook implements CloseHook {
         private final Closer closer;
 
         public MyCloseHook(Closer closer) {
diff --git a/crossdc-producer/src/main/java/org/apache/solr/update/processor/ProducerMetrics.java b/crossdc-producer/src/main/java/org/apache/solr/update/processor/ProducerMetrics.java
index 007fce2..31d28aa 100644
--- a/crossdc-producer/src/main/java/org/apache/solr/update/processor/ProducerMetrics.java
+++ b/crossdc-producer/src/main/java/org/apache/solr/update/processor/ProducerMetrics.java
@@ -18,12 +18,12 @@ public class ProducerMetrics {
     private final Counter documentTooLarge;
 
     public ProducerMetrics(SolrMetricsContext solrMetricsContext, SolrCore solrCore) {
-        this.local = solrMetricsContext.counter(solrCore, "local", "crossdc", "producer");
-        this.localError = solrMetricsContext.counter(solrCore, "local", "crossdc", "producer", "errors");
-        this.submitted = solrMetricsContext.counter(solrCore, "submitted", "crossdc", "producer");
-        this.submitError = solrMetricsContext.counter(solrCore, "submit", "crossdc", "producer", "errors");
-        this.documentSize = solrMetricsContext.histogram(solrCore, "documentSize", "crossdc", "producer");
-        this.documentTooLarge = solrMetricsContext.counter(solrCore, "documentTooLarge", "crossdc", "producer", "errors");
+        this.local = solrMetricsContext.counter("local", "crossdc", "producer");
+        this.localError = solrMetricsContext.counter("local", "crossdc", "producer", "errors");
+        this.submitted = solrMetricsContext.counter("submitted", "crossdc", "producer");
+        this.submitError = solrMetricsContext.counter("submit", "crossdc", "producer", "errors");
+        this.documentSize = solrMetricsContext.histogram("documentSize", "crossdc", "producer");
+        this.documentTooLarge = solrMetricsContext.counter("documentTooLarge", "crossdc", "producer", "errors");
     }
 
     /**
diff --git a/crossdc-producer/src/test/java/org/apache/solr/crossdc/DeleteByQueryToIdTest.java b/crossdc-producer/src/test/java/org/apache/solr/crossdc/DeleteByQueryToIdTest.java
index e8a14ad..ffddcf1 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/crossdc/DeleteByQueryToIdTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/crossdc/DeleteByQueryToIdTest.java
@@ -4,7 +4,7 @@ import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrQuery;
@@ -18,6 +18,7 @@ import org.apache.solr.cloud.SolrCloudTestCase;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.ObjectReleaseTracker;
+import org.apache.solr.crossdc.common.CrossDcConf;
 import org.apache.solr.crossdc.common.KafkaCrossDcConf;
 import org.apache.solr.crossdc.common.MirroredSolrRequest;
 import org.apache.solr.crossdc.consumer.Consumer;
@@ -65,6 +66,7 @@ import java.util.concurrent.CountDownLatch;
   public static void beforeSolrAndKafkaIntegrationTest() throws Exception {
 
     System.setProperty(KafkaCrossDcConf.PORT, "-1");
+    System.setProperty(CrossDcConf.COLLAPSE_UPDATES, CrossDcConf.CollapseUpdates.ALL.name());
     consumer = new Consumer();
     System.setProperty("solr.crossdc.dbq_rows", "1");
 
@@ -86,7 +88,7 @@ import java.util.concurrent.CountDownLatch;
 
     Properties props = new Properties();
 
-    solrCluster1 = new SolrCloudTestCase.Builder(1, createTempDir())
+    solrCluster1 = new MiniSolrCloudCluster.Builder(1, createTempDir())
         .addConfig("conf", getFile("src/test/resources/configs/cloud-minimal/conf").toPath())
         .addConfig("confNoDbq", getFile("src/test/resources/configs/cloud-minimal-no-dbq/conf").toPath())
         .configure();
@@ -97,7 +99,7 @@ import java.util.concurrent.CountDownLatch;
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     props.store(baos, "");
     byte[] data = baos.toByteArray();
-    solrCluster1.getSolrClient().getZkStateReader().getZkClient().makePath("/crossdc.properties", data, true);
+    solrCluster1.getZkClient().makePath("/crossdc.properties", data, true);
 
     CollectionAdminRequest.Create createSource1 =
         CollectionAdminRequest.createCollection(COLLECTION1, "conf", 1, 1);
@@ -110,12 +112,12 @@ import java.util.concurrent.CountDownLatch;
 
     solrCluster1.getSolrClient().setDefaultCollection(COLLECTION1);
 
-    solrCluster2 = new SolrCloudTestCase.Builder(1, createTempDir())
+    solrCluster2 = new MiniSolrCloudCluster.Builder(1, createTempDir())
         .addConfig("conf", getFile("src/test/resources/configs/cloud-minimal/conf").toPath())
         .addConfig("confNoDbq", getFile("src/test/resources/configs/cloud-minimal-no-dbq/conf").toPath())
         .configure();
 
-    solrCluster2.getSolrClient().getZkStateReader().getZkClient().makePath("/crossdc.properties", data, true);
+    solrCluster2.getZkClient().makePath("/crossdc.properties", data, true);
 
     CollectionAdminRequest.Create createTarget1 =
         CollectionAdminRequest.createCollection(COLLECTION1, "conf", 1, 1);
@@ -170,11 +172,11 @@ import java.util.concurrent.CountDownLatch;
     }
 
     if (solrCluster1 != null) {
-      solrCluster1.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster1.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster1.shutdown();
     }
     if (solrCluster2 != null) {
-      solrCluster2.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster2.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster2.shutdown();
     }
 
diff --git a/crossdc-producer/src/test/java/org/apache/solr/crossdc/RetryQueueIntegrationTest.java b/crossdc-producer/src/test/java/org/apache/solr/crossdc/RetryQueueIntegrationTest.java
index 61dd89a..4c0e402 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/crossdc/RetryQueueIntegrationTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/crossdc/RetryQueueIntegrationTest.java
@@ -3,14 +3,14 @@ package org.apache.solr.crossdc;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrQuery;
-import org.apache.solr.client.solrj.embedded.JettyConfig;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.request.ConfigSetAdminRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.cloud.MiniSolrCloudCluster;
 import org.apache.solr.cloud.SolrCloudTestCase;
@@ -19,6 +19,7 @@ import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.util.ObjectReleaseTracker;
 import org.apache.solr.crossdc.common.KafkaCrossDcConf;
 import org.apache.solr.crossdc.consumer.Consumer;
+import org.apache.solr.embedded.JettyConfig;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -125,12 +126,15 @@ import java.util.Properties;
     MiniSolrCloudCluster cluster =
         new MiniSolrCloudCluster(1, baseDir, MiniSolrCloudCluster.DEFAULT_CLOUD_SOLR_XML,
             JettyConfig.builder().setContext("/solr")
-                .withSSLConfig(sslConfig.buildServerSSLConfig()).build(), zkTestServer);
+                .withSSLConfig(sslConfig.buildServerSSLConfig()).build(), zkTestServer, true);
 
         //new SolrCloudTestCase.Builder(1, baseDir).addConfig("conf",
         //getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
     CloudSolrClient client = cluster.getSolrClient();
-    ((ZkClientClusterStateProvider)client.getClusterStateProvider()).uploadConfig(getFile("src/test/resources/configs/cloud-minimal/conf").toPath(), "conf");
+    ConfigSetAdminRequest.Upload uploadReq = new ConfigSetAdminRequest.Upload()
+        .setUploadFile(getFile("src/test/resources/configs/cloud-minimal.zip"), "application/zip")
+        .setConfigSetName("conf");
+    uploadReq.process(client);
 
     CollectionAdminRequest.Create create2 =
         CollectionAdminRequest.createCollection(COLLECTION, "conf", 1, 1);
diff --git a/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaIntegrationTest.java b/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaIntegrationTest.java
index a6a74ad..4c6ba03 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaIntegrationTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaIntegrationTest.java
@@ -8,13 +8,12 @@ import org.apache.kafka.clients.producer.Producer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.common.serialization.StringSerializer;
 import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.BaseCloudSolrClient;
 import org.apache.solr.client.solrj.impl.BaseHttpSolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -100,7 +99,7 @@ import static org.mockito.Mockito.spy;
     System.setProperty("bootstrapServers", kafkaCluster.bootstrapServers());
     System.setProperty(INDEX_UNMIRRORABLE_DOCS, "false");
 
-    solrCluster1 = new SolrCloudTestCase.Builder(1, createTempDir()).addConfig("conf",
+    solrCluster1 = new MiniSolrCloudCluster.Builder(1, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
     CollectionAdminRequest.Create create =
@@ -110,7 +109,7 @@ import static org.mockito.Mockito.spy;
 
     solrCluster1.getSolrClient().setDefaultCollection(COLLECTION);
 
-    solrCluster2 = new SolrCloudTestCase.Builder(1, createTempDir()).addConfig("conf",
+    solrCluster2 = new MiniSolrCloudCluster.Builder(1, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
     CollectionAdminRequest.Create create2 =
@@ -138,11 +137,11 @@ import static org.mockito.Mockito.spy;
     ObjectReleaseTracker.clear();
 
     if (solrCluster1 != null) {
-      solrCluster1.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster1.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster1.shutdown();
     }
     if (solrCluster2 != null) {
-      solrCluster2.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster2.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster2.shutdown();
     }
 
@@ -229,7 +228,7 @@ import static org.mockito.Mockito.spy;
     final CloudSolrClient cluster1Client = solrCluster1.getSolrClient();
     try {
       cluster1Client.add(docsToIndex);
-    } catch (BaseCloudSolrClient.RouteException e) {
+    } catch (CloudSolrClient.RouteException e) {
       // expected
     }
     cluster1Client.commit(COLLECTION);
diff --git a/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaMultiCollectionIntegrationTest.java b/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaMultiCollectionIntegrationTest.java
index c9ae07c..53add88 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaMultiCollectionIntegrationTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaMultiCollectionIntegrationTest.java
@@ -3,7 +3,7 @@ package org.apache.solr.crossdc;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrClient;
@@ -91,7 +91,7 @@ import static org.apache.solr.crossdc.common.KafkaCrossDcConf.INDEX_UNMIRRORABLE
     System.setProperty("bootstrapServers", kafkaCluster.bootstrapServers());
     System.setProperty(INDEX_UNMIRRORABLE_DOCS, "false");
 
-    solrCluster1 = new SolrCloudTestCase.Builder(1, createTempDir()).addConfig("conf",
+    solrCluster1 = new MiniSolrCloudCluster.Builder(1, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
     CollectionAdminRequest.Create create =
@@ -101,7 +101,7 @@ import static org.apache.solr.crossdc.common.KafkaCrossDcConf.INDEX_UNMIRRORABLE
 
     solrCluster1.getSolrClient().setDefaultCollection(COLLECTION);
 
-    solrCluster2 = new SolrCloudTestCase.Builder(1, createTempDir()).addConfig("conf",
+    solrCluster2 = new MiniSolrCloudCluster.Builder(1, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
     CollectionAdminRequest.Create create2 =
@@ -139,11 +139,11 @@ import static org.apache.solr.crossdc.common.KafkaCrossDcConf.INDEX_UNMIRRORABLE
     Util.printKafkaInfo(kafkaCluster.bootstrapServers(), "SolrCrossDCConsumer");
 
     if (solrCluster1 != null) {
-      solrCluster1.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster1.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster1.shutdown();
     }
     if (solrCluster2 != null) {
-      solrCluster2.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster2.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster2.shutdown();
     }
 
diff --git a/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaReindexTest.java b/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaReindexTest.java
index 01aa3b7..a22e5a6 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaReindexTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/crossdc/SolrAndKafkaReindexTest.java
@@ -3,7 +3,7 @@ package org.apache.solr.crossdc;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrQuery;
@@ -69,21 +69,21 @@ import java.util.*;
     System.setProperty("topicName", TOPIC);
     System.setProperty("bootstrapServers", kafkaCluster.bootstrapServers());
 
-    solrCluster1 = new SolrCloudTestCase.Builder(3, createTempDir()).addConfig("conf",
+    solrCluster1 = new MiniSolrCloudCluster.Builder(3, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
     CollectionAdminRequest.Create create =
-        CollectionAdminRequest.createCollection(COLLECTION, "conf", 3, 2).setMaxShardsPerNode(10);;
+        CollectionAdminRequest.createCollection(COLLECTION, "conf", 3, 2);
     solrCluster1.getSolrClient().request(create);
     solrCluster1.waitForActiveCollection(COLLECTION, 3, 6);
 
     solrCluster1.getSolrClient().setDefaultCollection(COLLECTION);
 
-    solrCluster2 = new SolrCloudTestCase.Builder(3, createTempDir()).addConfig("conf",
+    solrCluster2 = new MiniSolrCloudCluster.Builder(3, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
     CollectionAdminRequest.Create create2 =
-        CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 3).setMaxShardsPerNode(10);
+        CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 3);
     solrCluster2.getSolrClient().request(create2);
     solrCluster2.waitForActiveCollection(COLLECTION, 2, 6);
 
@@ -108,11 +108,11 @@ import java.util.*;
     ObjectReleaseTracker.clear();
 
     if (solrCluster1 != null) {
-      solrCluster1.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster1.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster1.shutdown();
     }
     if (solrCluster2 != null) {
-      solrCluster2.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster2.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster2.shutdown();
     }
 
diff --git a/crossdc-producer/src/test/java/org/apache/solr/crossdc/ZkConfigIntegrationTest.java b/crossdc-producer/src/test/java/org/apache/solr/crossdc/ZkConfigIntegrationTest.java
index 8fac2b4..16c5054 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/crossdc/ZkConfigIntegrationTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/crossdc/ZkConfigIntegrationTest.java
@@ -3,7 +3,7 @@ package org.apache.solr.crossdc;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrQuery;
@@ -75,7 +75,7 @@ import java.util.Properties;
 
     Properties props = new Properties();
 
-    solrCluster1 = new SolrCloudTestCase.Builder(1, createTempDir()).addConfig("conf",
+    solrCluster1 = new MiniSolrCloudCluster.Builder(1, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
     props.setProperty(KafkaCrossDcConf.TOPIC_NAME, TOPIC2);
@@ -87,7 +87,7 @@ import java.util.Properties;
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     props.store(baos, "");
     byte[] data = baos.toByteArray();
-    solrCluster1.getSolrClient().getZkStateReader().getZkClient().makePath("/crossdc.properties", data, true);
+    solrCluster1.getZkClient().makePath("/crossdc.properties", data, true);
 
     CollectionAdminRequest.Create create =
         CollectionAdminRequest.createCollection(COLLECTION, "conf", 1, 1);
@@ -96,7 +96,7 @@ import java.util.Properties;
 
     solrCluster1.getSolrClient().setDefaultCollection(COLLECTION);
 
-    solrCluster2 = new SolrCloudTestCase.Builder(1, createTempDir()).addConfig("conf",
+    solrCluster2 = new MiniSolrCloudCluster.Builder(1, createTempDir()).addConfig("conf",
         getFile("src/test/resources/configs/cloud-minimal/conf").toPath()).configure();
 
 
@@ -114,7 +114,7 @@ import java.util.Properties;
     baos = new ByteArrayOutputStream();
     props.store(baos, "");
     data = baos.toByteArray();
-    solrCluster2.getSolrClient().getZkStateReader().getZkClient().makePath("/crossdc.properties", data, true);
+    solrCluster2.getZkClient().makePath("/crossdc.properties", data, true);
 
 
     String bootstrapServers = kafkaCluster.bootstrapServers();
@@ -138,11 +138,11 @@ import java.util.Properties;
     ObjectReleaseTracker.clear();
 
     if (solrCluster1 != null) {
-      solrCluster1.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster1.getZkClient().printLayoutToStream(System.out);
       solrCluster1.shutdown();
     }
     if (solrCluster2 != null) {
-      solrCluster2.getZkServer().getZkClient().printLayoutToStdOut();
+      solrCluster2.getZkClient().printLayoutToStream(System.out);
       solrCluster2.shutdown();
     }
 
diff --git a/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringCollectionsHandlerTest.java b/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringCollectionsHandlerTest.java
index 4f333ab..0a9c6af 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringCollectionsHandlerTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringCollectionsHandlerTest.java
@@ -2,7 +2,7 @@ package org.apache.solr.handler.admin;
 
 import org.apache.commons.io.IOUtils;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrRequest;
@@ -46,7 +46,7 @@ public class MirroringCollectionsHandlerTest extends SolrTestCaseJ4 {
         Mockito.when(coreContainer.isZooKeeperAware()).thenReturn(true);
         Mockito.when(coreContainer.getZkController()).thenReturn(zkController);
         Mockito.when(zkController.getZkClient()).thenReturn(solrZkClient);
-        Mockito.doAnswer(inv -> null).when(solrZkClient).getData(Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.anyBoolean());
+        //Mockito.doAnswer(inv -> null).when(solrZkClient).getData(Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.anyBoolean());
         captor = ArgumentCaptor.forClass(MirroredSolrRequest.class);
         Mockito.doNothing().when(sink).submit(captor.capture());
         // make ConfUtil happy
diff --git a/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringConfigSetsHandlerTest.java b/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringConfigSetsHandlerTest.java
index 04f2f4e..7b53498 100644
--- a/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringConfigSetsHandlerTest.java
+++ b/crossdc-producer/src/test/java/org/apache/solr/handler/admin/MirroringConfigSetsHandlerTest.java
@@ -19,7 +19,7 @@ package org.apache.solr.handler.admin;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.commons.io.IOUtils;
-import org.apache.lucene.util.QuickPatchThreadsFilter;
+import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrRequest;
@@ -85,7 +85,7 @@ public class MirroringConfigSetsHandlerTest extends SolrTestCaseJ4 {
         Mockito.when(coreContainer.isZooKeeperAware()).thenReturn(true);
         Mockito.when(coreContainer.getZkController()).thenReturn(zkController);
         Mockito.when(zkController.getZkClient()).thenReturn(solrZkClient);
-        Mockito.doAnswer(inv -> null).when(solrZkClient).getData(Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.anyBoolean());
+        //Mockito.doAnswer(inv -> null).when(solrZkClient).getData(Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.anyBoolean());
         captor = ArgumentCaptor.forClass(MirroredSolrRequest.class);
         Mockito.doNothing().when(sink).submit(captor.capture());
     }
diff --git a/gradle.properties b/gradle.properties
index 4e50947..c18c681 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,2 +1,2 @@
-solrVersion=8.11.2
+solrVersion=9.2.0
 kafkaVersion=3.5.1