diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
index ae74bfd60..8efd2332b 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
@@ -87,7 +87,10 @@ public class PeerCoordinator implements PeerListener
setWantedPieces();
// Install a timer to check the uploaders.
- timer.schedule(new PeerCheckerTask(this), CHECK_PERIOD, CHECK_PERIOD);
+ // Randomize the first start time so multiple tasks are spread out,
+ // this will help the behavior with global limits
+ Random r = new Random();
+ timer.schedule(new PeerCheckerTask(this), (CHECK_PERIOD / 2) + r.nextInt((int) CHECK_PERIOD), CHECK_PERIOD);
}
// only called externally from Storage after the double-check fails
@@ -192,6 +195,15 @@ public class PeerCoordinator implements PeerListener
return getRate(uploaded_old);
}
+ public long getCurrentUploadRate()
+ {
+ // no need to synchronize, only one value
+ long r = uploaded_old[0];
+ if (r <= 0)
+ return 0;
+ return (r * 1000) / CHECK_PERIOD;
+ }
+
private long getRate(long array[])
{
long rate = 0;
diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java
index 07d2dbd87..f0fd66eaf 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java
@@ -785,9 +785,10 @@ public class Snark
for (Iterator iter = coordinators.iterator(); iter.hasNext(); ) {
PeerCoordinator c = (PeerCoordinator)iter.next();
if (!c.halted())
- total += c.getUploadRate();
+ total += c.getCurrentUploadRate();
}
long limit = 1024l * I2PSnarkUtil.instance().getMaxUpBW();
+ Snark.debug("Total up bw: " + total + " Limit: " + limit, Snark.WARNING);
return total > limit;
}
}
diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index 30b51aad7..559405277 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -119,7 +119,7 @@ public class SnarkManager implements Snark.CompleteListener {
_config.setProperty(PROP_UPLOADERS_TOTAL, "" + Snark.MAX_TOTAL_UPLOADERS);
if (!_config.containsKey(PROP_UPBW_MAX)) {
if (_context instanceof RouterContext)
- _config.setProperty(PROP_UPBW_MAX, "" + (((RouterContext)_context).bandwidthLimiter().getOutboundKBytesPerSecond() / 3));
+ _config.setProperty(PROP_UPBW_MAX, "" + (((RouterContext)_context).bandwidthLimiter().getOutboundKBytesPerSecond() / 2));
else
_config.setProperty(PROP_UPBW_MAX, "" + DEFAULT_MAX_UP_BW);
}
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 484edf085..31592877f 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -703,7 +703,7 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("Total uploader limit: peers
\n");
out.write("Up bandwidth limit: KBps (Router Up BW / 3 recommended)
\n");
+ + I2PSnarkUtil.instance().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" /> KBps (Router Up BW / 2 recommended)
\n");
out.write("Use open trackers also:
-2008-02-05: Upgrading from 0.6.1.30 and Earlier Releases
-
-Full instructions are posted at -www.i2p2.i2p/upgrade-0.6.1.30.html. +2008-02-05: Upgrading from 0.6.1.30 and Earlier Releases