From b92ee364bc7a20e9457ec2e05de52f9739cea95e Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 4 Sep 2006 08:26:21 +0000 Subject: [PATCH] (zzz) * i2psnark: Report cleared trackerErr immediately * i2psnark: Add trackerErr reporting after previous success; retry more quickly * i2psnark: Set up new connections more quickly * i2psnark: Don't delay tracker fetch when setting up lots of connections * i2psnark: Reduce MAX_UPLOADERS from 12 to 4 --- .../src/org/klomp/snark/PeerCoordinator.java | 13 +++--- .../src/org/klomp/snark/TrackerClient.java | 40 ++++++++++++++----- history.txt | 9 ++++- .../src/net/i2p/router/RouterVersion.java | 4 +- 4 files changed, 48 insertions(+), 18 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index cafc7bf6a6..154de22beb 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -39,7 +39,7 @@ public class PeerCoordinator implements PeerListener // package local for access by CheckDownLoadersTask final static long CHECK_PERIOD = 20*1000; // 20 seconds final static int MAX_CONNECTIONS = 24; - final static int MAX_UPLOADERS = 12; // i2p: might as well balance it out + final static int MAX_UPLOADERS = 4; // Approximation of the number of current uploaders. // Resynced by PeerChecker once in a while. @@ -154,8 +154,8 @@ public class PeerCoordinator implements PeerListener uploaded_old[i] = uploaded_old[i-1]; downloaded_old[i] = downloaded_old[i-1]; } - uploaded_old[0] = up; - downloaded_old[0] = down; + uploaded_old[0] = up; + downloaded_old[0] = down; } /** @@ -275,12 +275,13 @@ public class PeerCoordinator implements PeerListener return null; } - public void addPeer(final Peer peer) +// returns true if actual attempt to add peer occurs + public boolean addPeer(final Peer peer) { if (halted) { peer.disconnect(false); - return; + return false; } boolean need_more; @@ -305,6 +306,7 @@ public class PeerCoordinator implements PeerListener }; String threadName = peer.toString(); new I2PThread(r, threadName).start(); + return true; } else if (_log.shouldLog(Log.DEBUG)) { @@ -314,6 +316,7 @@ public class PeerCoordinator implements PeerListener _log.info("MAX_CONNECTIONS = " + MAX_CONNECTIONS + " not accepting extra peer: " + peer); } + return false; } diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java index e7a5433d67..6b8135f1f4 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java +++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java @@ -43,6 +43,8 @@ public class TrackerClient extends I2PThread private static final String STOPPED_EVENT = "stopped"; private final static int SLEEP = 5; // 5 minutes. + private final static int DELAY_MIN = 2000; // 2 secs. + private final static int DELAY_MUL = 1500; // 1.5 secs. private final MetaInfo meta; private final PeerCoordinator coordinator; @@ -110,6 +112,7 @@ public class TrackerClient extends I2PThread long left = coordinator.getLeft(); boolean completed = (left == 0); + int sleptTime = 0; try { @@ -117,6 +120,7 @@ public class TrackerClient extends I2PThread boolean started = false; while (!started) { + sleptTime = 0; try { // Send start. @@ -125,18 +129,20 @@ public class TrackerClient extends I2PThread STARTED_EVENT); Set peers = info.getPeers(); coordinator.trackerSeenPeers = peers.size(); + coordinator.trackerProblems = null; if (!completed) { Iterator it = peers.iterator(); while (it.hasNext()) { Peer cur = (Peer)it.next(); coordinator.addPeer(cur); - int delay = 3000; - int c = ((int)cur.getPeerID().getAddress().calculateHash().toBase64().charAt(0)) % 10; - try { Thread.sleep(delay * c); } catch (InterruptedException ie) {} + int delay = DELAY_MUL; + delay *= ((int)cur.getPeerID().getAddress().calculateHash().toBase64().charAt(0)) % 10; + delay += DELAY_MIN; + sleptTime += delay; + try { Thread.sleep(delay); } catch (InterruptedException ie) {} } } started = true; - coordinator.trackerProblems = null; } catch (IOException ioe) { @@ -168,8 +174,15 @@ public class TrackerClient extends I2PThread try { // Sleep some minutes... - int delay = SLEEP*60*1000 + r.nextInt(120*1000); - Thread.sleep(delay); + int delay; + if(coordinator.trackerProblems != null) { + delay = 60*1000; + } else { + delay = SLEEP*60*1000 + r.nextInt(120*1000); + delay -= sleptTime; + } + if (delay > 0) + Thread.sleep(delay); } catch(InterruptedException interrupt) { @@ -206,6 +219,8 @@ public class TrackerClient extends I2PThread uploaded, downloaded, left, event); + coordinator.trackerProblems = null; + sleptTime = 0; Set peers = info.getPeers(); coordinator.trackerSeenPeers = peers.size(); if ( (left > 0) && (!completed) ) { @@ -216,10 +231,14 @@ public class TrackerClient extends I2PThread Iterator it = ordered.iterator(); while (it.hasNext()) { Peer cur = (Peer)it.next(); - coordinator.addPeer(cur); - int delay = 3000; - int c = ((int)cur.getPeerID().getAddress().calculateHash().toBase64().charAt(0)) % 10; - try { Thread.sleep(delay * c); } catch (InterruptedException ie) {} + // only delay if we actually make an attempt to add peer + if(coordinator.addPeer(cur)) { + int delay = DELAY_MUL; + delay *= ((int)cur.getPeerID().getAddress().calculateHash().toBase64().charAt(0)) % 10; + delay += DELAY_MIN; + sleptTime += delay; + try { Thread.sleep(delay); } catch (InterruptedException ie) {} + } } } } @@ -229,6 +248,7 @@ public class TrackerClient extends I2PThread Snark.debug ("WARNING: Could not contact tracker at '" + announce + "': " + ioe, Snark.WARNING); + coordinator.trackerProblems = ioe.getMessage(); } } } diff --git a/history.txt b/history.txt index 1f0aead904..052a2dc3f9 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,11 @@ -$Id: history.txt,v 1.508 2006-09-03 04:12:23 zzz Exp $ +$Id: history.txt,v 1.509 2006-09-04 01:01:54 zzz Exp $ + +2006-09-04 zzz + * i2psnark: Report cleared trackerErr immediately + * i2psnark: Add trackerErr reporting after previous success; retry more quickly + * i2psnark: Set up new connections more quickly + * i2psnark: Don't delay tracker fetch when setting up lots of connections + * i2psnark: Reduce MAX_UPLOADERS from 12 to 4 2006-09-04 zzz * Enable pipelining in i2psnark diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index f87f736a11..95c2859d1a 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -15,9 +15,9 @@ import net.i2p.CoreVersion; * */ public class RouterVersion { - public final static String ID = "$Revision: 1.448 $ $Date: 2006-09-03 04:12:22 $"; + public final static String ID = "$Revision: 1.449 $ $Date: 2006-09-04 01:01:53 $"; public final static String VERSION = "0.6.1.24"; - public final static long BUILD = 7; + public final static long BUILD = 8; public static void main(String args[]) { System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("Router ID: " + RouterVersion.ID);