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 <smalyshev@wikimedia.org>
_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
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 <smalyshev@wikimedia.org>
_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits