This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new 30608be22 Log retries in JDK HTTP Client
30608be22 is described below
commit 30608be22c4e14bd35d4952d51830e8cf2c4a64a
Author: Konrad Windszus <[email protected]>
AuthorDate: Fri Jan 30 09:46:37 2026 +0100
Log retries in JDK HTTP Client
---
.../aether/transport/jdk/JdkTransporter.java | 33 ++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git
a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
index 043ced255..8b19ca3fa 100644
---
a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
+++
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
@@ -69,6 +69,7 @@ import java.util.regex.Matcher;
import com.github.mizosoft.methanol.Methanol;
import com.github.mizosoft.methanol.RetryInterceptor;
+import com.github.mizosoft.methanol.RetryInterceptor.Context;
import org.eclipse.aether.ConfigurationProperties;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.AuthenticationContext;
@@ -593,6 +594,36 @@ final class JdkTransporter extends AbstractTransporter
implements HttpTransporte
return builder.build();
}
+ public class RetryLoggingListener implements RetryInterceptor.Listener {
+ private final int maxNumRetries;
+
+ RetryLoggingListener(int maxNumRetries) {
+ this.maxNumRetries = maxNumRetries;
+ }
+
+ @Override
+ public void onRetry(Context<?> context, HttpRequest nextRequest,
Duration delay) {
+ LOGGER.warn(
+ "{} request to {} failed (attempt {} of {}) due to {}.
Retrying in {} ms...",
+ context.request().method(),
+ context.request().uri(),
+ context.retryCount() + 1,
+ maxNumRetries + 1,
+ getReason(context),
+ delay.toMillis());
+ }
+
+ String getReason(Context<?> context) {
+ if (context.exception().isPresent()) {
+ return context.exception().get().getMessage();
+ } else if (context.response().isPresent()) {
+ return "status " + context.response().get().statusCode();
+ }
+ // should not happen
+ throw new IllegalStateException("No exception or response present
in retry context");
+ }
+ }
+
protected void configureRetryHandler(
RepositorySystemSession session, RemoteRepository repository,
Methanol.Builder builder) {
int retryCount = ConfigUtils.getInteger(
@@ -638,6 +669,7 @@ final class JdkTransporter extends AbstractTransporter
implements HttpTransporte
Methanol.Interceptor rateLimitingRetryInterceptor =
RetryInterceptor.newBuilder()
.maxRetries(retryCount)
.onStatus(serviceUnavailableCodes::contains)
+ .listener(new RetryLoggingListener(retryCount))
.backoff(RetryInterceptor.BackoffStrategy.linear(
Duration.ofMillis(retryInterval),
Duration.ofMillis(retryIntervalMax)))
.build();
@@ -648,6 +680,7 @@ final class JdkTransporter extends AbstractTransporter
implements HttpTransporte
//
https://github.com/openjdk/jdk/blob/640343f7d94894b0378ea5b1768eeac203a9aaf8/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java#L665
.maxRetries(retryCount)
.onException(t -> t instanceof IOException &&
!NON_RETRIABLE_IO_EXCEPTIONS.contains(t.getClass()))
+ .listener(new RetryLoggingListener(retryCount))
.build();
builder.interceptor(retryIoExceptionsInterceptor);
}