Smalyshev has uploaded a new change for review. ( 
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, 25 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikidata/query/rdf 
refs/changes/25/405825/1

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..b05dd51 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;
@@ -78,6 +79,14 @@
 public class WikibaseRepository implements Closeable {
     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.
      */
@@ -236,8 +245,10 @@
             throws RetryableException {
         URI uri = uris.recentChanges(nextStartTime, lastContinue, batchSize);
         log.debug("Polling for changes from {}", uri);
+        HttpGet request = new HttpGet(uri);
+        request.setConfig(getRequestConfig());
         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);
@@ -247,6 +258,18 @@
         } catch (IOException e) {
             throw new RetryableException("Error fetching recent changes", e);
         }
+    }
+
+    /**
+     * Get request configuration.
+     * @return request configuration
+     */
+    private RequestConfig getRequestConfig() {
+        int timeout = Integer.parseInt(System.getProperty(TIMEOUT_PROPERTY, 
TIMEOUT_MILLIS));
+        return RequestConfig.custom()
+                .setSocketTimeout(timeout)
+                .setConnectTimeout(timeout)
+                .setConnectionRequestTimeout(timeout).build();
     }
 
     /**
@@ -264,6 +287,7 @@
         StatementCollector collector = new StatementCollector();
         parser.setRDFHandler(new NormalizingRdfHandler(collector));
         HttpGet request = new HttpGet(uri);
+        request.setConfig(getRequestConfig());
         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: newchange
Gerrit-Change-Id: Ib027a457a10a268ed365b11390cf03308bcb7b84
Gerrit-PatchSet: 1
Gerrit-Project: wikidata/query/rdf
Gerrit-Branch: master
Gerrit-Owner: Smalyshev <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to