diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/HttpTransportFactory.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/HttpTransportFactory.java index 501bb0022a..b88c345ef9 100644 --- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/HttpTransportFactory.java +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/HttpTransportFactory.java @@ -16,6 +16,8 @@ public interface HttpTransportFactory { + static final long TIMEOUT_SECONDS = Long.getLong("tycho.http.transport.timeout", 30); + HttpTransport createTransport(URI uri); } diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/Java11HttpTransportFactory.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/Java11HttpTransportFactory.java index 06fc9c0e83..2d4cfafebd 100644 --- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/Java11HttpTransportFactory.java +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/Java11HttpTransportFactory.java @@ -29,6 +29,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Duration; import java.util.List; import java.util.Locale; import java.util.Map; @@ -137,7 +138,7 @@ public void close() { } private HttpResponse performGet() throws IOException, InterruptedException { - HttpRequest request = builder.GET().build(); + HttpRequest request = builder.GET().timeout(Duration.ofSeconds(TIMEOUT_SECONDS)).build(); try { return client.send(request, BodyHandlers.ofInputStream()); } catch (IOException e) { @@ -154,7 +155,8 @@ private HttpResponse performGet() throws IOException, InterruptedEx @Override public Response head() throws IOException { try { - HttpResponse response = client.send(builder.method("HEAD", null).build(), + HttpResponse response = client.send( + builder.method("HEAD", null).timeout(Duration.ofSeconds(TIMEOUT_SECONDS)).build(), BodyHandlers.discarding()); return new ResponseImplementation<>(response) { @Override @@ -239,8 +241,11 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { } }; - client = HttpClient.newBuilder().followRedirects(Redirect.NEVER).proxy(proxySelector).build(); - clientHttp1 = HttpClient.newBuilder().version(Version.HTTP_1_1).followRedirects(Redirect.NEVER) + client = HttpClient.newBuilder().connectTimeout(Duration.ofMinutes(TIMEOUT_SECONDS)) + .followRedirects(Redirect.NEVER) + .proxy(proxySelector).build(); + clientHttp1 = HttpClient.newBuilder().connectTimeout(Duration.ofMinutes(TIMEOUT_SECONDS)) + .version(Version.HTTP_1_1).followRedirects(Redirect.NEVER) .proxy(proxySelector).build(); } diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/TychoRepositoryTransport.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/TychoRepositoryTransport.java index 41ab245766..d6ade6edce 100644 --- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/TychoRepositoryTransport.java +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/TychoRepositoryTransport.java @@ -126,8 +126,8 @@ private IStatus reportStatus(IStatus status, OutputStream target) { } @Override - public synchronized InputStream stream(URI toDownload, IProgressMonitor monitor) - throws FileNotFoundException, CoreException, AuthenticationFailedException { + public InputStream stream(URI toDownload, IProgressMonitor monitor) + throws FileNotFoundException, CoreException, AuthenticationFailedException { if (DEBUG_REQUESTS) { logger.debug("Request stream for " + toDownload); }