* i2psnark: Fix DHT nodes not being saved at shutdown

Log infohashes in hex
             Don't write out nodes if we don't have any
This commit is contained in:
zzz
2012-08-11 11:23:27 +00:00
parent d2a5595df2
commit a6a0228ef8
4 changed files with 25 additions and 4 deletions

View File

@ -37,6 +37,8 @@ import net.i2p.util.SecureFileOutputStream;
import net.i2p.util.SimpleScheduler;
import net.i2p.util.SimpleTimer;
import org.klomp.snark.dht.DHT;
/**
* Manage multiple snarks
*/
@ -1752,6 +1754,9 @@ public class SnarkManager implements Snark.CompleteListener {
}
if (_util.connected()) {
if (count > 0) {
DHT dht = _util.getDHT();
if (dht != null)
dht.stop();
// Schedule this even for final shutdown, as there's a chance
// that it's just this webapp that is stopping.
_context.simpleScheduler().addEvent(new Disconnector(), 60*1000);

View File

@ -4,6 +4,7 @@ package org.klomp.snark.dht;
*/
import net.i2p.crypto.SHA1Hash;
import org.klomp.snark.I2PSnarkUtil;
/**
* A 20-byte SHA1 info hash
@ -16,4 +17,13 @@ class InfoHash extends SHA1Hash {
public InfoHash(byte[] data) {
super(data);
}
@Override
public String toString() {
if (_data == null) {
return super.toString();
} else {
return "[InfoHash: " + I2PSnarkUtil.toHex(_data) + ']';
}
}
}

View File

@ -176,8 +176,6 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
_dhtFile = new File(ctx.getConfigDir(), DHT_FILE);
_knownNodes = new DHTNodes(ctx, _myNID);
session.addMuxedSessionListener(this, I2PSession.PROTO_DATAGRAM_RAW, _rPort);
session.addMuxedSessionListener(this, I2PSession.PROTO_DATAGRAM, _qPort);
start();
}
@ -517,7 +515,11 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* Loads the DHT from file.
* Can't be restarted after stopping?
*/
public void start() {
public synchronized void start() {
if (_isRunning)
return;
session.addMuxedSessionListener(this, I2PSession.PROTO_DATAGRAM_RAW, _rPort);
session.addMuxedSessionListener(this, I2PSession.PROTO_DATAGRAM, _qPort);
_knownNodes.start();
_tracker.start();
PersistDHT.loadDHT(this, _dhtFile);
@ -536,7 +538,9 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
/**
* Stop everything.
*/
public void stop() {
public synchronized void stop() {
if (!_isRunning)
return;
_isRunning = false;
// FIXME stop the explore thread
// unregister port listeners

View File

@ -56,6 +56,8 @@ abstract class PersistDHT {
}
public static synchronized void saveDHT(DHTNodes nodes, File file) {
if (nodes.isEmpty())
return;
Log log = I2PAppContext.getGlobalContext().logManager().getLog(PersistDHT.class);
int count = 0;
long maxAge = I2PAppContext.getGlobalContext().clock().now() - MAX_AGE;