janhoy opened a new pull request, #4714: URL: https://github.com/apache/solr/pull/4714
# Description When a node goes down while a request is in flight, the Jetty HTTP/2 client surfaces the failure as a plain `IOException` whose message has the form `<h2_error_code>/<reason>` (e.g. `cancel_stream_error/input_shutdown`), with no HTTP response received. `CloudSolrClient.wasCommError()` only recognized `SocketException`/`UnknownHostException`, so such requests were never retried and failed permanently. Surfaced by the nightly `ChaosMonkeySafeLeaderWithPullReplicasTest`: the chaos monkey kills a node mid-update, the client logs `commError=false` and gives up (`LBSolrClient` intentionally doesn't retry updates on generic IOExceptions, so `wasCommError` is the safety net). # Solution Treat an `IOException` whose message matches the HTTP/2 failure form as a communication error in `wasCommError()`, so the request is retried — same semantics as the already-retried `SocketException`. # Tests - Two new tests in `CloudSolrClientCacheTest`: classification of the h2-failure IOException, and end-to-end retry of a failed update. - `ChaosMonkeySafeLeaderWithPullReplicasTest` passes with its previously-failing seed `E464797072CE8325`; full nightly suite (`-Ptests.nightly=true`) green locally. # Checklist - [x] I have reviewed the guidelines for [How to Contribute](https://github.com/apache/solr/blob/main/CONTRIBUTING.md) - [x] I have given Solr maintainers access to contribute to my PR branch - [x] I have developed this patch against the `main` branch - [x] I have run `./gradlew check` (with `-x test`) - [x] I have added tests for my changes - [x] I have added a changelog entry -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
