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

dsmiley 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 e2b4a0ce66e QueryRequest should only be for SearchHandler (#3518)
e2b4a0ce66e is described below

commit e2b4a0ce66ec04e1156b1b34607df711d75b1b14
Author: David Smiley <[email protected]>
AuthorDate: Mon Sep 8 21:53:51 2025 -0400

    QueryRequest should only be for SearchHandler (#3518)
    
    (minor; no JIRA/CHANGES.txt)
    ---------
    
    Co-authored-by: Christine Poerschke <[email protected]>
    Co-authored-by: Jason Gerlowski <[email protected]>
---
 .../api/collections/ReindexCollectionCmd.java      |  8 +++-
 .../java/org/apache/solr/handler/IndexFetcher.java | 27 +++++++------
 .../org/apache/solr/handler/admin/ColStatus.java   | 13 ++++--
 .../org/apache/solr/update/PeerSyncWithLeader.java | 21 +++++-----
 .../solr/cloud/LeaderVoteWaitTimeoutTest.java      | 13 ++++--
 .../apache/solr/cloud/TestCloudConsistency.java    | 13 ++++--
 .../solr/cloud/TestTlogReplayVsRecovery.java       | 16 +++++---
 .../apache/solr/handler/ReplicationTestHelper.java | 16 +++++---
 .../solr/handler/TestReplicationHandler.java       | 41 ++++++++++---------
 .../handler/admin/ShowFileRequestHandlerTest.java  | 46 +++++++++++-----------
 .../org/apache/solr/search/TestTaskManagement.java |  7 +++-
 .../solr/prometheus/exporter/MetricsQuery.java     |  4 --
 .../solr/client/solrj/request/QueryRequest.java    |  3 ++
 .../solrj/impl/CloudHttp2SolrClientTest.java       |  8 ++--
 .../client/solrj/impl/CloudSolrClientTest.java     |  7 +++-
 15 files changed, 147 insertions(+), 96 deletions(-)

diff --git 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
index a36f28ebf71..23a7f7a6553 100644
--- 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
+++ 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
@@ -33,9 +33,11 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.client.solrj.cloud.DistribStateManager;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.cloud.DistributedClusterStateUpdater;
@@ -854,12 +856,14 @@ public class ReindexCollectionCmd implements 
CollApiCmds.CollectionApiCommand {
     final var solrClient = ccc.getCoreContainer().getDefaultHttpSolrClient();
 
     final var solrParams = new ModifiableSolrParams();
-    solrParams.set(CommonParams.QT, "/stream");
     solrParams.set("action", action);
     solrParams.set(CommonParams.ID, daemonName);
     solrParams.set(CommonParams.DISTRIB, false);
 
-    final var req = new QueryRequest(solrParams);
+    final var req =
+        new GenericSolrRequest(
+                SolrRequest.METHOD.POST, "/stream", 
SolrRequest.SolrRequestType.ADMIN, solrParams)
+            .setRequiresCollection(true);
     final var solrResponse =
         solrClient.requestWithBaseUrl(daemonReplica.getBaseUrl(), 
daemonReplica.getCoreName(), req);
     return solrResponse.getResponse();
diff --git a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java 
b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
index a2cb129fedb..58e19057da1 100644
--- a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
+++ b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
@@ -89,11 +89,12 @@ import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
 import org.apache.solr.client.api.model.FileMetaData;
+import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
 import org.apache.solr.client.solrj.impl.SolrHttpConstants;
-import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.cloud.ZkController;
 import org.apache.solr.common.SolrException;
@@ -102,6 +103,7 @@ import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.FastInputStream;
 import org.apache.solr.common.util.IOUtils;
@@ -340,13 +342,21 @@ public class IndexFetcher {
     return toReturn;
   }
 
+  private GenericSolrRequest createReplicationHandlerRequest(SolrParams 
solrParams) {
+    return new GenericSolrRequest(
+            SolrRequest.METHOD.GET,
+            ReplicationHandler.PATH,
+            SolrRequest.SolrRequestType.ADMIN,
+            solrParams)
+        .setRequiresCollection(true);
+  }
+
   /** Gets the latest commit version and generation from the leader */
   public NamedList<Object> getLatestVersion() throws IOException {
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set(COMMAND, CMD_INDEX_VERSION);
     params.set(CommonParams.WT, JAVABIN);
-    params.set(CommonParams.QT, ReplicationHandler.PATH);
-    QueryRequest req = new QueryRequest(params);
+    var req = createReplicationHandlerRequest(params);
     try {
       return solrClient.requestWithBaseUrl(leaderBaseUrl, leaderCoreName, 
req).getResponse();
     } catch (SolrServerException e) {
@@ -364,8 +374,7 @@ public class IndexFetcher {
     params.set(COMMAND, CMD_GET_FILE_LIST);
     params.set(GENERATION, String.valueOf(gen));
     params.set(CommonParams.WT, JAVABIN);
-    params.set(CommonParams.QT, ReplicationHandler.PATH);
-    QueryRequest req = new QueryRequest(params);
+    var req = createReplicationHandlerRequest(params);
     try {
       NamedList<?> response =
           solrClient.requestWithBaseUrl(leaderBaseUrl, leaderCoreName, 
req).getResponse();
@@ -1876,7 +1885,6 @@ public class IndexFetcher {
       // the method is command=filecontent
       params.set(COMMAND, CMD_GET_FILE);
       params.set(GENERATION, Long.toString(indexGen));
-      params.set(CommonParams.QT, ReplicationHandler.PATH);
       // add the version to download. This is used to reserve the download
       params.set(solrParamOutput, fileName);
       if (useInternalCompression) {
@@ -1896,9 +1904,8 @@ public class IndexFetcher {
 
       NamedList<?> response;
       InputStream is = null;
-      // TODO use shardhandler
       try {
-        QueryRequest req = new QueryRequest(params);
+        var req = createReplicationHandlerRequest(params);
         req.setResponseParser(new InputStreamResponseParser(FILE_STREAM));
         if (useExternalCompression) req.addHeader("Accept-Encoding", "gzip");
         response = solrClient.requestWithBaseUrl(leaderBaseUrl, 
leaderCoreName, req).getResponse();
@@ -2042,10 +2049,8 @@ public class IndexFetcher {
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set(COMMAND, CMD_DETAILS);
     params.set("follower", false);
-    params.set(CommonParams.QT, ReplicationHandler.PATH);
 
-    QueryRequest request = new QueryRequest(params);
-    // TODO use shardhandler
+    var request = createReplicationHandlerRequest(params);
     return solrClient.requestWithBaseUrl(leaderBaseUrl, leaderCoreName, 
request).getResponse();
   }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java 
b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
index 39e115146b9..0ef42781ddf 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
@@ -26,9 +26,10 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
 import org.apache.solr.client.api.model.GetSegmentDataResponse;
+import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.Http2SolrClient;
-import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
@@ -36,7 +37,6 @@ import org.apache.solr.common.cloud.RoutingRule;
 import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
-import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
@@ -190,7 +190,6 @@ public class ColStatus {
         if (getSegments) {
           try {
             ModifiableSolrParams params = new ModifiableSolrParams();
-            params.add(CommonParams.QT, "/admin/segments");
             params.add(FIELD_INFO_PROP, "true");
             params.add(CORE_INFO_PROP, String.valueOf(withCoreInfo));
             params.add(SIZE_INFO_PROP, String.valueOf(withSizeInfo));
@@ -200,7 +199,13 @@ public class ColStatus {
             if (samplingPercent != null) {
               params.add(RAW_SIZE_SAMPLING_PERCENT_PROP, 
String.valueOf(samplingPercent));
             }
-            QueryRequest req = new QueryRequest(params);
+            var req =
+                new GenericSolrRequest(
+                        SolrRequest.METHOD.GET,
+                        "/admin/segments",
+                        SolrRequest.SolrRequestType.ADMIN,
+                        params)
+                    .setRequiresCollection(true);
             NamedList<Object> rsp = solrClient.requestWithBaseUrl(url, null, 
req).getResponse();
             final var segmentResponse =
                 SolrJacksonMapper.getObjectMapper().convertValue(rsp, 
GetSegmentDataResponse.class);
diff --git a/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java 
b/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
index 50af7b050ea..8dff6d15432 100644
--- a/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
+++ b/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
@@ -31,8 +31,7 @@ import java.util.Set;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.Http2SolrClient;
-import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.cloud.ZkController;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.ModifiableSolrParams;
@@ -262,13 +261,12 @@ public class PeerSyncWithLeader implements 
SolrMetricProducer {
     }
 
     ModifiableSolrParams params = new ModifiableSolrParams();
-    params.set("qt", "/get");
     params.set(DISTRIB, false);
     params.set("getUpdates", missedUpdatesRequest.versionsAndRanges);
     params.set("onlyIfActive", false);
     params.set("skipDbq", true);
 
-    return request(params, "Failed on getting missed updates from the leader");
+    return doRtgRequest(params, "Failed on getting missed updates from the 
leader");
   }
 
   private boolean handleUpdates(
@@ -333,10 +331,13 @@ public class PeerSyncWithLeader implements 
SolrMetricProducer {
     return true;
   }
 
-  private NamedList<Object> request(ModifiableSolrParams params, String 
onFail) {
+  private NamedList<Object> doRtgRequest(ModifiableSolrParams params, String 
onFail) {
     try {
-      QueryRequest request = new QueryRequest(params, SolrRequest.METHOD.POST);
-      QueryResponse rsp = clientToLeader.requestWithBaseUrl(leaderBaseUrl, 
coreName, request);
+      var request =
+          new GenericSolrRequest(
+                  SolrRequest.METHOD.GET, "/get", 
SolrRequest.SolrRequestType.QUERY, params)
+              .setRequiresCollection(true);
+      var rsp = clientToLeader.requestWithBaseUrl(leaderBaseUrl, coreName, 
request);
       Exception exception = rsp.getException();
       if (exception != null) {
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, onFail);
@@ -349,21 +350,19 @@ public class PeerSyncWithLeader implements 
SolrMetricProducer {
 
   private NamedList<Object> getVersions() {
     ModifiableSolrParams params = new ModifiableSolrParams();
-    params.set("qt", "/get");
     params.set(DISTRIB, false);
     params.set("getVersions", nUpdates);
     params.set("fingerprint", doFingerprint);
 
-    return request(params, "Failed to get recent versions from leader");
+    return doRtgRequest(params, "Failed to get recent versions from leader");
   }
 
   private boolean alreadyInSync() {
     ModifiableSolrParams params = new ModifiableSolrParams();
-    params.set("qt", "/get");
     params.set(DISTRIB, false);
     params.set("getFingerprint", String.valueOf(Long.MAX_VALUE));
 
-    NamedList<Object> rsp = request(params, "Failed to get fingerprint from 
leader");
+    NamedList<Object> rsp = doRtgRequest(params, "Failed to get fingerprint 
from leader");
     IndexFingerprint leaderFingerprint = getFingerprint(rsp);
     return compareFingerprint(leaderFingerprint);
   }
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java 
b/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java
index d8299d4fe9d..9aec02771d1 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java
@@ -31,11 +31,13 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import org.apache.solr.JSONTestUtil;
 import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.cloud.SocketProxy;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.ZkStateReader;
@@ -335,8 +337,13 @@ public class LeaderVoteWaitTimeoutTest extends 
SolrCloudTestCase {
 
   private NamedList<Object> realTimeGetDocId(SolrClient solr, String docId)
       throws SolrServerException, IOException {
-    QueryRequest qr = new QueryRequest(params("qt", "/get", "id", docId, 
"distrib", "false"));
-    return solr.request(qr);
+    return solr.request(
+        new GenericSolrRequest(
+                SolrRequest.METHOD.GET,
+                "/get",
+                SolrRequestType.QUERY,
+                params("id", docId, "distrib", "false"))
+            .setRequiresCollection(true));
   }
 
   protected SolrClient getSolrClient(Replica replica, String coll) {
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java 
b/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
index 0ef05c16988..8d2043da00e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
@@ -29,11 +29,13 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import org.apache.solr.JSONTestUtil;
 import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.cloud.SocketProxy;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.util.NamedList;
@@ -343,8 +345,13 @@ public class TestCloudConsistency extends 
SolrCloudTestCase {
 
   private NamedList<Object> realTimeGetDocId(SolrClient solr, String docId)
       throws SolrServerException, IOException {
-    QueryRequest qr = new QueryRequest(params("qt", "/get", "id", docId, 
"distrib", "false"));
-    return solr.request(qr);
+    return solr.request(
+        new GenericSolrRequest(
+                SolrRequest.METHOD.GET,
+                "/get",
+                SolrRequestType.QUERY,
+                params("id", docId, "distrib", "false"))
+            .setRequiresCollection(true));
   }
 
   protected SolrClient getHttpSolrClient(Replica replica, String coll) {
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/TestTlogReplayVsRecovery.java 
b/solr/core/src/test/org/apache/solr/cloud/TestTlogReplayVsRecovery.java
index c45b57305ee..2545933f575 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestTlogReplayVsRecovery.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestTlogReplayVsRecovery.java
@@ -29,11 +29,12 @@ import java.util.concurrent.TimeoutException;
 import org.apache.lucene.tests.util.LuceneTestCase.AwaitsFix;
 import org.apache.solr.JSONTestUtil;
 import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.cloud.SocketProxy;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.client.solrj.response.RequestStatusState;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
@@ -274,11 +275,14 @@ public class TestTlogReplayVsRecovery extends 
SolrCloudTestCase {
    */
   private void assertDocExists(final String clientName, final SolrClient 
client, final String docId)
       throws Exception {
-    final QueryResponse rsp =
-        (new QueryRequest(
-                params("qt", "/get", "id", docId, "_trace", clientName, 
"distrib", "false")))
+    final var rsp =
+        (new GenericSolrRequest(
+                    SolrRequest.METHOD.GET,
+                    "/get",
+                    SolrRequestType.QUERY,
+                    params("qt", "/get", "id", docId, "_trace", clientName, 
"distrib", "false"))
+                .setRequiresCollection(true))
             .process(client, COLLECTION);
-    assertEquals(0, rsp.getStatus());
 
     String match = JSONTestUtil.matchObj("/id", rsp.getResponse().get("doc"), 
docId);
     assertNull(
diff --git 
a/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java 
b/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java
index 51d5d72ee78..1127bbb48be 100644
--- a/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java
+++ b/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java
@@ -34,9 +34,11 @@ import java.util.concurrent.TimeUnit;
 import org.apache.lucene.tests.util.LuceneTestCase;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.Http2SolrClient;
-import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.SolrInputDocument;
@@ -128,10 +130,12 @@ public final class ReplicationTestHelper {
 
     // check vs /replication?command=indexversion call
     ModifiableSolrParams params = new ModifiableSolrParams();
-    params.set("qt", ReplicationHandler.PATH);
     params.set("_trace", "assertVersions");
     params.set("command", "indexversion");
-    QueryRequest req = new QueryRequest(params);
+    var req =
+        new GenericSolrRequest(
+                SolrRequest.METHOD.GET, ReplicationHandler.PATH, 
SolrRequestType.ADMIN, params)
+            .setRequiresCollection(true);
     NamedList<Object> resp = client1.request(req);
     assertReplicationResponseSucceeded(resp);
     Long version = (Long) resp.get("indexversion");
@@ -205,8 +209,10 @@ public final class ReplicationTestHelper {
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set("command", "details");
     params.set("_trace", "getDetails");
-    params.set("qt", ReplicationHandler.PATH);
-    QueryRequest req = new QueryRequest(params);
+    var req =
+        new GenericSolrRequest(
+                SolrRequest.METHOD.GET, ReplicationHandler.PATH, 
SolrRequestType.ADMIN, params)
+            .setRequiresCollection(true);
 
     NamedList<Object> res = s.request(req);
     assertReplicationResponseSucceeded(res);
diff --git 
a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java 
b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
index 765a49f058a..4cf3bb4742d 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
@@ -48,13 +48,15 @@ import org.apache.lucene.util.Constants;
 import org.apache.solr.BaseDistributedSearchTestCase;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
+import org.apache.solr.client.api.model.IndexVersionResponse;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.request.CoresApi;
 import org.apache.solr.client.solrj.request.GenericSolrRequest;
-import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.ReplicationApi;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.client.solrj.response.SimpleSolrResponse;
@@ -201,8 +203,10 @@ public class TestReplicationHandler extends SolrTestCaseJ4 
{
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set("command", "details");
     params.set("_trace", "getDetails");
-    params.set("qt", ReplicationHandler.PATH);
-    QueryRequest req = new QueryRequest(params);
+    var req =
+        new GenericSolrRequest(
+                SolrRequest.METHOD.GET, ReplicationHandler.PATH, 
SolrRequestType.ADMIN, params)
+            .setRequiresCollection(true);
 
     NamedList<Object> res = s.request(req);
     assertReplicationResponseSucceeded(res);
@@ -215,18 +219,12 @@ public class TestReplicationHandler extends 
SolrTestCaseJ4 {
     return details;
   }
 
-  private NamedList<Object> getIndexVersion(SolrClient s) throws Exception {
+  private IndexVersionResponse getIndexVersion(SolrClient s, String coreName) 
throws Exception {
 
-    ModifiableSolrParams params = new ModifiableSolrParams();
-    params.set("command", "indexversion");
-    params.set("_trace", "getIndexVersion");
-    params.set("qt", ReplicationHandler.PATH);
-    QueryRequest req = new QueryRequest(params);
-
-    NamedList<Object> res = s.request(req);
-    assertReplicationResponseSucceeded(res);
-
-    return res;
+    final var req = new ReplicationApi.FetchIndexVersion(coreName);
+    final var response = req.process(s);
+    assertReplicationResponseSucceeded(response);
+    return response;
   }
 
   private void reloadCore(JettySolrRunner jettySolrRunner, String core) throws 
Exception {
@@ -234,8 +232,9 @@ public class TestReplicationHandler extends SolrTestCaseJ4 {
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set("action", "reload");
     params.set("core", core);
-    params.set("qt", "/admin/cores");
-    QueryRequest req = new QueryRequest(params);
+    var req =
+        new GenericSolrRequest(
+            SolrRequest.METHOD.POST, "/admin/cores", SolrRequestType.ADMIN, 
params);
 
     try (SolrClient adminClient = adminClient(jettySolrRunner)) {
       NamedList<Object> res = adminClient.request(req);
@@ -1278,11 +1277,11 @@ public class TestReplicationHandler extends 
SolrTestCaseJ4 {
         BaseDistributedSearchTestCase.compare(leaderQueryResult, 
followerQueryResult, 0, null);
     assertNull(cmp);
 
-    Object version = getIndexVersion(leaderClient).get("indexversion");
+    Long version = getIndexVersion(leaderClient, 
DEFAULT_TEST_CORENAME).indexVersion;
 
     reloadCore(leaderJetty, DEFAULT_TEST_COLLECTION_NAME);
 
-    assertEquals(version, getIndexVersion(leaderClient).get("indexversion"));
+    assertEquals(version, getIndexVersion(leaderClient, 
DEFAULT_TEST_CORENAME).indexVersion);
 
     index(leaderClient, "id", docs + 10, "name", "name = 1");
     index(leaderClient, "id", docs + 20, "name", "name = 2");
@@ -1834,4 +1833,10 @@ public class TestReplicationHandler extends 
SolrTestCaseJ4 {
     assertNotNull("Expected replication response to have 'status' field", 
response.get("status"));
     assertEquals("OK", response.get("status"));
   }
+
+  private void assertReplicationResponseSucceeded(IndexVersionResponse 
response) {
+    assertNotNull("null response from server", response);
+    assertNotNull("Expected replication response to have 'status' field", 
response.status);
+    assertEquals("OK", response.status);
+  }
 }
diff --git 
a/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
 
b/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
index 0966c5684e3..8d81487abd0 100644
--- 
a/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
+++ 
b/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
@@ -23,11 +23,14 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.solr.SolrJettyTestBase;
 import org.apache.solr.client.solrj.ResponseParser;
 import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.NoOpResponseParser;
-import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.request.GenericSolrRequest;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
@@ -49,10 +52,15 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
     createAndStartJetty(legacyExampleCollection1SolrHome());
   }
 
+  private GenericSolrRequest createShowFileRequest(SolrParams params) {
+    return new GenericSolrRequest(
+            SolrRequest.METHOD.GET, "/admin/file", SolrRequestType.ADMIN, 
params)
+        .setRequiresCollection(true);
+  }
+
   public void test404ViaHttp() {
     SolrClient client = getSolrClient();
-    QueryRequest request = new QueryRequest(params("file", 
"does-not-exist-404.txt"));
-    request.setPath("/admin/file");
+    var request = createShowFileRequest(params("file", 
"does-not-exist-404.txt"));
     SolrException e = expectThrows(SolrException.class, () -> 
request.process(client));
     assertEquals(404, e.code());
   }
@@ -77,10 +85,8 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
     SolrClient client = getSolrClient();
     // assertQ(req("qt", "/admin/file")); TODO file bug that SolrJettyTestBase 
extends
     // SolrTestCaseJ4
-    QueryRequest request = new QueryRequest();
-    request.setPath("/admin/file");
-    QueryResponse resp = request.process(client);
-    assertEquals(0, resp.getStatus());
+    var request = createShowFileRequest(new ModifiableSolrParams());
+    var resp = request.process(client);
     assertTrue(((NamedList) resp.getResponse().get("files")).size() > 0); // 
some files
   }
 
@@ -88,8 +94,7 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
     SolrClient client = getSolrClient();
     // assertQ(req("qt", "/admin/file"));
     // TODO file bug that SolrJettyTestBase extends SolrTestCaseJ4
-    QueryRequest request = new QueryRequest(params("file", 
"managed-schema.xml"));
-    request.setPath("/admin/file");
+    var request = createShowFileRequest(params("file", "managed-schema.xml"));
     final AtomicBoolean readFile = new AtomicBoolean();
     request.setResponseParser(
         new ResponseParser() {
@@ -142,28 +147,26 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
 
   public void testIllegalContentType() {
     SolrClient client = getSolrClient();
-    QueryRequest request =
-        new QueryRequest(params("file", "managed-schema", "contentType", 
"not/known"));
-    request.setPath("/admin/file");
+    var request =
+        createShowFileRequest(params("file", "managed-schema", "contentType", 
"not/known"));
     request.setResponseParser(new NoOpResponseParser("xml"));
     expectThrows(SolrException.class, () -> client.request(request));
   }
 
   public void testAbsoluteFilename() {
     SolrClient client = getSolrClient();
-    final QueryRequest request =
-        new QueryRequest(params("file", "/etc/passwd", "contentType", 
"text/plain; charset=utf-8"));
-    request.setPath("/admin/file"); // absolute path not allowed
+    final var request =
+        createShowFileRequest(
+            params("file", "/etc/passwd", "contentType", "text/plain; 
charset=utf-8"));
     request.setResponseParser(new NoOpResponseParser("xml"));
     expectThrows(SolrException.class, () -> client.request(request));
   }
 
   public void testEscapeConfDir() {
     SolrClient client = getSolrClient();
-    final QueryRequest request =
-        new QueryRequest(
+    final var request =
+        createShowFileRequest(
             params("file", "../../solr.xml", "contentType", "application/xml; 
charset=utf-8"));
-    request.setPath("/admin/file");
     request.setResponseParser(new NoOpResponseParser("xml"));
     var ex = expectThrows(SolrException.class, () -> client.request(request));
     assertTrue(ex instanceof SolrClient.RemoteSolrException);
@@ -171,14 +174,13 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
 
   public void testPathTraversalFilename() {
     SolrClient client = getSolrClient();
-    final QueryRequest request =
-        new QueryRequest(
+    final var request =
+        createShowFileRequest(
             params(
                 "file",
                 "../../../../../../etc/passwd",
                 "contentType",
                 "text/plain; charset=utf-8"));
-    request.setPath("/admin/file");
     request.setResponseParser(new NoOpResponseParser("xml"));
     expectThrows(SolrException.class, () -> client.request(request));
   }
diff --git a/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java 
b/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java
index bb899761257..13c98d87ace 100644
--- a/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java
+++ b/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java
@@ -31,6 +31,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.GenericSolrRequest;
@@ -219,8 +220,10 @@ public class TestTaskManagement extends SolrCloudTestCase {
           ModifiableSolrParams params = new ModifiableSolrParams();
 
           params.set("queryUUID", queryID);
-          SolrRequest<?> request = new QueryRequest(params);
-          request.setPath("/tasks/cancel");
+          var request =
+              new GenericSolrRequest(
+                      SolrRequest.METHOD.POST, "/tasks/cancel", 
SolrRequestType.ADMIN, params)
+                  .setRequiresCollection(true);
 
           try {
             NamedList<Object> queryResponse;
diff --git 
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
 
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
index 5c3ba1f5303..d1b209d6921 100644
--- 
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
+++ 
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
@@ -25,7 +25,6 @@ import java.util.Optional;
 import java.util.regex.Matcher;
 import net.thisptr.jackson.jq.JsonQuery;
 import net.thisptr.jackson.jq.exception.JsonQueryException;
-import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.NamedList;
@@ -111,9 +110,6 @@ public class MetricsQuery {
         }
       }
 
-      QueryRequest queryRequest = new QueryRequest(params);
-      queryRequest.setPath(path);
-
       List<JsonQuery> compiledQueries = new ArrayList<>();
       if (jsonQueries != null) {
         for (String jsonQuery : jsonQueries) {
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/QueryRequest.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/QueryRequest.java
index de3cdd78b9a..04b4d4e3a54 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/QueryRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/QueryRequest.java
@@ -23,6 +23,9 @@ import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 
 /**
+ * For use with Solr's {@code SearchHandler}, generally at "/select". For 
other handlers, try {@link
+ * GenericSolrRequest}.
+ *
  * @since solr 1.3
  */
 public class QueryRequest extends 
CollectionRequiringSolrRequest<QueryResponse> {
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
index c74a9ccbc80..a6d9c13e129 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
@@ -39,6 +39,7 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.lucene.tests.util.TestUtil;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrRequest.METHOD;
 import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -664,12 +665,14 @@ public class CloudHttp2SolrClientTest extends 
SolrCloudTestCase {
             .withSocketTimeout(60000, TimeUnit.MILLISECONDS)
             .build()) {
       ModifiableSolrParams params = new ModifiableSolrParams();
-      params.set("qt", "/admin/mbeans");
       params.set("stats", "true");
       params.set("key", key);
       params.set("cat", category);
       // use generic request to avoid extra processing of queries
-      QueryRequest req = new QueryRequest(params);
+      var req =
+          new GenericSolrRequest(
+                  SolrRequest.METHOD.GET, "/admin/mbeans", 
SolrRequestType.ADMIN, params)
+              .setRequiresCollection(true);
       resp = client.request(req);
     }
     String name;
@@ -734,7 +737,6 @@ public class CloudHttp2SolrClientTest extends 
SolrCloudTestCase {
 
           ModifiableSolrParams params = new ModifiableSolrParams();
           params.set("action", "foobar"); // this should cause an error
-          params.set("qt", adminPath);
 
           var request =
               new GenericSolrRequest(METHOD.GET, adminPath, 
SolrRequestType.ADMIN, params);
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
index ec6fe94d9f0..a43da7a8c1d 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
@@ -39,6 +39,7 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.lucene.tests.util.TestUtil;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrRequest.METHOD;
 import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -599,12 +600,14 @@ public class CloudSolrClientTest extends 
SolrCloudTestCase {
             .withSocketTimeout(60000, TimeUnit.MILLISECONDS)
             .build()) {
       ModifiableSolrParams params = new ModifiableSolrParams();
-      params.set("qt", "/admin/mbeans");
       params.set("stats", "true");
       params.set("key", key);
       params.set("cat", category);
       // use generic request to avoid extra processing of queries
-      QueryRequest req = new QueryRequest(params);
+      var req =
+          new GenericSolrRequest(
+                  SolrRequest.METHOD.GET, "/admin/mbeans", 
SolrRequestType.ADMIN, params)
+              .setRequiresCollection(true);
       resp = client.request(req);
     }
     String name;


Reply via email to