in client/src/main/java/org/apache/cassandra/sidecar/client/RequestExecutor.java [256:280]
private void applyRetryPolicy(CompletableFuture<HttpResponse> future,
Iterator<SidecarInstance> iterator,
SidecarInstance sidecarInstance,
RequestContext context,
final int attempt,
HttpResponse response,
Throwable throwable)
{
boolean retryOnNewHost = iterator.hasNext();
// check status code and apply retry policy on invalid status code
Request request = context.request();
context.retryPolicy()
.onResponse(future, request, response, throwable, attempt, retryOnNewHost, (nextAttempt, delay) -> {
String statusCode = response != null ? String.valueOf(response.statusCode()) : "<Not Available>";
SidecarInstance nextInstance = iterator.hasNext() ? iterator.next() : sidecarInstance;
if (response == null || response.statusCode() != HttpResponseStatus.ACCEPTED.code())
{
logger.warn("Retrying request on {} instance after {}ms. " +
"Failed on instance={}, attempt={}, statusCode={}",
nextInstance == sidecarInstance ? "same" : "next", delay,
sidecarInstance, attempt, statusCode, throwable);
}
schedule(delay, () -> executeWithRetries(future, iterator, nextInstance, context, nextAttempt));
});
}