Skip to content

Commit c773b35

Browse files
Copilotlaeubi
andcommitted
Make retry configuration align with Maven Resolver properties
- Use aether.connector.http.retryHandler.count for retry attempts (default: 3) - Use aether.connector.http.retryHandler.interval for retry delay - Add MavenPropertyHelper to read configuration from Maven properties - Change default retry count from 5 to 3 to match Maven Resolver defaults Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
1 parent 102adea commit c773b35

1 file changed

Lines changed: 39 additions & 7 deletions

File tree

p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/Java11HttpTransportFactory.java

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.codehaus.plexus.logging.Logger;
4545
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
4646
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
47+
import org.eclipse.tycho.helper.MavenPropertyHelper;
4748
import org.eclipse.tycho.p2maven.helper.ProxyHelper;
4849
import org.eclipse.tycho.p2maven.transport.Response.ResponseConsumer;
4950

@@ -67,7 +68,13 @@ public class Java11HttpTransportFactory implements HttpTransportFactory, Initial
6768
ThreadLocal.withInitial(() -> new SimpleDateFormat("EEE MMMd HH:mm:ss yyyy", Locale.ENGLISH)));
6869

6970
static final String HINT = "Java11Client";
70-
private static final int MAX_RETRY_ATTEMPTS = 5;
71+
72+
// Maven Resolver compatible configuration properties
73+
private static final String PROP_RETRY_HANDLER_COUNT = "aether.connector.http.retryHandler.count";
74+
private static final String PROP_RETRY_HANDLER_INTERVAL = "aether.connector.http.retryHandler.interval";
75+
76+
// Default values aligned with Maven Resolver
77+
private static final int DEFAULT_MAX_RETRY_ATTEMPTS = 3;
7178
private static final int DEFAULT_RETRY_DELAY_SECONDS = 5;
7279

7380
@Requirement
@@ -76,14 +83,19 @@ public class Java11HttpTransportFactory implements HttpTransportFactory, Initial
7683
MavenAuthenticator authenticator;
7784
@Requirement
7885
Logger logger;
86+
@Requirement
87+
MavenPropertyHelper propertyHelper;
88+
89+
private int maxRetryAttempts;
90+
private int retryDelaySeconds;
7991

8092
private HttpClient client;
8193
private HttpClient clientHttp1;
8294

8395
@Override
8496
public HttpTransport createTransport(URI uri) {
8597
Java11HttpTransport transport = new Java11HttpTransport(client, clientHttp1, HttpRequest.newBuilder().uri(uri),
86-
uri, logger);
98+
uri, logger, maxRetryAttempts, retryDelaySeconds);
8799
authenticator.preemtiveAuth((k, v) -> transport.setHeader(k, v), uri);
88100
return transport;
89101
}
@@ -95,13 +107,18 @@ private static final class Java11HttpTransport implements HttpTransport {
95107
private Logger logger;
96108
private HttpClient clientHttp1;
97109
private URI uri;
110+
private int maxRetryAttempts;
111+
private int retryDelaySeconds;
98112

99-
public Java11HttpTransport(HttpClient client, HttpClient clientHttp1, Builder builder, URI uri, Logger logger) {
113+
public Java11HttpTransport(HttpClient client, HttpClient clientHttp1, Builder builder, URI uri, Logger logger,
114+
int maxRetryAttempts, int retryDelaySeconds) {
100115
this.client = client;
101116
this.clientHttp1 = clientHttp1;
102117
this.builder = builder;
103118
this.uri = uri;
104119
this.logger = logger;
120+
this.maxRetryAttempts = maxRetryAttempts;
121+
this.retryDelaySeconds = retryDelaySeconds;
105122
}
106123

107124
@Override
@@ -135,7 +152,7 @@ private boolean shouldRetry(int statusCode) {
135152
private long getRetryDelay(HttpResponse<?> response) {
136153
String retryAfterHeader = response.headers().firstValue("Retry-After").orElse(null);
137154
if (retryAfterHeader == null || retryAfterHeader.isBlank()) {
138-
return DEFAULT_RETRY_DELAY_SECONDS;
155+
return retryDelaySeconds;
139156
}
140157

141158
// Try to parse as seconds (integer)
@@ -162,12 +179,12 @@ private long getRetryDelay(HttpResponse<?> response) {
162179
}
163180

164181
// Default if parsing fails
165-
return DEFAULT_RETRY_DELAY_SECONDS;
182+
return retryDelaySeconds;
166183
}
167184

168185
private <T> T performGet(ResponseConsumer<T> consumer, HttpClient httpClient)
169186
throws IOException, InterruptedException {
170-
int retriesLeft = MAX_RETRY_ATTEMPTS;
187+
int retriesLeft = maxRetryAttempts;
171188
while (retriesLeft > 0) {
172189
retriesLeft--;
173190
HttpRequest request = builder.GET().timeout(Duration.ofSeconds(TIMEOUT_SECONDS)).build();
@@ -249,7 +266,7 @@ public Response head() throws IOException {
249266
}
250267

251268
private Response doHead(HttpClient httpClient) throws IOException, InterruptedException {
252-
int retriesLeft = MAX_RETRY_ATTEMPTS;
269+
int retriesLeft = maxRetryAttempts;
253270
while (retriesLeft > 0) {
254271
retriesLeft--;
255272
HttpResponse<Void> response = httpClient.send(
@@ -336,6 +353,21 @@ public long getLastModified() {
336353

337354
@Override
338355
public void initialize() throws InitializationException {
356+
// Read retry configuration from Maven properties
357+
// Align with Maven Resolver configuration: aether.connector.http.retryHandler.count (default: 3)
358+
maxRetryAttempts = propertyHelper.getGlobalIntProperty(PROP_RETRY_HANDLER_COUNT, DEFAULT_MAX_RETRY_ATTEMPTS);
359+
360+
// Read retry delay configuration
361+
// Maven uses aether.connector.http.retryHandler.interval in milliseconds, we use seconds
362+
// Convert from milliseconds to seconds, defaulting to 5 seconds if not set
363+
int retryIntervalMs = propertyHelper.getGlobalIntProperty(PROP_RETRY_HANDLER_INTERVAL, DEFAULT_RETRY_DELAY_SECONDS * 1000);
364+
retryDelaySeconds = (int) TimeUnit.MILLISECONDS.toSeconds(retryIntervalMs);
365+
if (retryDelaySeconds == 0 && retryIntervalMs > 0) {
366+
retryDelaySeconds = 1; // Minimum 1 second if interval was set but less than 1 second
367+
} else if (retryDelaySeconds == 0) {
368+
retryDelaySeconds = DEFAULT_RETRY_DELAY_SECONDS; // Use default if interval is 0
369+
}
370+
339371
ProxySelector proxySelector = new ProxySelector() {
340372

341373
@Override

0 commit comments

Comments
 (0)