[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [collector/master] Make some minor optimizations to bridgedescs code.



commit 47a4c7a962de55ee8354c1c8605216965f68d116
Author: Karsten Loesing <karsten.loesing@xxxxxxx>
Date:   Mon Nov 30 22:45:22 2020 +0100

    Make some minor optimizations to bridgedescs code.
    
    Part of #20542.
---
 .../collector/bridgedescs/DescriptorBuilder.java   |  3 ++
 .../bridgedescs/SanitizedBridgesWriter.java        | 62 ++++++++++------------
 2 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/src/main/java/org/torproject/metrics/collector/bridgedescs/DescriptorBuilder.java b/src/main/java/org/torproject/metrics/collector/bridgedescs/DescriptorBuilder.java
index b4b63e7..946fcdb 100644
--- a/src/main/java/org/torproject/metrics/collector/bridgedescs/DescriptorBuilder.java
+++ b/src/main/java/org/torproject/metrics/collector/bridgedescs/DescriptorBuilder.java
@@ -96,4 +96,7 @@ class DescriptorBuilder {
     return value;
   }
 
+  public byte[] toBytes() {
+    return this.toString().getBytes();
+  }
 }
diff --git a/src/main/java/org/torproject/metrics/collector/bridgedescs/SanitizedBridgesWriter.java b/src/main/java/org/torproject/metrics/collector/bridgedescs/SanitizedBridgesWriter.java
index 843aa40..77ab406 100644
--- a/src/main/java/org/torproject/metrics/collector/bridgedescs/SanitizedBridgesWriter.java
+++ b/src/main/java/org/torproject/metrics/collector/bridgedescs/SanitizedBridgesWriter.java
@@ -79,14 +79,10 @@ public class SanitizedBridgesWriter extends CollecTorMain {
 
   private String rsyncCatString;
 
-  private Path inputDirectory;
-
   private Path outputDirectory;
 
   private Path recentDirectory;
 
-  private Path statsDirectory;
-
   private SensitivePartsSanitizer sensitivePartsSanitizer;
 
   @Override
@@ -106,8 +102,8 @@ public class SanitizedBridgesWriter extends CollecTorMain {
         .resolve(BRIDGE_DESCRIPTORS);
     this.recentDirectory = config.getPath(Key.RecentPath)
         .resolve(BRIDGE_DESCRIPTORS);
-    this.inputDirectory = config.getPath(Key.BridgeLocalOrigins);
-    this.statsDirectory = config.getPath(Key.StatsPath);
+    Path inputDirectory = config.getPath(Key.BridgeLocalOrigins);
+    Path statsDirectory = config.getPath(Key.StatsPath);
     boolean replaceIpAddressesWithHashes =
         config.getBool(Key.ReplaceIpAddressesWithHashes);
     SimpleDateFormat rsyncCatFormat = new SimpleDateFormat(
@@ -126,7 +122,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
     }
 
     // Import bridge descriptors
-    this.readBridgeSnapshots(this.inputDirectory, this.statsDirectory);
+    this.readBridgeSnapshots(inputDirectory, statsDirectory);
 
     // Finish writing sanitized bridge descriptors to disk
     if (replaceIpAddressesWithHashes) {
@@ -362,11 +358,16 @@ public class SanitizedBridgesWriter extends CollecTorMain {
     }
 
     /* Parse the given network status line by line. */
-    DescriptorBuilder header = new DescriptorBuilder();
     boolean includesFingerprintLine = false;
-    SortedMap<String, String> scrubbedLines = new TreeMap<>();
+    DescriptorBuilder scrubbed = new DescriptorBuilder();
+    scrubbed.append(Annotation.Status.toString());
+    SortedMap<String, String> scrubbedEntries = new TreeMap<>();
+    StringBuilder publishedStringBuilder = new StringBuilder();
+    scrubbed.append("published ").append(publishedStringBuilder).newLine();
+    DescriptorBuilder header = new DescriptorBuilder();
+    scrubbed.append(header);
+
     try {
-      DescriptorBuilder scrubbed = new DescriptorBuilder();
       BufferedReader br = new BufferedReader(new StringReader(new String(
           data, StandardCharsets.US_ASCII)));
       String line;
@@ -374,6 +375,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
       byte[] fingerprintBytes = null;
       String descPublicationTime = null;
       String hashedBridgeIdentityHex = null;
+      DescriptorBuilder scrubbedEntry = new DescriptorBuilder();
       while ((line = br.readLine()) != null) {
 
         /* Use publication time from "published" line instead of the
@@ -403,10 +405,10 @@ public class SanitizedBridgesWriter extends CollecTorMain {
         } else if (line.startsWith("r ")) {
 
           /* Clear buffer from previously scrubbed lines. */
-          if (scrubbed.hasContent()) {
-            String scrubbedLine = scrubbed.toString();
-            scrubbedLines.put(hashedBridgeIdentityHex, scrubbedLine);
-            scrubbed = new DescriptorBuilder();
+          if (scrubbedEntry.hasContent()) {
+            scrubbedEntries.put(hashedBridgeIdentityHex,
+                scrubbedEntry.toString());
+            scrubbedEntry = new DescriptorBuilder();
           }
 
           /* Parse the relevant parts of this r line. */
@@ -452,7 +454,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
               orPort, fingerprintBytes, descPublicationTime);
           String scrubbedDirPort = this.sensitivePartsSanitizer.scrubTcpPort(
               dirPort, fingerprintBytes, descPublicationTime);
-          scrubbed.append("r ").append(nickname).space()
+          scrubbedEntry.append("r ").append(nickname).space()
               .append(hashedBridgeIdentityBase64).space()
               .append(hashedDescriptorIdentifier).space()
               .append(descPublicationTime).space()
@@ -467,7 +469,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
               .scrubOrAddress(line.substring("a ".length()), fingerprintBytes,
               descPublicationTime);
           if (scrubbedOrAddress != null) {
-            scrubbed.append("a ").append(scrubbedOrAddress).newLine();
+            scrubbedEntry.append("a ").append(scrubbedOrAddress).newLine();
           } else {
             logger.warn("Invalid address in line '{}' "
                 + "in bridge network status.  Skipping line!", line);
@@ -477,7 +479,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
         } else if (line.startsWith("s ") || line.equals("s")
             || line.startsWith("w ") || line.equals("w")
             || line.startsWith("p ") || line.equals("p")) {
-          scrubbed.append(line).newLine();
+          scrubbedEntry.append(line).newLine();
 
         /* There should be nothing else but r, a, w, p, and s lines in the
          * network status.  If there is, we should probably learn before
@@ -489,9 +491,8 @@ public class SanitizedBridgesWriter extends CollecTorMain {
         }
       }
       br.close();
-      if (scrubbed.hasContent()) {
-        String scrubbedLine = scrubbed.toString();
-        scrubbedLines.put(hashedBridgeIdentityHex, scrubbedLine);
+      if (scrubbedEntry.hasContent()) {
+        scrubbedEntries.put(hashedBridgeIdentityHex, scrubbedEntry.toString());
       }
       if (!includesFingerprintLine) {
         header.append("fingerprint ").append(authorityFingerprint).newLine();
@@ -523,6 +524,10 @@ public class SanitizedBridgesWriter extends CollecTorMain {
     }
 
     /* Write the sanitized network status to disk. */
+    publishedStringBuilder.append(publicationTime);
+    for (String scrubbedEntry : scrubbedEntries.values()) {
+      scrubbed.append(scrubbedEntry);
+    }
     try {
       String syear = publicationTime.substring(0, 4);
       String smonth = publicationTime.substring(5, 7);
@@ -536,18 +541,9 @@ public class SanitizedBridgesWriter extends CollecTorMain {
           Paths.get(syear, smonth, "statuses", sday, fileName));
       Path rsyncFile = this.recentDirectory.resolve(
           Paths.get("statuses", fileName));
-      Path[] outputFiles = new Path[] { tarballFile, rsyncFile };
-      for (Path outputFile : outputFiles) {
+      for (Path outputFile : new Path[] { tarballFile, rsyncFile }) {
         Files.createDirectories(outputFile.getParent());
-        StringBuilder sanitizedStatus = new StringBuilder();
-        sanitizedStatus.append(Annotation.Status.toString());
-        sanitizedStatus.append("published ").append(publicationTime)
-            .append("\n");
-        sanitizedStatus.append(header.toString());
-        for (String scrubbed : scrubbedLines.values()) {
-          sanitizedStatus.append(scrubbed);
-        }
-        Files.write(outputFile, sanitizedStatus.toString().getBytes());
+        Files.write(outputFile, scrubbed.toBytes());
       }
     } catch (IOException e) {
       logger.warn("Could not write sanitized bridge "
@@ -922,7 +918,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
           break;
         }
         Files.createDirectories(outputFile.getParent());
-        Files.write(outputFile, scrubbed.toString().getBytes(), openOption);
+        Files.write(outputFile, scrubbed.toBytes(), openOption);
       }
     } catch (IOException e) {
       logger.warn("Could not write sanitized server descriptor to disk.", e);
@@ -1185,7 +1181,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
           break;
         }
         Files.createDirectories(outputFile.getParent());
-        Files.write(outputFile, scrubbed.toString().getBytes(), openOption);
+        Files.write(outputFile, scrubbed.toBytes(), openOption);
       }
     } catch (IOException e) {
       logger.warn("Could not write sanitized extra-info descriptor to disk.",



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits