From fa97ea5ef5d9aa26de00f352d024ef8921b8de4f Mon Sep 17 00:00:00 2001 From: David Smiley Date: Tue, 8 Jul 2025 23:25:17 -0400 Subject: [PATCH 1/2] Introduce GenericCollectionRequest and deprecate GenericSolrRequest.setRequiresCollection --- .../java/org/apache/solr/cli/ExportTool.java | 13 ++-- .../SchemaDesignerConfigSetHelper.java | 27 +++++-- .../processor/DistributedUpdateProcessor.java | 7 +- .../solr/cloud/MultiThreadedOCPTest.java | 10 ++- .../apache/solr/cloud/SSLMigrationTest.java | 30 +++---- .../cloud/api/collections/ShardSplitTest.java | 9 ++- .../api/collections/TestCollectionAPI.java | 8 +- .../TestRequestStatusCollectionAPI.java | 6 +- .../solr/handler/TestReplicationHandler.java | 43 +++++----- .../solr/handler/TestStressThreadBackup.java | 11 ++- .../org/apache/solr/pkg/TestPackages.java | 22 +++--- .../solr/schema/TestCloudManagedSchema.java | 9 ++- .../solr/search/TestTaskManagement.java | 27 ++++--- .../apache/solr/util/TestCborDataFormat.java | 64 ++++++++------- .../solr/prometheus/scraper/SolrScraper.java | 9 ++- .../request/GenericCollectionRequest.java | 78 +++++++++++++++++++ .../solrj/request/GenericSolrRequest.java | 2 + .../impl/CloudHttp2SolrClientRetryTest.java | 1 - .../client/solrj/request/TestCoreAdmin.java | 7 +- .../AbstractBasicDistributedZkTestBase.java | 11 ++- .../solr/handler/BackupStatusChecker.java | 16 +++- 21 files changed, 272 insertions(+), 138 deletions(-) create mode 100644 solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericCollectionRequest.java diff --git a/solr/core/src/java/org/apache/solr/cli/ExportTool.java b/solr/core/src/java/org/apache/solr/cli/ExportTool.java index 050092c2017..e8e31561761 100644 --- a/solr/core/src/java/org/apache/solr/cli/ExportTool.java +++ b/solr/core/src/java/org/apache/solr/cli/ExportTool.java @@ -65,7 +65,7 @@ import org.apache.solr.client.solrj.impl.ClusterStateProvider; import org.apache.solr.client.solrj.impl.Http2SolrClient; import org.apache.solr.client.solrj.impl.StreamingJavaBinResponseParser; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; @@ -253,11 +253,12 @@ void fetchUniqueKey() throws SolrServerException, IOException { .build(); NamedList response = solrClient.request( - new GenericSolrRequest( - SolrRequest.METHOD.GET, - "/schema/uniquekey", - SolrParams.of("collection", coll)) - .setRequiresCollection(true)); + new GenericCollectionRequest( + SolrRequest.METHOD.GET, + "/schema/uniquekey", + SolrRequest.SolrRequestType.ADMIN, + SolrParams.of()), + coll); uniqueKey = (String) response.get("uniqueKey"); } diff --git a/solr/core/src/java/org/apache/solr/handler/designer/SchemaDesignerConfigSetHelper.java b/solr/core/src/java/org/apache/solr/handler/designer/SchemaDesignerConfigSetHelper.java index 296f3966b9a..5927b49f99a 100644 --- a/solr/core/src/java/org/apache/solr/handler/designer/SchemaDesignerConfigSetHelper.java +++ b/solr/core/src/java/org/apache/solr/handler/designer/SchemaDesignerConfigSetHelper.java @@ -63,7 +63,7 @@ import org.apache.solr.client.solrj.impl.JavaBinResponseParser; import org.apache.solr.client.solrj.impl.JsonMapResponseParser; import org.apache.solr.client.solrj.request.CollectionAdminRequest; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.schema.FieldTypeDefinition; import org.apache.solr.client.solrj.request.schema.SchemaRequest; import org.apache.solr.client.solrj.response.schema.SchemaResponse; @@ -78,6 +78,7 @@ import org.apache.solr.common.cloud.ZkMaintenanceUtils; import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.params.ModifiableSolrParams; +import org.apache.solr.common.params.SolrParams; import org.apache.solr.common.util.IOUtils; import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.SimpleOrderedMap; @@ -126,9 +127,13 @@ Map analyzeField(String configSet, String fieldName, String fiel solrParams.set("analysis.showmatch", true); solrParams.set("analysis.fieldname", fieldName); solrParams.set("analysis.fieldvalue", "POST"); - var request = new GenericSolrRequest(SolrRequest.METHOD.POST, "/analysis/field", solrParams); + var request = + new GenericCollectionRequest( + SolrRequest.METHOD.POST, + "/analysis/field", + SolrRequest.SolrRequestType.ADMIN, + solrParams); request.withContent(fieldText.getBytes(StandardCharsets.UTF_8), "text/plain"); - request.setRequiresCollection(true); request.setResponseParser(new JsonMapResponseParser()); try { var resp = request.process(cloudClient(), mutableId).getResponse(); @@ -483,8 +488,12 @@ void deleteStoredSampleDocs(String configSet) { @SuppressWarnings("unchecked") List getStoredSampleDocs(final String configSet) throws IOException { - var request = new GenericSolrRequest(SolrRequest.METHOD.GET, "/blob/" + configSet + "_sample"); - request.setRequiresCollection(true); + var request = + new GenericCollectionRequest( + SolrRequest.METHOD.GET, + "/blob/" + configSet + "_sample", + SolrRequest.SolrRequestType.ADMIN, + SolrParams.of()); request.setResponseParser(new InputStreamResponseParser("filestream")); InputStream inputStream = null; try { @@ -515,9 +524,13 @@ static byte[] readAllBytes(IOSupplier hasStream) throws IOException protected void postDataToBlobStore(CloudSolrClient cloudClient, String blobName, byte[] bytes) throws IOException { - var request = new GenericSolrRequest(SolrRequest.METHOD.POST, "/blob/" + blobName); + var request = + new GenericCollectionRequest( + SolrRequest.METHOD.POST, + "/blob/" + blobName, + SolrRequest.SolrRequestType.ADMIN, + SolrParams.of()); request.withContent(bytes, JavaBinResponseParser.JAVABIN_CONTENT_TYPE); - request.setRequiresCollection(true); try { request.process(cloudClient, BLOB_STORE_ID); } catch (SolrServerException e) { diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java index 2edbeb6c345..5d4cb2d31e3 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java +++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java @@ -31,8 +31,7 @@ import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrRequest.METHOD; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.request.GenericSolrRequest; -import org.apache.solr.client.solrj.response.SimpleSolrResponse; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrException.ErrorCode; import org.apache.solr.common.SolrInputDocument; @@ -681,8 +680,8 @@ private UpdateCommand fetchFullUpdateFromLeader(AddUpdateCommand inplaceAdd, lon params.set(DISTRIB, false); params.set("getInputDocument", id); params.set("onlyIfActive", true); - SolrRequest ur = - new GenericSolrRequest(METHOD.GET, "/get", params).setRequiresCollection(true); + var ur = + new GenericCollectionRequest(METHOD.GET, "/get", SolrRequest.SolrRequestType.ADMIN, params); String leaderUrl = getLeaderUrl(id); diff --git a/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java b/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java index 833f28a1a63..01b0565f580 100644 --- a/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java @@ -22,11 +22,13 @@ import java.lang.invoke.MethodHandles; import java.util.Random; 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.request.CollectionAdminRequest; import org.apache.solr.client.solrj.request.CollectionAdminRequest.Create; import org.apache.solr.client.solrj.request.CollectionAdminRequest.SplitShard; -import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.client.solrj.response.RequestStatusState; import org.apache.solr.common.params.CollectionParams; import org.apache.solr.common.params.ModifiableSolrParams; @@ -321,10 +323,10 @@ public void run() { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("action", CollectionParams.CollectionAction.CLUSTERSTATUS.toString()); params.set("collection", "collection1"); - QueryRequest request = new QueryRequest(params); - request.setPath("/admin/collections"); - client.request(request); + client.request( + new GenericSolrRequest( + SolrRequest.METHOD.GET, "/admin/collections", SolrRequestType.ADMIN, params)); state = getRequestState("2000", client); diff --git a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java index 7bf580a865c..3fcf90451f4 100644 --- a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java @@ -19,21 +19,20 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.Properties; import org.apache.lucene.tests.util.LuceneTestCase.AwaitsFix; import org.apache.solr.SolrTestCaseJ4.SuppressSSL; 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.impl.HttpClientUtil; import org.apache.solr.client.solrj.impl.LBHttpSolrClient; -import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.common.cloud.DocCollection; import org.apache.solr.common.cloud.Replica; import org.apache.solr.common.cloud.Slice; import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.params.CollectionParams.CollectionAction; -import org.apache.solr.common.params.MapSolrParams; -import org.apache.solr.common.params.SolrParams; import org.apache.solr.embedded.JettyConfig; import org.apache.solr.embedded.JettySolrRunner; import org.apache.solr.util.SSLTestConfig; @@ -116,17 +115,18 @@ private List getReplicas() { } private void setUrlScheme(String value) throws Exception { - Map m = - Map.of( - "action", - CollectionAction.CLUSTERPROP.toString().toLowerCase(Locale.ROOT), - "name", - "urlScheme", - "val", - value); - SolrParams params = new MapSolrParams(m); - QueryRequest request = new QueryRequest(params); - request.setPath("/admin/collections"); + var request = + new GenericSolrRequest( + SolrRequest.METHOD.POST, + "/admin/collections", + SolrRequestType.ADMIN, + params( + "action", + CollectionAction.CLUSTERPROP.toString().toLowerCase(Locale.ROOT), + "name", + "urlScheme", + "val", + value)); String[] urls = getReplicas().stream() diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java index 4b5a784185d..02321a205b8 100644 --- a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java @@ -40,12 +40,14 @@ import org.apache.lucene.tests.util.LuceneTestCase; 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.impl.CloudLegacySolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; 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.client.solrj.response.CollectionAdminResponse; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.RequestStatusState; @@ -1270,8 +1272,9 @@ protected void splitShard( if (splitKey != null) { params.set("split.key", splitKey); } - QueryRequest request = new QueryRequest(params); - request.setPath("/admin/collections"); + var request = + new GenericSolrRequest( + SolrRequest.METHOD.POST, "/admin/collections", SolrRequestType.ADMIN, params); String baseUrl = shardToJetty.get(SHARD1).get(0).jetty.getBaseUrl().toString(); diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java index 26d6528881f..adba8db8ab3 100644 --- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java +++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java @@ -640,7 +640,6 @@ private void clusterStatusAliasTest() throws Exception { params.set("collection", "notAnAliasOrCollection"); request = new GenericSolrRequest(METHOD.GET, "/admin/collections", SolrRequestType.ADMIN, params); - request.setPath("/admin/collections"); // SOLR-12938 - this should still cause an exception try { @@ -1258,11 +1257,10 @@ private Map getProps( private void missingParamsError(CloudSolrClient client, ModifiableSolrParams origParams) throws IOException, SolrServerException { - GenericSolrRequest request; try { - request = + var request = new GenericSolrRequest( - METHOD.GET, "/admin/collections", SolrRequestType.ADMIN, origParams); + METHOD.POST, "/admin/collections", SolrRequestType.ADMIN, origParams); client.request(request); fail("Should have thrown a SolrException due to lack of a required parameter."); } catch (SolrException se) { @@ -1352,7 +1350,7 @@ public void testCreateCollectionBooleanValues() throws Exception { params.set("numShards", "1"); params.set(CollectionAdminParams.PER_REPLICA_STATE, "False"); var request = - new GenericSolrRequest(METHOD.GET, "/admin/collections", SolrRequestType.ADMIN, params); + new GenericSolrRequest(METHOD.POST, "/admin/collections", SolrRequestType.ADMIN, params); try { client.request(request); diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java index f47a08ca8e4..ddec415aa6e 100644 --- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java +++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java @@ -25,9 +25,10 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; -import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.client.solrj.response.RequestStatusState; import org.apache.solr.cloud.BasicDistributedZkTest; import org.apache.solr.common.params.CollectionParams; @@ -227,8 +228,7 @@ private NamedList sendStatusRequestWithRetry(ModifiableSolrParams params protected NamedList sendRequest(ModifiableSolrParams params) throws SolrServerException, IOException { - QueryRequest request = new QueryRequest(params); - request.setPath("/admin/collections"); + var request = new GenericSolrRequest(SolrRequest.METHOD.POST, "/admin/collections", params); String baseUrl = shardToJetty.get(SHARD1).get(0).jetty.getBaseUrl().toString(); 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 ad8bdcc792f..80c559b9816 100644 --- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java +++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java @@ -51,10 +51,11 @@ 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.GenericCollectionRequest; import org.apache.solr.client.solrj.request.GenericSolrRequest; -import org.apache.solr.client.solrj.request.QueryRequest; 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 +202,9 @@ private NamedList getDetails(SolrClient s) throws Exception { 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 GenericCollectionRequest( + SolrRequest.METHOD.GET, ReplicationHandler.PATH, SolrRequestType.ADMIN, params); NamedList res = s.request(req); assertReplicationResponseSucceeded(res); @@ -220,9 +222,9 @@ private NamedList getIndexVersion(SolrClient s) throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("command", "indexversion"); params.set("_trace", "getIndexVersion"); - params.set("qt", ReplicationHandler.PATH); - QueryRequest req = new QueryRequest(params); - + var req = + new GenericCollectionRequest( + SolrRequest.METHOD.GET, ReplicationHandler.PATH, SolrRequestType.ADMIN, params); NamedList res = s.request(req); assertReplicationResponseSucceeded(res); @@ -234,8 +236,9 @@ private void reloadCore(JettySolrRunner jettySolrRunner, String core) throws Exc 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 res = adminClient.request(req); @@ -1556,12 +1559,12 @@ public void testEmptyBackups() throws Exception { { // initial request w/o any committed docs final String backupName = "empty_backup1"; - final GenericSolrRequest req = - new GenericSolrRequest( - SolrRequest.METHOD.GET, - "/replication", - params("command", "backup", "location", backupDir.toString(), "name", backupName)) - .setRequiresCollection(true); + final GenericCollectionRequest req = + new GenericCollectionRequest( + SolrRequest.METHOD.POST, + "/replication", + SolrRequestType.ADMIN, + params("command", "backup", "location", backupDir.toString(), "name", backupName)); final TimeOut timeout = new TimeOut(30, TimeUnit.SECONDS, TimeSource.NANO_TIME); final SimpleSolrResponse rsp = req.process(leaderClient); @@ -1579,12 +1582,12 @@ public void testEmptyBackups() throws Exception { { // second backup w/uncommitted doc final String backupName = "empty_backup2"; - final GenericSolrRequest req = - new GenericSolrRequest( - SolrRequest.METHOD.GET, - "/replication", - params("command", "backup", "location", backupDir.toString(), "name", backupName)) - .setRequiresCollection(true); + final GenericCollectionRequest req = + new GenericCollectionRequest( + SolrRequest.METHOD.POST, + "/replication", + SolrRequestType.ADMIN, + params("command", "backup", "location", backupDir.toString(), "name", backupName)); final TimeOut timeout = new TimeOut(30, TimeUnit.SECONDS, TimeSource.NANO_TIME); final SimpleSolrResponse rsp = req.process(leaderClient); diff --git a/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java b/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java index 5357fc45e82..40fd51335f6 100644 --- a/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java +++ b/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java @@ -39,7 +39,9 @@ import org.apache.lucene.tests.util.LuceneTestCase.SuppressCodecs; import org.apache.lucene.tests.util.TestUtil; import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.request.CollectionAdminRequest; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.solr.client.solrj.response.UpdateResponse; @@ -133,9 +135,12 @@ public void testReplicationHandler() throws Exception { final BackupStatusChecker backupStatus = new BackupStatusChecker(coreClient); /** no solrj API for ReplicationHandler */ - private GenericSolrRequest makeReplicationReq(SolrParams p) { - return new GenericSolrRequest(GenericSolrRequest.METHOD.GET, "/replication", p) - .setRequiresCollection(true); + private SolrRequest makeReplicationReq(SolrParams p) { + return new GenericCollectionRequest( + GenericSolrRequest.METHOD.POST, + "/replication", + SolrRequest.SolrRequestType.ADMIN, + p); } /** diff --git a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java index b295b68f332..793ddf04f62 100644 --- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java +++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java @@ -49,6 +49,7 @@ import org.apache.solr.client.solrj.impl.BaseHttpSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.CollectionAdminRequest; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.client.solrj.request.RequestWriter; import org.apache.solr.client.solrj.request.UpdateRequest; @@ -292,12 +293,12 @@ public void testPluginLoading() throws Exception { TestDistribFileStore.assertResponseValues( 10, cluster.getSolrClient(), - new GenericSolrRequest( - SolrRequest.METHOD.GET, - "/stream", - new MapSolrParams( - Map.of("collection", COLLECTION_NAME, WT, JAVABIN, "action", "plugins"))) - .setRequiresCollection(true), + new GenericCollectionRequest( + SolrRequest.METHOD.GET, + "/stream", + SolrRequest.SolrRequestType.ADMIN, + new MapSolrParams( + Map.of("collection", COLLECTION_NAME, WT, JAVABIN, "action", "plugins"))), Map.of(":plugins:mincopy", "org.apache.solr.client.solrj.io.stream.metrics.MinCopyMetric")); UpdateRequest ur = new UpdateRequest(); @@ -567,13 +568,14 @@ private void verifyComponent( "meta", "true")); - GenericSolrRequest req1 = - new GenericSolrRequest(SolrRequest.METHOD.GET, "/config/" + componentType, params) - .setRequiresCollection(true); TestDistribFileStore.assertResponseValues( 10, client, - req1, + new GenericCollectionRequest( + SolrRequest.METHOD.GET, + "/config/" + componentType, + SolrRequest.SolrRequestType.ADMIN, + params), Map.of( ":config:" + componentType + ":" + componentName + ":_packageinfo_:package", pkg, ":config:" + componentType + ":" + componentName + ":_packageinfo_:version", version)); diff --git a/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java b/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java index e758b7326f1..0cdb59e4b8e 100644 --- a/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java +++ b/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java @@ -24,8 +24,10 @@ import org.apache.solr.client.api.model.CoreStatusResponse; import org.apache.solr.client.solrj.JacksonContentWriter; 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.impl.HttpSolrClient; -import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.cloud.AbstractFullDistribZkTestBase; import org.apache.solr.common.cloud.SolrZkClient; import org.apache.solr.common.params.CoreAdminParams; @@ -56,8 +58,9 @@ protected String getCloudSolrConfig() { public void test() throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.set(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.STATUS.toString()); - QueryRequest request = new QueryRequest(params); - request.setPath("/admin/cores"); + var request = + new GenericSolrRequest( + SolrRequest.METHOD.GET, "/admin/cores", SolrRequestType.ADMIN, params); int which = r.nextInt(clients.size()); // create a client that does not have the /collection1 as part of the URL. 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 49fc8017317..a8c361249aa 100644 --- a/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java +++ b/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java @@ -31,9 +31,10 @@ 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; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.cloud.SolrCloudTestCase; import org.apache.solr.common.SolrInputDocument; @@ -106,9 +107,9 @@ public void testNonExistentQuery() throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("queryUUID", "foobar"); - GenericSolrRequest request = - new GenericSolrRequest(SolrRequest.METHOD.GET, "/tasks/cancel", params) - .setRequiresCollection(true); + var request = + new GenericCollectionRequest( + SolrRequest.METHOD.GET, "/tasks/cancel", SolrRequestType.ADMIN, params); NamedList queryResponse = cluster.getSolrClient(COLLECTION_NAME).request(request); assertEquals("Query with queryID foobar not found", queryResponse.get("status")); @@ -185,8 +186,11 @@ private NamedList listTasks() throws SolrServerException, IOException { cluster .getSolrClient(COLLECTION_NAME) .request( - new GenericSolrRequest(SolrRequest.METHOD.GET, "/tasks/list") - .setRequiresCollection(true)); + new GenericCollectionRequest( + SolrRequest.METHOD.GET, + "/tasks/list", + SolrRequestType.ADMIN, + new ModifiableSolrParams())); return (NamedList) response.get("taskList"); } @@ -195,9 +199,9 @@ public void testCheckSpecificQueryStatus() throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("taskUUID", "25"); - GenericSolrRequest request = - new GenericSolrRequest(SolrRequest.METHOD.GET, "/tasks/list", params) - .setRequiresCollection(true); + var request = + new GenericCollectionRequest( + SolrRequest.METHOD.GET, "/tasks/list", SolrRequestType.ADMIN, params); NamedList queryResponse = cluster.getSolrClient(COLLECTION_NAME).request(request); String result = (String) queryResponse.get("taskStatus"); @@ -212,8 +216,9 @@ private CompletableFuture cancelQuery( ModifiableSolrParams params = new ModifiableSolrParams(); params.set("queryUUID", queryID); - SolrRequest request = new QueryRequest(params); - request.setPath("/tasks/cancel"); + var request = + new GenericCollectionRequest( + SolrRequest.METHOD.POST, "/tasks/cancel", SolrRequestType.ADMIN, params); try { NamedList queryResponse; diff --git a/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java b/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java index 074813c731d..1ae72b193cf 100644 --- a/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java +++ b/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java @@ -38,14 +38,14 @@ import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.impl.InputStreamResponseParser; import org.apache.solr.client.solrj.request.CollectionAdminRequest; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.QueryRequest; -import org.apache.solr.client.solrj.request.RequestWriter; import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.cloud.MiniSolrCloudCluster; import org.apache.solr.cloud.SolrCloudTestCase; import org.apache.solr.common.params.MapSolrParams; +import org.apache.solr.common.params.SolrParams; import org.apache.solr.common.util.JavaBinCodec; import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.Utils; @@ -109,12 +109,12 @@ public void testRoundTrip() throws Exception { } } - private void index( - String testCollection, CloudSolrClient client, GenericSolrRequest r, boolean del) + private void index(String testCollection, CloudSolrClient client, SolrRequest r, boolean del) throws Exception { - RTimer timer = new RTimer(); + // RTimer timer = new RTimer(); client.request(r, testCollection); - System.out.println("INDEX_TIME: " + r.contentWriter.getContentType() + " : " + timer.getTime()); + // System.out.println("INDEX_TIME: " + r.contentWriter.getContentType() + " : " + + // timer.getTime()); if (del) { UpdateRequest req = new UpdateRequest().deleteByQuery("*:*"); req.setParam("commit", "true"); @@ -145,12 +145,14 @@ private byte[] runQuery(String testCollection, CloudSolrClient client, String wt private void modifySchema(String testCollection, CloudSolrClient client) throws SolrServerException, IOException { - GenericSolrRequest req = - new GenericSolrRequest(SolrRequest.METHOD.POST, "/schema") - .setRequiresCollection(true) - .setContentWriter( - new RequestWriter.StringPayloadContentWriter( - "{\n" + client.request( + new GenericCollectionRequest( + SolrRequest.METHOD.POST, + "/schema", + SolrRequest.SolrRequestType.ADMIN, + SolrParams.of()) + .withContent( + ("{\n" + "\"add-field-type\" : {" + "\"name\":\"knn_vector_10\",\"class\":\"solr.DenseVectorField\",\"vectorDimension\":10,\"similarityFunction\":\"cosine\",\"knnAlgorithm\":\"hnsw\"},\n" + "\"add-field\" : [" @@ -158,38 +160,42 @@ private void modifySchema(String testCollection, CloudSolrClient client) + "{\"name\":\"initial_release_date\",\"type\":\"string\",\"stored\":true},\n" + "{\"name\":\"directed_by\",\"type\":\"string\",\"multiValued\":true,\"stored\":true},\n" + "{\"name\":\"genre\",\"type\":\"string\",\"multiValued\":true,\"stored\":true},\n" - + "{\"name\":\"film_vector\",\"type\":\"knn_vector_10\",\"indexed\":true,\"stored\":true}]}", - XMLResponseWriter.CONTENT_TYPE_XML_UTF8)); - - client.request(req, testCollection); + + "{\"name\":\"film_vector\",\"type\":\"knn_vector_10\",\"indexed\":true,\"stored\":true}]}") + .getBytes(StandardCharsets.UTF_8), + XMLResponseWriter.CONTENT_TYPE_XML_UTF8), + testCollection); } - private GenericSolrRequest createJsonReq(byte[] b) { - return new GenericSolrRequest( + private GenericCollectionRequest createJsonReq(byte[] b) { + return new GenericCollectionRequest( SolrRequest.METHOD.POST, "/update/json/docs", + SolrRequest.SolrRequestType.UPDATE, new MapSolrParams(Map.of("commit", "true"))) - .setRequiresCollection(true) .withContent(b, "application/json"); } @SuppressWarnings("rawtypes") - private GenericSolrRequest createJavabinReq(byte[] b) throws IOException { + private GenericCollectionRequest createJavabinReq(byte[] b) throws IOException { List l = (List) Utils.fromJSON(b); ByteArrayOutputStream baos = new ByteArrayOutputStream(); new JavaBinCodec().marshal(l.iterator(), baos); - return new GenericSolrRequest( - SolrRequest.METHOD.POST, "/update", new MapSolrParams(Map.of("commit", "true"))) - .withContent(baos.toByteArray(), "application/javabin") - .setRequiresCollection(true); + return new GenericCollectionRequest( + SolrRequest.METHOD.POST, + "/update", + SolrRequest.SolrRequestType.UPDATE, + new MapSolrParams(Map.of("commit", "true"))) + .withContent(baos.toByteArray(), "application/javabin"); } - private GenericSolrRequest createCborReq(byte[] b) throws IOException { - return new GenericSolrRequest( - SolrRequest.METHOD.POST, "/update/cbor", new MapSolrParams(Map.of("commit", "true"))) - .withContent(serializeToCbor(b), "application/cbor") - .setRequiresCollection(true); + private GenericCollectionRequest createCborReq(byte[] b) throws IOException { + return new GenericCollectionRequest( + SolrRequest.METHOD.POST, + "/update/cbor", + SolrRequest.SolrRequestType.UPDATE, + new MapSolrParams(Map.of("commit", "true"))) + .withContent(serializeToCbor(b), "application/cbor"); } @SuppressWarnings("unchecked") diff --git a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java index 60e6cf87a18..992a264750f 100644 --- a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java +++ b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java @@ -37,11 +37,13 @@ import net.thisptr.jackson.jq.JsonQuery; import net.thisptr.jackson.jq.exception.JsonQueryException; import org.apache.solr.client.solrj.SolrClient; +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; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.impl.Http2SolrClient; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.common.util.NamedList; import org.apache.solr.prometheus.collector.MetricSamples; @@ -134,16 +136,15 @@ protected MetricSamples request(SolrClient client, MetricsQuery query) throws IO zkHostLabelValue = ((CloudSolrClient) client).getClusterStateProvider().getQuorumHosts(); } - GenericSolrRequest request = null; + SolrRequest request; if (ADMIN_PATHS.contains(query.getPath())) { request = new GenericSolrRequest( METHOD.GET, query.getPath(), SolrRequestType.ADMIN, query.getParameters()); } else { request = - new GenericSolrRequest( - METHOD.GET, query.getPath(), SolrRequestType.ADMIN, query.getParameters()); - request.setRequiresCollection(true); + new GenericCollectionRequest( + METHOD.GET, query.getPath(), SolrRequestType.UNSPECIFIED, query.getParameters()); } NamedList response; diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericCollectionRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericCollectionRequest.java new file mode 100644 index 00000000000..b0f5958c25b --- /dev/null +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericCollectionRequest.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.solr.client.solrj.request; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Objects; +import org.apache.solr.client.solrj.response.SimpleSolrResponse; +import org.apache.solr.common.params.SolrParams; +import org.apache.solr.common.util.NamedList; + +/** + * A generic request for sending to a Solr collection or core. + * + * @see GenericSolrRequest + */ +public class GenericCollectionRequest extends CollectionRequiringSolrRequest { + private final SolrParams params; // not null + private RequestWriter.ContentWriter contentWriter; + + /** + * @param m the HTTP method + * @param path the HTTP path following the collection or core + * @param requestType the type of this request + * @param params parameter names and values + */ + public GenericCollectionRequest( + METHOD m, String path, SolrRequestType requestType, SolrParams params) { + super(m, path, requestType); + this.params = Objects.requireNonNull(params); + } + + public GenericCollectionRequest withContent(byte[] buf, String type) { + contentWriter = + new RequestWriter.ContentWriter() { + @Override + public void write(OutputStream os) throws IOException { + os.write(buf); + } + + @Override + public String getContentType() { + return type; + } + }; + return this; + } + + @Override + public RequestWriter.ContentWriter getContentWriter(String expectedType) { + return contentWriter; + } + + @Override + public SolrParams getParams() { + return params; + } + + @Override + protected SimpleSolrResponse createResponse(NamedList namedList) { + return new SimpleSolrResponse(); + } +} diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericSolrRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericSolrRequest.java index 24edb9b320a..53c15a9d904 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericSolrRequest.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/GenericSolrRequest.java @@ -85,7 +85,9 @@ public GenericSolrRequest(METHOD m, String path, SolrRequestType requestType, So * 'false' otherwise. * * @param requiresCollection true if a default collection should be used, false otherwise. + * @deprecated use {@link GenericCollectionRequest} instead */ + @Deprecated public GenericSolrRequest setRequiresCollection(boolean requiresCollection) { this.requiresCollection = requiresCollection; return this; diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientRetryTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientRetryTest.java index 61287300d2e..39f10b2c324 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientRetryTest.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientRetryTest.java @@ -69,7 +69,6 @@ public void testRetry() throws Exception { var metricsRequest = new GenericSolrRequest(METHOD.GET, "/admin/metrics", SolrRequestType.ADMIN, params); - metricsRequest.setRequiresCollection(false); NamedList namedList = solrClient.request(metricsRequest); System.out.println(namedList); diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java index d0a52e9322b..bfa3726e831 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java @@ -28,6 +28,8 @@ import org.apache.lucene.tests.util.LuceneTestCase; 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.embedded.AbstractEmbeddedSolrServerTestCase; import org.apache.solr.client.solrj.request.CoreAdminRequest.Create; @@ -119,8 +121,9 @@ public void testErrorCases() throws Exception { params.set("action", "BADACTION"); String collectionName = "badactioncollection"; params.set("name", collectionName); - QueryRequest request = new QueryRequest(params); - request.setPath("/admin/cores"); + var request = + new GenericSolrRequest( + SolrRequest.METHOD.POST, "/admin/cores", SolrRequestType.ADMIN, params); expectThrows(SolrException.class, () -> getSolrAdmin().request(request)); } diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java index de63551d4aa..c70e4642aec 100644 --- a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java +++ b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java @@ -41,7 +41,7 @@ import org.apache.solr.JSONTestUtil; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; -import org.apache.solr.client.solrj.SolrRequest.METHOD; +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.HttpSolrClient; @@ -1144,8 +1144,9 @@ protected CollectionAdminResponse createCollection( } params.set("name", collectionName); params.set("collection.configName", configSetName); - QueryRequest request = new QueryRequest(params); - request.setPath("/admin/collections"); + var request = + new GenericSolrRequest( + SolrRequest.METHOD.POST, "/admin/collections", SolrRequestType.ADMIN, params); CollectionAdminResponse res = new CollectionAdminResponse(); if (client == null) { @@ -1288,7 +1289,9 @@ private Long getNumCommits(HttpSolrClient sourceClient) throws SolrServerExcepti params.set("prefix", "UPDATE.updateHandler"); params.set("registry", "solr.core." + collection); // use generic request to avoid extra processing of queries - var req = new GenericSolrRequest(METHOD.GET, "/admin/metrics", SolrRequestType.ADMIN, params); + var req = + new GenericSolrRequest( + SolrRequest.METHOD.GET, "/admin/metrics", SolrRequestType.ADMIN, params); NamedList resp = client.request(req); NamedList metrics = (NamedList) resp.get("metrics"); NamedList uhandlerCat = (NamedList) metrics.getVal(0); diff --git a/solr/test-framework/src/java/org/apache/solr/handler/BackupStatusChecker.java b/solr/test-framework/src/java/org/apache/solr/handler/BackupStatusChecker.java index 77163549289..5b4d017da3a 100644 --- a/solr/test-framework/src/java/org/apache/solr/handler/BackupStatusChecker.java +++ b/solr/test-framework/src/java/org/apache/solr/handler/BackupStatusChecker.java @@ -25,6 +25,8 @@ import java.util.List; import java.util.concurrent.TimeUnit; import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.client.solrj.SolrRequest; +import org.apache.solr.client.solrj.request.GenericCollectionRequest; import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.client.solrj.response.SimpleSolrResponse; import org.apache.solr.common.util.NamedList; @@ -190,8 +192,11 @@ public String checkBackupSuccess(final String backupName) throws Exception { private String _checkBackupSuccess(final String backupName) throws Exception { final String label = (null == backupName ? "latest backup" : backupName); final SimpleSolrResponse rsp = - new GenericSolrRequest(GenericSolrRequest.METHOD.GET, path, params("command", "details")) - .setRequiresCollection(true) + new GenericCollectionRequest( + GenericSolrRequest.METHOD.GET, + path, + SolrRequest.SolrRequestType.ADMIN, + params("command", "details")) .process(client); final NamedList data = rsp.getResponse(); log.info("Checking Status of {}: {}", label, data); @@ -267,8 +272,11 @@ public void waitForBackupDeletionSuccess(final String backupName, final TimeOut public boolean checkBackupDeletionSuccess(final String backupName) throws Exception { assertNotNull("backumpName must not be null", backupName); final SimpleSolrResponse rsp = - new GenericSolrRequest(GenericSolrRequest.METHOD.GET, path, params("command", "details")) - .setRequiresCollection(true) + new GenericCollectionRequest( + GenericSolrRequest.METHOD.GET, + path, + SolrRequest.SolrRequestType.ADMIN, + params("command", "details")) .process(client); final NamedList data = rsp.getResponse(); log.info("Checking Deletion Status of {}: {}", backupName, data); From 8c0a92836bbb3b8e10cc826f261e6a9b71526025 Mon Sep 17 00:00:00 2001 From: David Smiley Date: Tue, 8 Jul 2025 23:56:19 -0400 Subject: [PATCH 2/2] Revert QueryRequest changes (defer to later) --- .../solr/cloud/MultiThreadedOCPTest.java | 10 +++---- .../apache/solr/cloud/SSLMigrationTest.java | 30 +++++++++---------- .../cloud/api/collections/ShardSplitTest.java | 9 ++---- .../TestRequestStatusCollectionAPI.java | 6 ++-- .../solr/handler/TestReplicationHandler.java | 23 +++++++------- .../solr/schema/TestCloudManagedSchema.java | 9 ++---- .../solr/search/TestTaskManagement.java | 12 ++++---- .../client/solrj/request/TestCoreAdmin.java | 7 ++--- .../AbstractBasicDistributedZkTestBase.java | 5 ++-- 9 files changed, 47 insertions(+), 64 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java b/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java index 01b0565f580..833f28a1a63 100644 --- a/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java @@ -22,13 +22,11 @@ import java.lang.invoke.MethodHandles; import java.util.Random; 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.request.CollectionAdminRequest; import org.apache.solr.client.solrj.request.CollectionAdminRequest.Create; import org.apache.solr.client.solrj.request.CollectionAdminRequest.SplitShard; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.response.RequestStatusState; import org.apache.solr.common.params.CollectionParams; import org.apache.solr.common.params.ModifiableSolrParams; @@ -323,10 +321,10 @@ public void run() { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("action", CollectionParams.CollectionAction.CLUSTERSTATUS.toString()); params.set("collection", "collection1"); + QueryRequest request = new QueryRequest(params); + request.setPath("/admin/collections"); - client.request( - new GenericSolrRequest( - SolrRequest.METHOD.GET, "/admin/collections", SolrRequestType.ADMIN, params)); + client.request(request); state = getRequestState("2000", client); diff --git a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java index 3fcf90451f4..7bf580a865c 100644 --- a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java @@ -19,20 +19,21 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Properties; import org.apache.lucene.tests.util.LuceneTestCase.AwaitsFix; import org.apache.solr.SolrTestCaseJ4.SuppressSSL; 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.impl.HttpClientUtil; import org.apache.solr.client.solrj.impl.LBHttpSolrClient; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.common.cloud.DocCollection; import org.apache.solr.common.cloud.Replica; import org.apache.solr.common.cloud.Slice; import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.params.CollectionParams.CollectionAction; +import org.apache.solr.common.params.MapSolrParams; +import org.apache.solr.common.params.SolrParams; import org.apache.solr.embedded.JettyConfig; import org.apache.solr.embedded.JettySolrRunner; import org.apache.solr.util.SSLTestConfig; @@ -115,18 +116,17 @@ private List getReplicas() { } private void setUrlScheme(String value) throws Exception { - var request = - new GenericSolrRequest( - SolrRequest.METHOD.POST, - "/admin/collections", - SolrRequestType.ADMIN, - params( - "action", - CollectionAction.CLUSTERPROP.toString().toLowerCase(Locale.ROOT), - "name", - "urlScheme", - "val", - value)); + Map m = + Map.of( + "action", + CollectionAction.CLUSTERPROP.toString().toLowerCase(Locale.ROOT), + "name", + "urlScheme", + "val", + value); + SolrParams params = new MapSolrParams(m); + QueryRequest request = new QueryRequest(params); + request.setPath("/admin/collections"); String[] urls = getReplicas().stream() diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java index 02321a205b8..4b5a784185d 100644 --- a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java @@ -40,14 +40,12 @@ import org.apache.lucene.tests.util.LuceneTestCase; 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.impl.CloudLegacySolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; 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.CollectionAdminResponse; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.RequestStatusState; @@ -1272,9 +1270,8 @@ protected void splitShard( if (splitKey != null) { params.set("split.key", splitKey); } - var request = - new GenericSolrRequest( - SolrRequest.METHOD.POST, "/admin/collections", SolrRequestType.ADMIN, params); + QueryRequest request = new QueryRequest(params); + request.setPath("/admin/collections"); String baseUrl = shardToJetty.get(SHARD1).get(0).jetty.getBaseUrl().toString(); diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java index ddec415aa6e..f47a08ca8e4 100644 --- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java +++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java @@ -25,10 +25,9 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.solr.client.solrj.SolrClient; -import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.response.RequestStatusState; import org.apache.solr.cloud.BasicDistributedZkTest; import org.apache.solr.common.params.CollectionParams; @@ -228,7 +227,8 @@ private NamedList sendStatusRequestWithRetry(ModifiableSolrParams params protected NamedList sendRequest(ModifiableSolrParams params) throws SolrServerException, IOException { - var request = new GenericSolrRequest(SolrRequest.METHOD.POST, "/admin/collections", params); + QueryRequest request = new QueryRequest(params); + request.setPath("/admin/collections"); String baseUrl = shardToJetty.get(SHARD1).get(0).jetty.getBaseUrl().toString(); 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 80c559b9816..b2b3d77e124 100644 --- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java +++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java @@ -51,11 +51,10 @@ 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.GenericCollectionRequest; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.SimpleSolrResponse; @@ -202,9 +201,8 @@ private NamedList getDetails(SolrClient s) throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("command", "details"); params.set("_trace", "getDetails"); - var req = - new GenericCollectionRequest( - SolrRequest.METHOD.GET, ReplicationHandler.PATH, SolrRequestType.ADMIN, params); + params.set("qt", ReplicationHandler.PATH); + QueryRequest req = new QueryRequest(params); NamedList res = s.request(req); assertReplicationResponseSucceeded(res); @@ -222,9 +220,9 @@ private NamedList getIndexVersion(SolrClient s) throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("command", "indexversion"); params.set("_trace", "getIndexVersion"); - var req = - new GenericCollectionRequest( - SolrRequest.METHOD.GET, ReplicationHandler.PATH, SolrRequestType.ADMIN, params); + params.set("qt", ReplicationHandler.PATH); + QueryRequest req = new QueryRequest(params); + NamedList res = s.request(req); assertReplicationResponseSucceeded(res); @@ -236,9 +234,8 @@ private void reloadCore(JettySolrRunner jettySolrRunner, String core) throws Exc ModifiableSolrParams params = new ModifiableSolrParams(); params.set("action", "reload"); params.set("core", core); - var req = - new GenericSolrRequest( - SolrRequest.METHOD.POST, "/admin/cores", SolrRequestType.ADMIN, params); + params.set("qt", "/admin/cores"); + QueryRequest req = new QueryRequest(params); try (SolrClient adminClient = adminClient(jettySolrRunner)) { NamedList res = adminClient.request(req); @@ -1563,7 +1560,7 @@ public void testEmptyBackups() throws Exception { new GenericCollectionRequest( SolrRequest.METHOD.POST, "/replication", - SolrRequestType.ADMIN, + SolrRequest.SolrRequestType.ADMIN, params("command", "backup", "location", backupDir.toString(), "name", backupName)); final TimeOut timeout = new TimeOut(30, TimeUnit.SECONDS, TimeSource.NANO_TIME); final SimpleSolrResponse rsp = req.process(leaderClient); @@ -1586,7 +1583,7 @@ public void testEmptyBackups() throws Exception { new GenericCollectionRequest( SolrRequest.METHOD.POST, "/replication", - SolrRequestType.ADMIN, + SolrRequest.SolrRequestType.ADMIN, params("command", "backup", "location", backupDir.toString(), "name", backupName)); final TimeOut timeout = new TimeOut(30, TimeUnit.SECONDS, TimeSource.NANO_TIME); final SimpleSolrResponse rsp = req.process(leaderClient); diff --git a/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java b/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java index 0cdb59e4b8e..e758b7326f1 100644 --- a/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java +++ b/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchema.java @@ -24,10 +24,8 @@ import org.apache.solr.client.api.model.CoreStatusResponse; import org.apache.solr.client.solrj.JacksonContentWriter; 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.impl.HttpSolrClient; -import org.apache.solr.client.solrj.request.GenericSolrRequest; +import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.cloud.AbstractFullDistribZkTestBase; import org.apache.solr.common.cloud.SolrZkClient; import org.apache.solr.common.params.CoreAdminParams; @@ -58,9 +56,8 @@ protected String getCloudSolrConfig() { public void test() throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.set(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.STATUS.toString()); - var request = - new GenericSolrRequest( - SolrRequest.METHOD.GET, "/admin/cores", SolrRequestType.ADMIN, params); + QueryRequest request = new QueryRequest(params); + request.setPath("/admin/cores"); int which = r.nextInt(clients.size()); // create a client that does not have the /collection1 as part of the URL. 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 a8c361249aa..41d10fde766 100644 --- a/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java +++ b/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java @@ -31,7 +31,6 @@ 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.GenericCollectionRequest; @@ -109,7 +108,7 @@ public void testNonExistentQuery() throws Exception { var request = new GenericCollectionRequest( - SolrRequest.METHOD.GET, "/tasks/cancel", SolrRequestType.ADMIN, params); + SolrRequest.METHOD.GET, "/tasks/cancel", SolrRequest.SolrRequestType.ADMIN, params); NamedList queryResponse = cluster.getSolrClient(COLLECTION_NAME).request(request); assertEquals("Query with queryID foobar not found", queryResponse.get("status")); @@ -189,7 +188,7 @@ private NamedList listTasks() throws SolrServerException, IOException { new GenericCollectionRequest( SolrRequest.METHOD.GET, "/tasks/list", - SolrRequestType.ADMIN, + SolrRequest.SolrRequestType.ADMIN, new ModifiableSolrParams())); return (NamedList) response.get("taskList"); } @@ -201,7 +200,7 @@ public void testCheckSpecificQueryStatus() throws Exception { var request = new GenericCollectionRequest( - SolrRequest.METHOD.GET, "/tasks/list", SolrRequestType.ADMIN, params); + SolrRequest.METHOD.GET, "/tasks/list", SolrRequest.SolrRequestType.ADMIN, params); NamedList queryResponse = cluster.getSolrClient(COLLECTION_NAME).request(request); String result = (String) queryResponse.get("taskStatus"); @@ -216,9 +215,8 @@ private CompletableFuture cancelQuery( ModifiableSolrParams params = new ModifiableSolrParams(); params.set("queryUUID", queryID); - var request = - new GenericCollectionRequest( - SolrRequest.METHOD.POST, "/tasks/cancel", SolrRequestType.ADMIN, params); + SolrRequest request = new QueryRequest(params); + request.setPath("/tasks/cancel"); try { NamedList queryResponse; diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java index bfa3726e831..d0a52e9322b 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java @@ -28,8 +28,6 @@ import org.apache.lucene.tests.util.LuceneTestCase; 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.embedded.AbstractEmbeddedSolrServerTestCase; import org.apache.solr.client.solrj.request.CoreAdminRequest.Create; @@ -121,9 +119,8 @@ public void testErrorCases() throws Exception { params.set("action", "BADACTION"); String collectionName = "badactioncollection"; params.set("name", collectionName); - var request = - new GenericSolrRequest( - SolrRequest.METHOD.POST, "/admin/cores", SolrRequestType.ADMIN, params); + QueryRequest request = new QueryRequest(params); + request.setPath("/admin/cores"); expectThrows(SolrException.class, () -> getSolrAdmin().request(request)); } diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java index c70e4642aec..7b6a25511e4 100644 --- a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java +++ b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java @@ -1144,9 +1144,8 @@ protected CollectionAdminResponse createCollection( } params.set("name", collectionName); params.set("collection.configName", configSetName); - var request = - new GenericSolrRequest( - SolrRequest.METHOD.POST, "/admin/collections", SolrRequestType.ADMIN, params); + QueryRequest request = new QueryRequest(params); + request.setPath("/admin/collections"); CollectionAdminResponse res = new CollectionAdminResponse(); if (client == null) {