This is an automated email from the ASF dual-hosted git repository.
houston pushed a commit to branch branch_9_0
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9_0 by this push:
new 69d2c32 SOLR-15870: Fix TestCollectionAPI HTTP error
69d2c32 is described below
commit 69d2c32487250cef05a2537569656428932ddc66
Author: Houston Putman <[email protected]>
AuthorDate: Mon Feb 28 10:52:20 2022 -0500
SOLR-15870: Fix TestCollectionAPI HTTP error
The error occured because the test was using a single client
to issue Admin commands before and after a server was restarted.
The HTTP Client caches connections, and didn't evict the expired
connection to the server after it restarted. SolrJ does not attempt to
retry Admin calls, therefore the test failed whenever the stale
connection was used.
(cherry picked from commit c57345b1293ba1a623a53415e4adc93104d99e9c)
---
.../cloud/api/collections/TestCollectionAPI.java | 36 +++++++++++-----------
1 file changed, 18 insertions(+), 18 deletions(-)
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 32598ee..830030d 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
@@ -29,16 +29,13 @@ import com.google.common.collect.Lists;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.cloud.SolrCloudManager;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.BaseHttpSolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
-import org.apache.solr.client.solrj.impl.SolrClientCloudManager;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.V2Request;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
-import org.apache.solr.cloud.CloudUtil;
import org.apache.solr.cloud.ZkConfigSetService;
import org.apache.solr.cloud.ZkTestServer;
import org.apache.solr.common.SolrException;
@@ -366,21 +363,24 @@ public class TestCollectionAPI extends
ReplicaPropertiesBase {
// bring them up again
jetty.start();
- SolrCloudManager cloudManager = new SolrClientCloudManager(null, client);
- zkStateReader.waitForLiveNodes(30, TimeUnit.SECONDS, (o, n) -> n != null
&& n.contains(nodeName));
- CloudUtil.waitForState(cloudManager, COLLECTION_NAME, 30,
TimeUnit.SECONDS, (liveNodes, coll) ->
- coll != null &&
- coll.getReplicas().stream()
- .allMatch(r -> r.getState().equals(Replica.State.ACTIVE)));
- rsp = request.process(client).getResponse();
- collection = (Map<String, Object>) Utils.getObjectByPath(rsp, false,
"cluster/collections/" + COLLECTION_NAME);
- assertEquals("collection health", "GREEN", collection.get("health"));
- shardStatus = (Map<String, Object>) collection.get("shards");
- assertEquals(2, shardStatus.size());
- health = (String) Utils.getObjectByPath(shardStatus, false,
"shard1/health");
- assertEquals("shard1 health", "GREEN", health);
- health = (String) Utils.getObjectByPath(shardStatus, false,
"shard2/health");
- assertEquals("shard2 health", "GREEN", health);
+ // Need to start a new client, in case the http connections in the old
client are still cached to the restarted server.
+ // If this is the case, it will throw an HTTP Exception, and we don't
retry Admin requests.
+ try (CloudSolrClient newClient = createCloudClient(null)) {
+ newClient.getZkStateReader().waitForLiveNodes(30, TimeUnit.SECONDS,
(o, n) -> n != null && n.contains(nodeName));
+ newClient.getZkStateReader().waitForState(COLLECTION_NAME, 30,
TimeUnit.SECONDS, (liveNodes, coll) ->
+ coll != null &&
+ coll.getReplicas().stream()
+ .allMatch(r -> r.getState().equals(Replica.State.ACTIVE)));
+ rsp = request.process(newClient).getResponse();
+ collection = (Map<String, Object>) Utils.getObjectByPath(rsp, false,
"cluster/collections/" + COLLECTION_NAME);
+ assertEquals("collection health", "GREEN", collection.get("health"));
+ shardStatus = (Map<String, Object>) collection.get("shards");
+ assertEquals(2, shardStatus.size());
+ health = (String) Utils.getObjectByPath(shardStatus, false,
"shard1/health");
+ assertEquals("shard1 health", "GREEN", health);
+ health = (String) Utils.getObjectByPath(shardStatus, false,
"shard2/health");
+ assertEquals("shard2 health", "GREEN", health);
+ }
}
}