jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/370228 )

Change subject: Cleanup initialization to use exception instead of null checks.
......................................................................


Cleanup initialization to use exception instead of null checks.

This removes a bit of logic, and replace it with 2 exception handlers, which
will log and rethrow any problem during initilization or at runtime.

Change-Id: I647a27792e6238ce592fc36afb44ba09e7e81471
---
M tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
1 file changed, 68 insertions(+), 30 deletions(-)

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



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 9973412..676864c 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
@@ -43,35 +43,77 @@
      * Run updates configured from the command line.
      * @throws Exception on error
      */
+    // Catching exception is OK in a main exception handler, more so since the
+    // exception is rethrown
+    @SuppressWarnings("checkstyle:IllegalCatch")
     public static void main(String[] args) throws Exception {
-        UpdateOptions options = handleOptions(UpdateOptions.class, args);
-        WikibaseRepository wikibaseRepository = 
buildWikibaseRepository(options);
-        if (wikibaseRepository == null) {
-            return;
+        RdfRepository rdfRepository = null;
+        Updater<? extends Change.Batch> updater;
+
+        try {
+            UpdateOptions options = handleOptions(UpdateOptions.class, args);
+            WikibaseRepository wikibaseRepository = 
buildWikibaseRepository(options);
+            URI sparqlUri = sparqlUri(options);
+            WikibaseUris uris = new WikibaseUris(options.wikibaseHost());
+            rdfRepository = new RdfRepository(sparqlUri, uris);
+            Change.Source<? extends Change.Batch> changeSource = 
buildChangeSource(options, rdfRepository,
+                    wikibaseRepository);
+            updater = createUpdater(options, wikibaseRepository, uris, 
rdfRepository, changeSource);
+        } catch (Exception e) {
+            log.error("Error during initialization.", e);
+            if (rdfRepository != null) {
+                rdfRepository.close();
+            }
+            throw e;
         }
+        try (RdfRepository r = rdfRepository) {
+            updater.run();
+        } catch (Exception e) {
+            log.error("Error during updater run.", e);
+            throw e;
+        }
+    }
+
+    /**
+     * Create an @{link Updater}.
+     *
+     * @param options
+     * @param wikibaseRepository
+     * @param uris
+     * @param rdfRepository
+     * @param changeSource
+     * @return a newly created updater
+     */
+    private static Updater<? extends Change.Batch> createUpdater(
+            UpdateOptions options,
+            WikibaseRepository wikibaseRepository,
+            WikibaseUris uris,
+            RdfRepository rdfRepository,
+            Change.Source<? extends Change.Batch> changeSource) {
+        int threads = options.threadCount();
+        ThreadFactoryBuilder threadFactory = new 
ThreadFactoryBuilder().setDaemon(true).setNameFormat("update %s");
+        ExecutorService executor = new ThreadPoolExecutor(threads, threads, 0, 
TimeUnit.SECONDS,
+                new LinkedBlockingQueue<>(), threadFactory.build());
+
+        Munger munger = mungerFromOptions(options);
+        return new Updater<>(changeSource, wikibaseRepository, rdfRepository, 
munger, executor,
+                options.pollDelay(), uris, options.verify());
+    }
+
+    /**
+     * Create the sparql URI from the given configuration.
+     *
+     * @param options
+     * @return a newly created sparql URI
+     */
+    private static URI sparqlUri(UpdateOptions options) {
         URI sparqlUri;
         try {
             sparqlUri = new URI(options.sparqlUrl());
         } catch (URISyntaxException e) {
-            log.error("Invalid url:  " + options.sparqlUrl(), e);
-            return;
+            throw new IllegalArgumentException("Invalid url:  " + 
options.sparqlUrl(), e);
         }
-        WikibaseUris uris = new WikibaseUris(options.wikibaseHost());
-        try (RdfRepository rdfRepository = new RdfRepository(sparqlUri, uris)) 
{
-            Change.Source<? extends Change.Batch> changeSource = 
buildChangeSource(options, rdfRepository,
-                    wikibaseRepository);
-            if (changeSource == null) {
-                return;
-            }
-            int threads = options.threadCount();
-            ThreadFactoryBuilder threadFactory = new 
ThreadFactoryBuilder().setDaemon(true).setNameFormat("update %s");
-            ExecutorService executor = new ThreadPoolExecutor(threads, 
threads, 0, TimeUnit.SECONDS,
-                    new LinkedBlockingQueue<Runnable>(), 
threadFactory.build());
-
-            Munger munger = mungerFromOptions(options);
-            new Updater<>(changeSource, wikibaseRepository, rdfRepository, 
munger, executor,
-                options.pollDelay(), uris, options.verify()).run();
-        }
+        return sparqlUri;
     }
 
     /**
@@ -101,8 +143,7 @@
                 end = Long.parseLong(ids[1]);
                 break;
             default:
-                log.error("Invalid format for --idrange.  Need 
<start>-<stop>.");
-                return null;
+                throw new IllegalArgumentException("Invalid format for 
--idrange.  Need <start>-<stop>.");
             }
             return IdRangeChangeSource.forItems(start, end, 
options.batchSize());
         }
@@ -126,8 +167,7 @@
                 try {
                     startTime = 
inputDateFormat().parse(options.start()).getTime();
                 } catch (java.text.ParseException e2) {
-                    log.error("Invalid date:  {}", options.start());
-                    return null;
+                    throw  new IllegalArgumentException("Invalid date: " + 
options.start(), e2);
                 }
             }
         } else {
@@ -139,9 +179,8 @@
                 log.info("Defaulting start time to 30 days ago:  {}", 
inputDateFormat().format(new Date(startTime)));
             } else {
                 if (leftOff.getTime() < minStartTime) {
-                    log.error("RDF store reports the last update time is 
before the minimum safe poll time.  "
+                    throw new IllegalStateException("RDF store reports the 
last update time is before the minimum safe poll time.  "
                             + "You will have to reload from scratch or you 
might have missing data.");
-                    return null;
                 }
                 startTime = leftOff.getTime();
                 log.info("Found start time in the RDF store: {}", 
inputDateFormat().format(leftOff));
@@ -168,8 +207,7 @@
                 longEntityNamespaces[i] = 
Long.parseLong(strEntityNamespaces[i]);
             }
         } catch (NumberFormatException e) {
-            log.error("Invalid value for --entityNamespaces. Namespace index 
should be an integer.", e);
-            return null;
+            throw new IllegalArgumentException("Invalid value for 
--entityNamespaces. Namespace index should be an integer.", e);
         }
         return new WikibaseRepository(options.wikibaseScheme(), 
options.wikibaseHost(), 0, longEntityNamespaces);
     }

-- 
To view, visit https://gerrit.wikimedia.org/r/370228
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I647a27792e6238ce592fc36afb44ba09e7e81471
Gerrit-PatchSet: 4
Gerrit-Project: wikidata/query/rdf
Gerrit-Branch: master
Gerrit-Owner: 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

Reply via email to