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/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/handler/TestReplicationHandler.java b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java index ad8bdcc792f..b2b3d77e124 100644 --- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java +++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java @@ -53,7 +53,7 @@ import org.apache.solr.client.solrj.SolrRequest; 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.GenericCollectionRequest; import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.solr.client.solrj.response.QueryResponse; @@ -1556,12 +1556,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", + 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); @@ -1579,12 +1579,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", + 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/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/search/TestTaskManagement.java b/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java index 49fc8017317..41d10fde766 100644 --- a/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java +++ b/solr/core/src/test/org/apache/solr/search/TestTaskManagement.java @@ -33,7 +33,7 @@ import org.apache.solr.client.solrj.SolrRequest; 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 +106,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", SolrRequest.SolrRequestType.ADMIN, params); NamedList queryResponse = cluster.getSolrClient(COLLECTION_NAME).request(request); assertEquals("Query with queryID foobar not found", queryResponse.get("status")); @@ -185,8 +185,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", + SolrRequest.SolrRequestType.ADMIN, + new ModifiableSolrParams())); return (NamedList) response.get("taskList"); } @@ -195,9 +198,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", SolrRequest.SolrRequestType.ADMIN, params); NamedList queryResponse = cluster.getSolrClient(COLLECTION_NAME).request(request); String result = (String) queryResponse.get("taskStatus"); 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/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java index de63551d4aa..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 @@ -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; @@ -1288,7 +1288,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);