[MediaWiki-commits] [Gerrit] wikidata...rdf[master]: Properly close HC client in WikibaseRepository

2018-01-03 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/401705 )

Change subject: Properly close HC client in WikibaseRepository
..


Properly close HC client in WikibaseRepository

This could be one of the cause for leaked threads detected in our unit
tests.

Bug: T178721
Change-Id: I882d886382fe73630cfc5d4f372de809e4ddeb29
---
A testTools/src/main/java/org/wikidata/query/rdf/test/CloseableRule.java
M tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
M 
tools/src/main/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepository.java
M 
tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdaterIntegrationTestBase.java
M tools/src/test/java/org/wikidata/query/rdf/tool/RdfRepositoryForTesting.java
M 
tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
6 files changed, 111 insertions(+), 44 deletions(-)

Approvals:
  Smalyshev: Looks good to me, approved
  jenkins-bot: Verified



diff --git 
a/testTools/src/main/java/org/wikidata/query/rdf/test/CloseableRule.java 
b/testTools/src/main/java/org/wikidata/query/rdf/test/CloseableRule.java
new file mode 100644
index 000..6e11979
--- /dev/null
+++ b/testTools/src/main/java/org/wikidata/query/rdf/test/CloseableRule.java
@@ -0,0 +1,48 @@
+package org.wikidata.query.rdf.test;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+
+/**
+ * A {@link TestRule} that will automatically close an object after tests.
+ *
+ * This makes it slightly nicer than having @After methods for each resource to
+ * close. It makes most sense when a test instantiate multiple {@link
+ * AutoCloseable} resources.
+ *
+ * @param 
+ */
+public final class CloseableRule implements TestRule {
+
+private final T closeable;
+
+public static  CloseableRule autoClose(T 
closeable) {
+return new CloseableRule<>(closeable);
+}
+
+private CloseableRule(T closeable) {
+this.closeable = closeable;
+}
+
+public T get() {
+return closeable;
+}
+
+/** {@inheritDoc} */
+@Override
+public Statement apply(final Statement base, Description description) {
+return new Statement() {
+@Override
+public void evaluate() throws Throwable {
+try {
+base.evaluate();
+} finally {
+closeable.close();
+}
+}
+};
+}
+
+}
diff --git a/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java 
b/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
index 9ea247e..5d768ac 100644
--- a/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
+++ b/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
@@ -50,10 +50,11 @@
 public static void main(String[] args) throws Exception {
 RdfRepository rdfRepository = null;
 Updater updater;
+WikibaseRepository wikibaseRepository;
 
 try {
 UpdateOptions options = handleOptions(UpdateOptions.class, args);
-WikibaseRepository wikibaseRepository = 
buildWikibaseRepository(options);
+wikibaseRepository = buildWikibaseRepository(options);
 URI sparqlUri = sparqlUri(options);
 WikibaseUris uris = new WikibaseUris(options.wikibaseHost());
 rdfRepository = new RdfRepository(sparqlUri, uris);
@@ -67,13 +68,15 @@
 }
 throw e;
 }
-try (RdfRepository r = rdfRepository) {
+try (
+WikibaseRepository w = wikibaseRepository;
+RdfRepository r = rdfRepository;
+Updater u = updater
+) {
 updater.run();
 } catch (Exception e) {
 log.error("Error during updater run.", e);
 throw e;
-} finally {
-updater.close();
 }
 }
 
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 eeccbc5..58c3cfb 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
@@ -1,5 +1,6 @@
 package org.wikidata.query.rdf.tool.wikibase;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.InterruptedIOException;
@@ -72,7 +73,7 @@
  */
 // TODO fan out complexity
 @SuppressWarnings("checkstyle:classfanoutcomplexity")
-public class WikibaseRepository {
+public class WikibaseRepository implements Closeable {
 private static final Logger log = 
LoggerFactory.getLogger(WikibaseRepository.class);
 
 /**
@@ -416,6 +417,11 @@
 return name.matches("^[A-Za-z0-9:]+$");
 }
 
+

[MediaWiki-commits] [Gerrit] wikidata...rdf[master]: Properly close HC client in WikibaseRepository

2018-01-03 Thread Gehel (Code Review)
Gehel has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/401705 )

Change subject: Properly close HC client in WikibaseRepository
..

Properly close HC client in WikibaseRepository

This could be one of the cause for leaked threads detected in our unit
tests.

Bug: T178721
Change-Id: I882d886382fe73630cfc5d4f372de809e4ddeb29
---
M tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
M 
tools/src/main/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepository.java
M 
tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdaterIntegrationTestBase.java
M 
tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
4 files changed, 55 insertions(+), 26 deletions(-)


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

diff --git a/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java 
b/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
index 9ea247e..5d768ac 100644
--- a/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
+++ b/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
@@ -50,10 +50,11 @@
 public static void main(String[] args) throws Exception {
 RdfRepository rdfRepository = null;
 Updater updater;
+WikibaseRepository wikibaseRepository;
 
 try {
 UpdateOptions options = handleOptions(UpdateOptions.class, args);
-WikibaseRepository wikibaseRepository = 
buildWikibaseRepository(options);
+wikibaseRepository = buildWikibaseRepository(options);
 URI sparqlUri = sparqlUri(options);
 WikibaseUris uris = new WikibaseUris(options.wikibaseHost());
 rdfRepository = new RdfRepository(sparqlUri, uris);
@@ -67,13 +68,15 @@
 }
 throw e;
 }
-try (RdfRepository r = rdfRepository) {
+try (
+WikibaseRepository w = wikibaseRepository;
+RdfRepository r = rdfRepository;
+Updater u = updater
+) {
 updater.run();
 } catch (Exception e) {
 log.error("Error during updater run.", e);
 throw e;
-} finally {
-updater.close();
 }
 }
 
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 eeccbc5..58c3cfb 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
@@ -1,5 +1,6 @@
 package org.wikidata.query.rdf.tool.wikibase;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.InterruptedIOException;
@@ -72,7 +73,7 @@
  */
 // TODO fan out complexity
 @SuppressWarnings("checkstyle:classfanoutcomplexity")
-public class WikibaseRepository {
+public class WikibaseRepository implements Closeable {
 private static final Logger log = 
LoggerFactory.getLogger(WikibaseRepository.class);
 
 /**
@@ -416,6 +417,11 @@
 return name.matches("^[A-Za-z0-9:]+$");
 }
 
+@Override
+public void close() throws IOException {
+client.close();
+}
+
 /**
  * URIs used for accessing wikibase.
  */
diff --git 
a/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdaterIntegrationTestBase.java
 
b/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdaterIntegrationTestBase.java
index 22bf8eb..c49cca4 100644
--- 
a/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdaterIntegrationTestBase.java
+++ 
b/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdaterIntegrationTestBase.java
@@ -1,10 +1,12 @@
 package org.wikidata.query.rdf.tool;
 
+import java.io.IOException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import org.junit.After;
 import org.junit.Rule;
 import org.junit.runner.RunWith;
 import org.wikidata.query.rdf.common.uri.WikibaseUris;
@@ -37,6 +39,11 @@
 public RdfRepositoryForTesting rdfRepository = new 
RdfRepositoryForTesting("wdq");
 
 
+@After
+public void closeWikibaseRepository() throws IOException {
+wikibaseRepository.close();
+}
+
 /**
  * Update all ids from from to to.
  */
diff --git 
a/tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
 
b/tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
index bf4c887..865db7b 100644
--- 
a/tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
+++