mirror of
https://github.com/Athou/commafeed.git
synced 2026-11-03 02:44:47 +00:00
add a global failsafe timeout to the feed fetching client
This commit is contained in:
@@ -54,6 +54,8 @@ import java.time.InstantSource;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
/** Smart HTTP getter: handles gzip, ssl, last modified, and etag headers */
|
/** Smart HTTP getter: handles gzip, ssl, last modified, and etag headers */
|
||||||
@Singleton
|
@Singleton
|
||||||
@@ -191,7 +193,13 @@ public class HttpGetter {
|
|||||||
client.execute(req, resp, context, callback);
|
client.execute(req, resp, context, callback);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Message<org.apache.hc.core5.http.HttpResponse, byte[]> message = future.get();
|
Duration totalTimeout =
|
||||||
|
config.httpClient()
|
||||||
|
.connectTimeout()
|
||||||
|
.plus(config.httpClient().sslHandshakeTimeout())
|
||||||
|
.plus(config.httpClient().responseTimeout());
|
||||||
|
Message<org.apache.hc.core5.http.HttpResponse, byte[]> message =
|
||||||
|
future.get(totalTimeout.toSeconds(), TimeUnit.SECONDS);
|
||||||
|
|
||||||
byte[] content = message.getBody();
|
byte[] content = message.getBody();
|
||||||
int code = message.getHead().getCode();
|
int code = message.getHead().getCode();
|
||||||
@@ -245,7 +253,11 @@ public class HttpGetter {
|
|||||||
future.cancel(true);
|
future.cancel(true);
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
throw new RuntimeException("interrupted while fetching " + request.getUrl(), e);
|
throw new RuntimeException("interrupted while fetching " + request.getUrl(), e);
|
||||||
|
} catch (TimeoutException e) {
|
||||||
|
future.cancel(true);
|
||||||
|
throw new IOException("timed out while fetching " + request.getUrl(), e);
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
|
future.cancel(true);
|
||||||
throw Lombok.sneakyThrow(e.getCause());
|
throw Lombok.sneakyThrow(e.getCause());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user