This is an automated email from the ASF dual-hosted git repository.
sanjaydutt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new d0000b4f98f Switched from HTTP1 to HTTP2 in SolrClientCloudManager
(#2751)
d0000b4f98f is described below
commit d0000b4f98fd5e2de04ca9f148bdbc5e2351e499
Author: Sanjay Dutt <[email protected]>
AuthorDate: Thu Oct 24 20:25:27 2024 +0530
Switched from HTTP1 to HTTP2 in SolrClientCloudManager (#2751)
* Replaced CloudLegacySolrClient with CloudHttp2SolrClient in
SolrClientCloudManager and updated all internal classes accordingly.
* SolrCloudManager#httpRequest is removed.
* Removed dependencies on Apache httpclient and httpcore from
solrj-zookeeper
---------
Co-authored-by: David Smiley <[email protected]>
---
solr/CHANGES.txt | 2 +
.../java/org/apache/solr/cloud/ZkController.java | 25 ++++--
.../test/org/apache/solr/cloud/OverseerTest.java | 21 +++--
.../org/apache/solr/cloud/ZkControllerTest.java | 9 +++
solr/solrj-zookeeper/build.gradle | 2 -
.../client/solrj/cloud/DelegatingCloudManager.java | 13 ---
.../solr/client/solrj/cloud/SolrCloudManager.java | 10 ---
.../client/solrj/impl/SolrClientCloudManager.java | 94 ++--------------------
.../solrj/impl/SolrClientNodeStateProvider.java | 26 +++---
.../client/solrj/impl/NodeValueFetcherTest.java | 49 ++++++-----
10 files changed, 88 insertions(+), 163 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 36923970e5e..9e8f5e7615a 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -170,6 +170,8 @@ Optimizations
* SOLR-17441: Improve system metrics collection by skipping unreadable MXBean
properties, making /admin/info/system calls faster (Haythem Khiri)
+* SOLR-16503: Switched from HTTP1 to HTTP2 in SolrClientCloudManager by
replacing CloudLegacySolrClient with CloudHttp2SolrClient. (Sanjay Dutt, David
Smiley)
+
Bug Fixes
---------------------
* SOLR-12429: Uploading a configset with a symbolic link produces a
IOException. Now a error message to user generated instead. (Eric Pugh)
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index a1ebe69374c..33732ea0a94 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -54,11 +54,11 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.cloud.SolrCloudManager;
-import org.apache.solr.client.solrj.impl.CloudLegacySolrClient;
+import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient.Builder;
import org.apache.solr.client.solrj.impl.SolrClientCloudManager;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
-import org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider;
import org.apache.solr.client.solrj.request.CoreAdminRequest.WaitForState;
import org.apache.solr.cloud.overseer.ClusterStateMutator;
import org.apache.solr.cloud.overseer.OverseerAction;
@@ -199,7 +199,11 @@ public class ZkController implements Closeable {
private final SolrZkClient zkClient;
public final ZkStateReader zkStateReader;
private SolrCloudManager cloudManager;
- private CloudLegacySolrClient cloudSolrClient;
+
+ // only for internal usage
+ private Http2SolrClient http2SolrClient;
+
+ private CloudHttp2SolrClient cloudSolrClient;
private final String zkServerAddress; // example: 127.0.0.1:54062/solr
@@ -768,8 +772,9 @@ public class ZkController implements Closeable {
} finally {
sysPropsCacher.close();
- customThreadPool.execute(() -> IOUtils.closeQuietly(cloudSolrClient));
customThreadPool.execute(() -> IOUtils.closeQuietly(cloudManager));
+ customThreadPool.execute(() -> IOUtils.closeQuietly(cloudSolrClient));
+ customThreadPool.execute(() -> IOUtils.closeQuietly(http2SolrClient));
try {
try {
@@ -865,11 +870,15 @@ public class ZkController implements Closeable {
if (cloudManager != null) {
return cloudManager;
}
- cloudSolrClient =
- new CloudLegacySolrClient.Builder(new
ZkClientClusterStateProvider(zkStateReader))
-
.withHttpClient(cc.getUpdateShardHandler().getDefaultHttpClient())
+ http2SolrClient =
+ new Http2SolrClient.Builder()
+ .withHttpClient(cc.getDefaultHttpSolrClient())
+ .withIdleTimeout(30000, TimeUnit.MILLISECONDS)
.withConnectionTimeout(15000, TimeUnit.MILLISECONDS)
- .withSocketTimeout(30000, TimeUnit.MILLISECONDS)
+ .build();
+ cloudSolrClient =
+ new CloudHttp2SolrClient.Builder(List.of(getZkServerAddress()),
Optional.empty())
+ .withHttpClient(http2SolrClient)
.build();
cloudManager = new SolrClientCloudManager(cloudSolrClient,
cc.getObjectCache());
cloudManager.getClusterStateProvider().connect();
diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
index 8d3b94071d8..6c5af8facd9 100644
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
@@ -52,8 +52,8 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.cloud.DistributedQueue;
import org.apache.solr.client.solrj.cloud.SolrCloudManager;
-import org.apache.solr.client.solrj.impl.CloudLegacySolrClient;
-import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.impl.SolrClientCloudManager;
import org.apache.solr.cloud.overseer.NodeMutator;
import org.apache.solr.cloud.overseer.OverseerAction;
@@ -127,7 +127,7 @@ public class OverseerTest extends SolrTestCaseJ4 {
Collections.synchronizedList(new ArrayList<>());
private final List<UpdateShardHandler> updateShardHandlers =
Collections.synchronizedList(new ArrayList<>());
- private final List<CloudSolrClient> solrClients =
Collections.synchronizedList(new ArrayList<>());
+ private final List<SolrClient> solrClients =
Collections.synchronizedList(new ArrayList<>());
private static final String COLLECTION =
SolrTestCaseJ4.DEFAULT_TEST_COLLECTION_NAME;
public static class MockZKController {
@@ -1948,13 +1948,18 @@ public class OverseerTest extends SolrTestCaseJ4 {
}
private SolrCloudManager getCloudDataProvider(String zkAddress) {
- var client =
- new
CloudLegacySolrClient.Builder(Collections.singletonList(zkAddress),
Optional.empty())
- .withSocketTimeout(30000, TimeUnit.MILLISECONDS)
+ var httpSolrClient =
+ new Http2SolrClient.Builder()
+ .withIdleTimeout(30000, TimeUnit.MILLISECONDS)
.withConnectionTimeout(15000, TimeUnit.MILLISECONDS)
.build();
- solrClients.add(client);
- SolrClientCloudManager sccm = new SolrClientCloudManager(client);
+ var cloudSolrClient =
+ new CloudHttp2SolrClient.Builder(Collections.singletonList(zkAddress),
Optional.empty())
+ .withHttpClient(httpSolrClient)
+ .build();
+ solrClients.add(cloudSolrClient);
+ solrClients.add(httpSolrClient);
+ SolrClientCloudManager sccm = new SolrClientCloudManager(cloudSolrClient,
null);
sccm.getClusterStateProvider().connect();
return sccm;
}
diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
index d7f5d041ef4..6bda0dd6b53 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
@@ -36,6 +36,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.cloud.ClusterProperties;
import org.apache.solr.common.cloud.ClusterState;
@@ -514,6 +515,7 @@ public class ZkControllerTest extends SolrCloudTestCase {
private static class MockCoreContainer extends CoreContainer {
UpdateShardHandler updateShardHandler =
new UpdateShardHandler(UpdateShardHandlerConfig.DEFAULT);
+ Http2SolrClient solrClient;
public MockCoreContainer() {
super(SolrXmlConfig.fromString(TEST_PATH(), "<solr/>"));
@@ -522,6 +524,7 @@ public class ZkControllerTest extends SolrCloudTestCase {
this.shardHandlerFactory = httpShardHandlerFactory;
this.coreAdminHandler = new CoreAdminHandler();
this.metricManager = mock(SolrMetricManager.class);
+ this.solrClient = new Http2SolrClient.Builder().build();
}
@Override
@@ -535,9 +538,15 @@ public class ZkControllerTest extends SolrCloudTestCase {
@Override
public void shutdown() {
updateShardHandler.close();
+ solrClient.close();
super.shutdown();
}
+ @Override
+ public Http2SolrClient getDefaultHttpSolrClient() {
+ return solrClient;
+ }
+
@Override
public SolrMetricManager getMetricManager() {
return metricManager;
diff --git a/solr/solrj-zookeeper/build.gradle
b/solr/solrj-zookeeper/build.gradle
index a8dccd8b7bc..2e03d9fed3c 100644
--- a/solr/solrj-zookeeper/build.gradle
+++ b/solr/solrj-zookeeper/build.gradle
@@ -34,8 +34,6 @@ dependencies {
// declare dependencies we use even though already declared by solrj-core
implementation 'org.slf4j:slf4j-api'
- implementation 'org.apache.httpcomponents:httpclient'
- implementation 'org.apache.httpcomponents:httpcore'
api('org.apache.zookeeper:zookeeper', {
exclude group: "org.apache.yetus", module: "audience-annotations"
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/DelegatingCloudManager.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/DelegatingCloudManager.java
index cc8c265692f..c259ac3a29c 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/DelegatingCloudManager.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/DelegatingCloudManager.java
@@ -17,7 +17,6 @@
package org.apache.solr.client.solrj.cloud;
import java.io.IOException;
-import java.util.Map;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.impl.ClusterStateProvider;
@@ -69,18 +68,6 @@ public class DelegatingCloudManager implements
SolrCloudManager {
return delegate.request(req);
}
- @Override
- public byte[] httpRequest(
- String url,
- SolrRequest.METHOD method,
- Map<String, String> headers,
- String payload,
- int timeout,
- boolean followRedirects)
- throws IOException {
- return delegate.httpRequest(url, method, headers, payload, timeout,
followRedirects);
- }
-
@Override
public void close() throws IOException {
delegate.close();
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/SolrCloudManager.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/SolrCloudManager.java
index f169bbc3443..d244addd952 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/SolrCloudManager.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/cloud/SolrCloudManager.java
@@ -18,7 +18,6 @@
package org.apache.solr.client.solrj.cloud;
import java.io.IOException;
-import java.util.Map;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.impl.ClusterStateProvider;
@@ -53,13 +52,4 @@ public interface SolrCloudManager extends SolrCloseable {
// Solr-like methods
<T extends SolrResponse> T request(SolrRequest<T> req) throws IOException;
-
- byte[] httpRequest(
- String url,
- SolrRequest.METHOD method,
- Map<String, String> headers,
- String payload,
- int timeout,
- boolean followRedirects)
- throws IOException;
}
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientCloudManager.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientCloudManager.java
index 626a917e7ed..3dca5176aa1 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientCloudManager.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientCloudManager.java
@@ -19,20 +19,6 @@ package org.apache.solr.client.solrj.impl;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpDelete;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.util.EntityUtils;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
@@ -51,7 +37,7 @@ import org.slf4j.LoggerFactory;
public class SolrClientCloudManager implements SolrCloudManager {
private static final Logger log =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- protected final CloudLegacySolrClient solrClient;
+ private final CloudHttp2SolrClient cloudSolrClient;
private final ZkDistribStateManager stateManager;
private final ZkStateReader zkStateReader;
private final SolrZkClient zkClient;
@@ -59,13 +45,9 @@ public class SolrClientCloudManager implements
SolrCloudManager {
private final boolean closeObjectCache;
private volatile boolean isClosed;
- public SolrClientCloudManager(CloudLegacySolrClient solrClient) {
- this(solrClient, null);
- }
-
- public SolrClientCloudManager(CloudLegacySolrClient solrClient, ObjectCache
objectCache) {
- this.solrClient = solrClient;
- this.zkStateReader = ZkStateReader.from(solrClient);
+ public SolrClientCloudManager(CloudHttp2SolrClient client, ObjectCache
objectCache) {
+ this.cloudSolrClient = client;
+ this.zkStateReader = ZkStateReader.from(client);
this.zkClient = zkStateReader.getZkClient();
this.stateManager = new ZkDistribStateManager(zkClient);
this.isClosed = false;
@@ -103,12 +85,12 @@ public class SolrClientCloudManager implements
SolrCloudManager {
@Override
public ClusterStateProvider getClusterStateProvider() {
- return solrClient.getClusterStateProvider();
+ return cloudSolrClient.getClusterStateProvider();
}
@Override
public NodeStateProvider getNodeStateProvider() {
- return new SolrClientNodeStateProvider(solrClient);
+ return new SolrClientNodeStateProvider(cloudSolrClient);
}
@Override
@@ -119,7 +101,7 @@ public class SolrClientCloudManager implements
SolrCloudManager {
@Override
public <T extends SolrResponse> T request(SolrRequest<T> req) throws
IOException {
try {
- return req.process(solrClient);
+ return req.process(cloudSolrClient);
} catch (SolrServerException e) {
throw new IOException(e);
}
@@ -127,68 +109,6 @@ public class SolrClientCloudManager implements
SolrCloudManager {
private static final byte[] EMPTY = new byte[0];
- @Override
- public byte[] httpRequest(
- String url,
- SolrRequest.METHOD method,
- Map<String, String> headers,
- String payload,
- int timeout,
- boolean followRedirects)
- throws IOException {
- HttpClient client = solrClient.getHttpClient();
- final HttpRequestBase req;
- HttpEntity entity = null;
- if (payload != null) {
- entity = new StringEntity(payload, StandardCharsets.UTF_8);
- }
- switch (method) {
- case GET:
- req = new HttpGet(url);
- break;
- case POST:
- req = new HttpPost(url);
- if (entity != null) {
- ((HttpPost) req).setEntity(entity);
- }
- break;
- case PUT:
- req = new HttpPut(url);
- if (entity != null) {
- ((HttpPut) req).setEntity(entity);
- }
- break;
- case DELETE:
- req = new HttpDelete(url);
- break;
- default:
- throw new IOException("Unsupported method " + method);
- }
- if (headers != null) {
- headers.forEach((k, v) -> req.addHeader(k, v));
- }
- RequestConfig.Builder requestConfigBuilder =
HttpClientUtil.createDefaultRequestConfigBuilder();
- if (timeout > 0) {
- requestConfigBuilder.setSocketTimeout(timeout);
- requestConfigBuilder.setConnectTimeout(timeout);
- }
- requestConfigBuilder.setRedirectsEnabled(followRedirects);
- req.setConfig(requestConfigBuilder.build());
- HttpClientContext httpClientRequestContext =
HttpClientUtil.createNewHttpClientRequestContext();
- HttpResponse rsp = client.execute(req, httpClientRequestContext);
- int statusCode = rsp.getStatusLine().getStatusCode();
- if (statusCode != 200) {
- throw new IOException(
- "Error sending request to " + url + ", HTTP response: " +
rsp.toString());
- }
- HttpEntity responseEntity = rsp.getEntity();
- if (responseEntity != null && responseEntity.getContent() != null) {
- return EntityUtils.toByteArray(responseEntity);
- } else {
- return EMPTY;
- }
- }
-
public SolrZkClient getZkClient() {
return zkClient;
}
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
index 7e70378c582..984e1b7a18f 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
@@ -54,14 +54,14 @@ import org.slf4j.LoggerFactory;
public class SolrClientNodeStateProvider implements NodeStateProvider,
MapWriter {
private static final Logger log =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- private final CloudLegacySolrClient solrClient;
+ private final CloudHttp2SolrClient solrClient;
protected final Map<String, Map<String, Map<String, List<Replica>>>>
nodeVsCollectionVsShardVsReplicaInfo = new HashMap<>();
@SuppressWarnings({"rawtypes"})
private Map<String, Map> nodeVsTags = new HashMap<>();
- public SolrClientNodeStateProvider(CloudLegacySolrClient solrClient) {
+ public SolrClientNodeStateProvider(CloudHttp2SolrClient solrClient) {
this.solrClient = solrClient;
try {
readReplicaDetails();
@@ -226,7 +226,7 @@ public class SolrClientNodeStateProvider implements
NodeStateProvider, MapWriter
static class RemoteCallCtx {
ZkClientClusterStateProvider zkClientClusterStateProvider;
- CloudLegacySolrClient solrClient;
+ CloudHttp2SolrClient cloudSolrClient;
public final Map<String, Object> tags = new HashMap<>();
private final String node;
public Map<String, Object> session;
@@ -238,11 +238,11 @@ public class SolrClientNodeStateProvider implements
NodeStateProvider, MapWriter
return true;
}
- public RemoteCallCtx(String node, CloudLegacySolrClient solrClient) {
+ public RemoteCallCtx(String node, CloudHttp2SolrClient cloudSolrClient) {
this.node = node;
- this.solrClient = solrClient;
+ this.cloudSolrClient = cloudSolrClient;
this.zkClientClusterStateProvider =
- (ZkClientClusterStateProvider) solrClient.getClusterStateProvider();
+ (ZkClientClusterStateProvider)
cloudSolrClient.getClusterStateProvider();
}
/**
@@ -290,15 +290,15 @@ public class SolrClientNodeStateProvider implements
NodeStateProvider, MapWriter
String url =
zkClientClusterStateProvider.getZkStateReader().getBaseUrlForNodeName(solrNode);
GenericSolrRequest request = new
GenericSolrRequest(SolrRequest.METHOD.POST, path, params);
- try (var client =
- new HttpSolrClient.Builder()
- .withHttpClient(solrClient.getHttpClient())
- .withBaseSolrUrl(url)
- .withResponseParser(new BinaryResponseParser())
- .build()) {
- NamedList<Object> rsp = client.request(request);
+ request.setResponseParser(new BinaryResponseParser());
+
+ try {
+ NamedList<Object> rsp =
+ cloudSolrClient.getHttpClient().requestWithBaseUrl(url,
request::process).getResponse();
request.response.setResponse(rsp);
return request.response;
+ } catch (SolrServerException | IOException e) {
+ throw new SolrException(ErrorCode.SERVER_ERROR, "Fetching replica
metrics failed", e);
}
}
diff --git
a/solr/solrj-zookeeper/src/test/org/apache/solr/client/solrj/impl/NodeValueFetcherTest.java
b/solr/solrj-zookeeper/src/test/org/apache/solr/client/solrj/impl/NodeValueFetcherTest.java
index 5f521dbb20c..29edd771b43 100644
---
a/solr/solrj-zookeeper/src/test/org/apache/solr/client/solrj/impl/NodeValueFetcherTest.java
+++
b/solr/solrj-zookeeper/src/test/org/apache/solr/client/solrj/impl/NodeValueFetcherTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.client.solrj.impl;
+import java.util.Collections;
+import java.util.Optional;
import java.util.Set;
import
org.apache.solr.client.solrj.impl.SolrClientNodeStateProvider.RemoteCallCtx;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -62,28 +64,31 @@ public class NodeValueFetcherTest extends SolrCloudTestCase
{
}
@Test
- public void testGetTags() {
-
- CloudLegacySolrClient solrClient = (CloudLegacySolrClient)
cluster.getSolrClient();
- int totalCores = 0;
-
- // Sum all the cores of the collection by fetching tags of all nodes.
- // We should get same number than when we created the collection
- for (JettySolrRunner runner : cluster.getJettySolrRunners()) {
- String node = runner.getNodeName();
- RemoteCallCtx ctx = new RemoteCallCtx(node, solrClient);
- NodeValueFetcher fetcher = new NodeValueFetcher();
-
- Set<String> requestedTags = Set.of("cores");
- fetcher.getTags(requestedTags, ctx);
-
- // make sure we only get the tag we asked
- assertEquals(1, ctx.tags.size());
-
- int coresOnNode = (Integer) ctx.tags.get("cores");
- totalCores += coresOnNode;
+ public void testGetTags() throws Exception {
+ try (var cloudHttp2SolrClient =
+ new CloudHttp2SolrClient.Builder(
+
Collections.singletonList(cluster.getZkServer().getZkAddress()),
Optional.empty())
+ .build()) {
+ int totalCores = 0;
+
+ // Sum all the cores of the collection by fetching tags of all nodes.
+ // We should get same number than when we created the collection
+ for (JettySolrRunner runner : cluster.getJettySolrRunners()) {
+ String node = runner.getNodeName();
+ RemoteCallCtx ctx = new RemoteCallCtx(node, cloudHttp2SolrClient);
+ NodeValueFetcher fetcher = new NodeValueFetcher();
+
+ Set<String> requestedTags = Set.of("cores");
+ fetcher.getTags(requestedTags, ctx);
+
+ // make sure we only get the tag we asked
+ assertEquals(1, ctx.tags.size());
+
+ int coresOnNode = (Integer) ctx.tags.get("cores");
+ totalCores += coresOnNode;
+ }
+
+ assertEquals(numShards * numReplicas, totalCores);
}
-
- assertEquals(numShards * numReplicas, totalCores);
}
}