[tor-commits] [metrics-web/release] Make Database AutoCloseable and use try-with-resource.

karsten at torproject.org karsten at torproject.org
Wed May 30 13:45:11 UTC 2018


commit bad6542772eacfd57b7030df417f845f2aa74583
Author: iwakeh <iwakeh at torproject.org>
Date:   Wed Dec 20 13:06:49 2017 +0000

    Make Database AutoCloseable and use try-with-resource.
---
 .../metrics/stats/ipv6servers/Database.java        |   6 +-
 .../torproject/metrics/stats/ipv6servers/Main.java | 109 ++++++++++-----------
 2 files changed, 54 insertions(+), 61 deletions(-)

diff --git a/src/main/java/org/torproject/metrics/stats/ipv6servers/Database.java b/src/main/java/org/torproject/metrics/stats/ipv6servers/Database.java
index c334263..401bdb7 100644
--- a/src/main/java/org/torproject/metrics/stats/ipv6servers/Database.java
+++ b/src/main/java/org/torproject/metrics/stats/ipv6servers/Database.java
@@ -20,7 +20,7 @@ import java.util.TimeZone;
 
 /** Database wrapper to connect to the database, insert data, run the stored
  * procedure for aggregating data, and query aggregated data as output. */
-class Database {
+class Database implements AutoCloseable {
 
   /** Database connection string. */
   private String jdbcString;
@@ -210,8 +210,8 @@ class Database {
     return statistics;
   }
 
-  /** Disconnect from the database. */
-  void disconnect() throws SQLException {
+  /** Release database connection. */
+  public void close() throws SQLException {
     this.connection.close();
   }
 }
diff --git a/src/main/java/org/torproject/metrics/stats/ipv6servers/Main.java b/src/main/java/org/torproject/metrics/stats/ipv6servers/Main.java
index 81433c0..508d73e 100644
--- a/src/main/java/org/torproject/metrics/stats/ipv6servers/Main.java
+++ b/src/main/java/org/torproject/metrics/stats/ipv6servers/Main.java
@@ -35,72 +35,65 @@ public class Main {
     File historyFile = new File(Configuration.history);
     reader.setHistoryFile(historyFile);
     Parser parser = new Parser();
-    Database database = new Database(Configuration.database);
-    try {
-      for (Descriptor descriptor : reader.readDescriptors(
-          new File(Configuration.descriptors
-              + "recent/relay-descriptors/consensuses"),
-          new File(Configuration.descriptors
-              + "recent/relay-descriptors/server-descriptors"),
-          new File(Configuration.descriptors
-              + "recent/bridge-descriptors/statuses"),
-          new File(Configuration.descriptors
-              + "recent/bridge-descriptors/server-descriptors"),
-          new File(Configuration.descriptors
-              + "archive/relay-descriptors/consensuses"),
-          new File(Configuration.descriptors
-              + "archive/relay-descriptors/server-descriptors"),
-          new File(Configuration.descriptors
-              + "archive/bridge-descriptors/statuses"),
-          new File(Configuration.descriptors
-              + "archive/bridge-descriptors/server-descriptors"))) {
-        if (descriptor instanceof ServerDescriptor) {
-          database.insertServerDescriptor(parser.parseServerDescriptor(
-              (ServerDescriptor) descriptor));
-        } else if (descriptor instanceof RelayNetworkStatusConsensus) {
-          database.insertStatus(parser.parseRelayNetworkStatusConsensus(
-              (RelayNetworkStatusConsensus) descriptor));
-        } else if (descriptor instanceof BridgeNetworkStatus) {
-          database.insertStatus(parser.parseBridgeNetworkStatus(
-              (BridgeNetworkStatus) descriptor));
-        } else {
-          log.debug("Skipping unknown descriptor of type {}.",
-              descriptor.getClass());
+    try (Database database = new Database(Configuration.database)) {
+      try {
+        for (Descriptor descriptor : reader.readDescriptors(
+            new File(Configuration.descriptors
+                + "recent/relay-descriptors/consensuses"),
+            new File(Configuration.descriptors
+                + "recent/relay-descriptors/server-descriptors"),
+            new File(Configuration.descriptors
+                + "recent/bridge-descriptors/statuses"),
+            new File(Configuration.descriptors
+                + "recent/bridge-descriptors/server-descriptors"),
+            new File(Configuration.descriptors
+                + "archive/relay-descriptors/consensuses"),
+            new File(Configuration.descriptors
+                + "archive/relay-descriptors/server-descriptors"),
+            new File(Configuration.descriptors
+                + "archive/bridge-descriptors/statuses"),
+            new File(Configuration.descriptors
+                + "archive/bridge-descriptors/server-descriptors"))) {
+          if (descriptor instanceof ServerDescriptor) {
+            database.insertServerDescriptor(parser.parseServerDescriptor(
+                (ServerDescriptor) descriptor));
+          } else if (descriptor instanceof RelayNetworkStatusConsensus) {
+            database.insertStatus(parser.parseRelayNetworkStatusConsensus(
+                (RelayNetworkStatusConsensus) descriptor));
+          } else if (descriptor instanceof BridgeNetworkStatus) {
+            database.insertStatus(parser.parseBridgeNetworkStatus(
+                (BridgeNetworkStatus) descriptor));
+          } else {
+            log.debug("Skipping unknown descriptor of type {}.",
+                descriptor.getClass());
+          }
         }
-      }
 
-      log.info("Aggregating database entries.");
-      database.aggregate();
+        log.info("Aggregating database entries.");
+        database.aggregate();
 
-      log.info("Committing all updated parts in the database.");
-      database.commit();
-    } catch (SQLException sqle) {
-      log.error("Cannot recover from SQL exception while inserting or "
-          + "aggregating data. Rolling back and exiting.", sqle);
-      database.rollback();
-      database.disconnect();
-      return;
-    }
-    reader.saveHistoryFile(historyFile);
+        log.info("Committing all updated parts in the database.");
+        database.commit();
+      } catch (SQLException sqle) {
+        log.error("Cannot recover from SQL exception while inserting or "
+            + "aggregating data. Rolling back and exiting.", sqle);
+        database.rollback();
+        return;
+      }
+      reader.saveHistoryFile(historyFile);
 
-    log.info("Querying aggregated statistics from the database.");
-    Iterable<OutputLine> output;
-    try {
-      output = database.queryServersIpv6();
+      log.info("Querying aggregated statistics from the database.");
+      Iterable<OutputLine> output = database.queryServersIpv6();
+      log.info("Writing aggregated statistics to {}.", Configuration.output);
+      if (null != output) {
+        new Writer().write(Paths.get(Configuration.output), output);
+      }
+
+      log.info("Terminating ipv6servers module.");
     } catch (SQLException sqle) {
       log.error("Cannot recover from SQL exception while querying. Not writing "
           + "output file.", sqle);
-      return;
-    } finally {
-      database.disconnect();
-    }
-
-    log.info("Writing aggregated statistics to {}.", Configuration.output);
-    if (null != output) {
-      new Writer().write(Paths.get(Configuration.output), output);
     }
-
-    log.info("Terminating ipv6servers module.");
   }
 }
 





More information about the tor-commits mailing list