jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/405825 )
Change subject: Add timeout to Wikibase requests ...................................................................... Add timeout to Wikibase requests Bug: T179239 Change-Id: Ib027a457a10a268ed365b11390cf03308bcb7b84 --- M tools/src/main/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepository.java 1 file changed, 26 insertions(+), 1 deletion(-) Approvals: Smalyshev: Looks good to me, approved jenkins-bot: Verified Gehel: Looks good to me, but someone else must approve diff --git a/tools/src/main/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepository.java b/tools/src/main/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepository.java index b7d3e16..ae1a703 100644 --- a/tools/src/main/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepository.java +++ b/tools/src/main/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepository.java @@ -30,6 +30,7 @@ import org.apache.http.NameValuePair; import org.apache.http.client.HttpRequestRetryHandler; import org.apache.http.client.ServiceUnavailableRetryStrategy; +import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -79,6 +80,14 @@ private static final Logger log = LoggerFactory.getLogger(WikibaseRepository.class); /** + * Timeout for communications to Wikidata, in ms. + */ + private static final String TIMEOUT_MILLIS = "5000"; + /** + * Request timeout property. + */ + public static final String TIMEOUT_PROPERTY = WikibaseRepository.class + ".timeout"; + /** * How many retries allowed on error. */ private static final int RETRIES = 3; @@ -104,6 +113,19 @@ .setUserAgent("Wikidata Query Service Updater") .build(); + /** + * Configured timeout for requests. + */ + private final int requestTimeout = Integer + .parseInt(System.getProperty(TIMEOUT_PROPERTY, TIMEOUT_MILLIS)); + + /** + * Request configuration including timeout. + */ + private final RequestConfig configWithTimeout = RequestConfig.custom() + .setSocketTimeout(requestTimeout) + .setConnectTimeout(requestTimeout) + .setConnectionRequestTimeout(requestTimeout).build(); /** * Builds uris to get stuff from wikibase. */ @@ -236,8 +258,10 @@ throws RetryableException { URI uri = uris.recentChanges(nextStartTime, lastContinue, batchSize); log.debug("Polling for changes from {}", uri); + HttpGet request = new HttpGet(uri); + request.setConfig(configWithTimeout); try { - return checkApi(getJson(new HttpGet(uri), RecentChangeResponse.class)); + return checkApi(getJson(request, RecentChangeResponse.class)); } catch (UnknownHostException | SocketException e) { // We want to bail on this, since it happens to be sticky for some reason throw new RuntimeException(e); @@ -264,6 +288,7 @@ StatementCollector collector = new StatementCollector(); parser.setRDFHandler(new NormalizingRdfHandler(collector)); HttpGet request = new HttpGet(uri); + request.setConfig(configWithTimeout); try { try (CloseableHttpResponse response = client.execute(request)) { if (response.getStatusLine().getStatusCode() == 404) { -- To view, visit https://gerrit.wikimedia.org/r/405825 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ib027a457a10a268ed365b11390cf03308bcb7b84 Gerrit-PatchSet: 2 Gerrit-Project: wikidata/query/rdf Gerrit-Branch: master Gerrit-Owner: Smalyshev <smalys...@wikimedia.org> Gerrit-Reviewer: Gehel <guillaume.leder...@wikimedia.org> Gerrit-Reviewer: Smalyshev <smalys...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits