[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [ernie/master 2/2] Keep history of imported relay descriptors.
Author: Karsten Loesing <karsten.loesing@xxxxxxx>
Date: Mon, 29 Mar 2010 12:30:40 +0200
Subject: Keep history of imported relay descriptors.
Commit: 3b4a9cd679a6ca707bc7c3b829a92694f47122e0
---
config | 6 ++++++
src/ArchiveReader.java | 42 ++++++++++++++++++++++++++++++++++++++++--
src/Configuration.java | 7 +++++++
src/Main.java | 3 ++-
4 files changed, 55 insertions(+), 3 deletions(-)
diff --git a/config b/config
index caf304f..e208ffc 100644
--- a/config
+++ b/config
@@ -55,6 +55,12 @@
## Import directory archives from disk, if available
#ImportDirectoryArchives 1
+## Keep a history of imported directory archive files to know which files
+## have been imported before. This history can be useful when importing
+## from a changing source to avoid importing descriptors over and over
+## again, but it can be confusing to users who don't know about it.
+#KeepDirectoryArchiveImportHistory 0
+
## Write relay descriptors to a database for later evaluation
#WriteRelayDescriptorDatabase 0
diff --git a/src/ArchiveReader.java b/src/ArchiveReader.java
index cebf919..7c55c41 100644
--- a/src/ArchiveReader.java
+++ b/src/ArchiveReader.java
@@ -8,8 +8,26 @@ import org.apache.commons.compress.compressors.bzip2.*;
* them to the relay descriptor parser.
*/
public class ArchiveReader {
- public ArchiveReader(RelayDescriptorParser rdp, String archivesDir) {
+ public ArchiveReader(RelayDescriptorParser rdp, String archivesDir,
+ boolean keepImportHistory) {
Logger logger = Logger.getLogger(ArchiveReader.class.getName());
+ SortedSet<String> archivesImportHistory = new TreeSet<String>();
+ File archivesImportHistoryFile =
+ new File("stats/archives-import-history");
+ if (keepImportHistory && archivesImportHistoryFile.exists()) {
+ try {
+ BufferedReader br = new BufferedReader(new FileReader(
+ archivesImportHistoryFile));
+ String line = null;
+ while ((line = br.readLine()) != null) {
+ archivesImportHistory.add(line);
+ }
+ br.close();
+ } catch (IOException e) {
+ logger.log(Level.WARNING, "Could not read in archives import "
+ + "history file. Skipping.");
+ }
+ }
if (new File(archivesDir).exists()) {
logger.fine("Importing files in directory " + archivesDir
+ "/...");
@@ -27,7 +45,10 @@ public class ArchiveReader {
try {
BufferedInputStream bis = null;
System.out.println(pop.getName());
- if (pop.getName().endsWith("\\.tar\\.bz2")) {
+ if (keepImportHistory &&
+ archivesImportHistory.contains(pop.getName())) {
+ continue;
+ } else if (pop.getName().endsWith(".tar.bz2")) {
logger.warning("Cannot parse compressed tarball "
+ pop.getAbsolutePath() + ". Skipping.");
continue;
@@ -40,6 +61,9 @@ public class ArchiveReader {
FileInputStream fis = new FileInputStream(pop);
bis = new BufferedInputStream(fis);
}
+ if (keepImportHistory) {
+ archivesImportHistory.add(pop.getName());
+ }
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len;
byte[] data = new byte[1024];
@@ -74,6 +98,20 @@ public class ArchiveReader {
}
}
}
+ if (keepImportHistory) {
+ try {
+ archivesImportHistoryFile.getParentFile().mkdirs();
+ BufferedWriter bw = new BufferedWriter(new FileWriter(
+ archivesImportHistoryFile));
+ for (String line : archivesImportHistory) {
+ bw.write(line + "\n");
+ }
+ bw.close();
+ } catch (IOException e) {
+ logger.log(Level.WARNING, "Could not write archives import "
+ + "history file.");
+ }
+ }
}
}
diff --git a/src/Configuration.java b/src/Configuration.java
index 6f6a854..7c27139 100644
--- a/src/Configuration.java
+++ b/src/Configuration.java
@@ -25,6 +25,7 @@ public class Configuration {
private boolean writeDirectoryArchives = false;
private boolean importCachedRelayDescriptors = true;
private boolean importDirectoryArchives = true;
+ private boolean keepDirectoryArchiveImportHistory = false;
private boolean writeRelayDescriptorDatabase = false;
private String relayDescriptorDatabaseJdbc = "jdbc:postgresql:tordir?"
+ "user=ernie&password=password";
@@ -93,6 +94,9 @@ public class Configuration {
} else if (line.startsWith("ImportDirectoryArchives")) {
this.importDirectoryArchives = Integer.parseInt(
line.split(" ")[1]) != 0;
+ } else if (line.startsWith("KeepDirectoryArchiveImportHistory")) {
+ this.keepDirectoryArchiveImportHistory = Integer.parseInt(
+ line.split(" ")[1]) != 0;
} else if (line.startsWith("WriteRelayDescriptorDatabase")) {
this.writeRelayDescriptorDatabase = Integer.parseInt(
line.split(" ")[1]) != 0;
@@ -203,6 +207,9 @@ public class Configuration {
public boolean getImportDirectoryArchives() {
return this.importDirectoryArchives;
}
+ public boolean getKeepDirectoryArchiveImportHistory() {
+ return this.keepDirectoryArchiveImportHistory;
+ }
public boolean getWriteRelayDescriptorDatabase() {
return this.writeRelayDescriptorDatabase;
}
diff --git a/src/Main.java b/src/Main.java
index 53a4187..8a2ee06 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -81,7 +81,8 @@ public class Main {
new CachedRelayDescriptorReader(rdp);
}
if (config.getImportDirectoryArchives()) {
- new ArchiveReader(rdp, "archives");
+ new ArchiveReader(rdp, "archives",
+ config.getKeepDirectoryArchiveImportHistory());
}
if (rdd != null) {
rdd.downloadMissingDescriptors();
--
1.6.5