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