Author: toad
Date: 2007-11-27 18:03:06 +0000 (Tue, 27 Nov 2007)
New Revision: 15978
Modified:
trunk/freenet/src/freenet/io/AddressTracker.java
trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
trunk/freenet/src/freenet/support/SimpleFieldSet.java
Log:
Restore the table from disk
Modified: trunk/freenet/src/freenet/io/AddressTracker.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTracker.java 2007-11-27 17:58:04 UTC
(rev 15977)
+++ trunk/freenet/src/freenet/io/AddressTracker.java 2007-11-27 18:03:06 UTC
(rev 15978)
@@ -15,11 +15,15 @@
*/
package freenet.io;
+import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.util.HashMap;
@@ -51,14 +55,41 @@
private long timeDefinitelyNoPacketsReceived;
private long timeDefinitelyNoPacketsSent;
- public AddressTracker() {
+ public static AddressTracker create(long lastBootID, File nodeDir, int
port) {
+ File data = new File(nodeDir, "packets-"+port+".dat");
+ File dataBak = new File(nodeDir, "packets-"+port+".bak");
+ dataBak.delete();
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(data);
+ BufferedInputStream bis = new BufferedInputStream(fis);
+ InputStreamReader ir = new InputStreamReader(bis,
"UTF-8");
+ BufferedReader br = new BufferedReader(ir);
+ SimpleFieldSet fs = new SimpleFieldSet(br, false, true);
+ return new AddressTracker(fs, lastBootID);
+ } catch (IOException e) {
+ // Fall through
+ } catch (FSParseException e) {
+ // Fall through
+ } finally {
+ if(fis != null)
+ try {
+ fis.close();
+ } catch (IOException e) {
+ // Ignore
+ }
+ }
+ return new AddressTracker();
+ }
+
+ private AddressTracker() {
timeDefinitelyNoPacketsReceived = System.currentTimeMillis();
timeDefinitelyNoPacketsSent = System.currentTimeMillis();
peerTrackers = new HashMap();
ipTrackers = new HashMap();
}
- public AddressTracker(SimpleFieldSet fs, long lastBootID) throws
FSParseException {
+ private AddressTracker(SimpleFieldSet fs, long lastBootID) throws
FSParseException {
int version = fs.getInt("Version");
if(version != 1)
throw new FSParseException("Unknown Version "+version);
Modified: trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java 2007-11-27
17:58:04 UTC (rev 15977)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java 2007-11-27
18:03:06 UTC (rev 15978)
@@ -64,7 +64,7 @@
// Only used for debugging, no need to seed from Yarrow
dropRandom = new Random();
logMINOR = Logger.shouldLog(Logger.MINOR, this);
- tracker = new AddressTracker();
+ tracker = AddressTracker.create(node.lastBootID,
node.getNodeDir(), listenPort);
tracker.startSend(startupTime);
}
Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SimpleFieldSet.java 2007-11-27
17:58:04 UTC (rev 15977)
+++ trunk/freenet/src/freenet/support/SimpleFieldSet.java 2007-11-27
18:03:06 UTC (rev 15978)
@@ -2,6 +2,7 @@
import java.io.BufferedInputStream;
import java.io.BufferedReader;
+import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
@@ -469,6 +470,16 @@
return fs.subset(after);
}
+ /**
+ * Like subset(), only throws instead of returning null.
+ * @throws FSParseException
+ */
+ public synchronized SimpleFieldSet getSubset(String key) throws
FSParseException {
+ SimpleFieldSet fs = subset(key);
+ if(fs == null) throw new FSParseException("No such subset
"+key);
+ return fs;
+ }
+
public Iterator keyIterator() {
return new KeyIterator("");
}
@@ -841,4 +852,10 @@
putOverwrite(key, unsplit(strings));
}
+ public String getString(String key) throws FSParseException {
+ String s = get(key);
+ if(s == null) throw new FSParseException("No such element
"+key);
+ return s;
+ }
+
}