[MediaWiki-commits] [Gerrit] wikidata...rdf[master]: Properly close HC client in WikibaseRepository
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
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 +++