From 4d3561c92af7c0d4aeff03f27518c3ad1855f023 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 19 Jul 2020 14:45:48 +0000 Subject: [PATCH] i2psnark: Increase max pipeline, negotiate actual value --- .../org/klomp/snark/CoordinatorListener.java | 4 +-- .../src/org/klomp/snark/ExtensionHandler.java | 2 +- .../java/src/org/klomp/snark/Peer.java | 31 +++++++++++++++++-- .../java/src/org/klomp/snark/PeerState.java | 15 +++++---- history.txt | 13 +++++++- .../src/net/i2p/router/RouterVersion.java | 2 +- 6 files changed, 53 insertions(+), 14 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/CoordinatorListener.java b/apps/i2psnark/java/src/org/klomp/snark/CoordinatorListener.java index 88395f6790..6f500497eb 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/CoordinatorListener.java +++ b/apps/i2psnark/java/src/org/klomp/snark/CoordinatorListener.java @@ -43,12 +43,12 @@ interface CoordinatorListener public boolean overUploadLimit(int uploaders); /** - * Are we currently over the upstream bandwidth limit? + * Is i2psnark as a whole over its limit? */ public boolean overUpBWLimit(); /** - * Is the total (in Bps) over the upstream bandwidth limit? + * Is a particular peer who has this recent download rate (in Bps) over our upstream bandwidth limit? */ public boolean overUpBWLimit(long total); diff --git a/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java b/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java index 3e12cb637b..3baa444228 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java +++ b/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java @@ -68,7 +68,7 @@ abstract class ExtensionHandler { handshake.put("m", m); handshake.put("p", Integer.valueOf(TrackerClient.PORT)); handshake.put("v", "I2PSnark"); - handshake.put("reqq", Integer.valueOf(5)); + handshake.put("reqq", Integer.valueOf(PeerState.MAX_PIPELINE)); // BEP 21 if (uploadOnly) handshake.put("upload_only", Integer.valueOf(1)); diff --git a/apps/i2psnark/java/src/org/klomp/snark/Peer.java b/apps/i2psnark/java/src/org/klomp/snark/Peer.java index bc75afc376..580d61bafe 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Peer.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Peer.java @@ -38,6 +38,7 @@ import net.i2p.data.Destination; import net.i2p.util.Log; import org.klomp.snark.bencode.BEValue; +import org.klomp.snark.bencode.InvalidBEncodingException; public class Peer implements Comparable { @@ -92,6 +93,7 @@ public class Peer implements Comparable private long options; private final boolean _isIncoming; private int _totalCommentsSent; + private int _maxPipeline = PeerState.MIN_PIPELINE; /** * Outgoing connection. @@ -428,9 +430,30 @@ public class Peer implements Comparable return handshakeMap; } - /** @since 0.8.4 */ + /** + * @param map non-null + * @since 0.8.4 + */ public void setHandshakeMap(Map map) { handshakeMap = map; + BEValue bev = map.get("reqq"); + if (bev != null) { + try { + int reqq = bev.getInt(); + _maxPipeline = Math.min(PeerState.MAX_PIPELINE, Math.max(PeerState.MIN_PIPELINE, reqq)); + } catch (InvalidBEncodingException ibee) {} + } else { + // BEP 10 "The default in libtorrent is 250" + _maxPipeline = PeerState.MAX_PIPELINE; + } + } + + /** + * @return min of PeerState.MIN_PIPELINE, max of PeerState.MAX_PIPELINE + * @since 0.9.47 + */ + public int getMaxPipeline() { + return _maxPipeline; } /** @since 0.8.4 */ @@ -644,7 +667,8 @@ public class Peer implements Comparable /** * Returns the number of bytes that have been downloaded. - * Can be reset to zero with resetCounters()/ + * Can be reset to zero with resetCounters() + * which is called every CHECK_PERIOD by PeerCheckerTask. */ public long getDownloaded() { @@ -653,7 +677,8 @@ public class Peer implements Comparable /** * Returns the number of bytes that have been uploaded. - * Can be reset to zero with resetCounters()/ + * Can be reset to zero with resetCounters() + * which is called every CHECK_PERIOD by PeerCheckerTask. */ public long getUploaded() { diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java index 9f6b9a65b1..f8899c8769 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java @@ -69,9 +69,12 @@ class PeerState implements DataLoader private Request lastRequest = null; // FIXME if piece size < PARTSIZE, pipeline could be bigger - private final static int MAX_PIPELINE = 5; // this is for outbound requests - private final static int MAX_PIPELINE_BYTES = 128*1024; // this is for inbound requests + /** @since 0.9.47 */ + public static final int MIN_PIPELINE = 5; // this is for outbound requests + /** @since public since 0.9.47 */ + public static final int MAX_PIPELINE = 8; // this is for outbound requests public final static int PARTSIZE = 16*1024; // outbound request + private final static int MAX_PIPELINE_BYTES = (MAX_PIPELINE + 2) * PARTSIZE; // this is for inbound requests private final static int MAX_PARTSIZE = 64*1024; // Don't let anybody request more than this private static final Integer PIECE_ALL = Integer.valueOf(-1); @@ -259,9 +262,9 @@ class PeerState implements DataLoader if (bev != null) { try { if (bev.getMap().get(ExtensionHandler.TYPE_COMMENT) != null) { - if (_log.shouldLog(Log.WARN)) - _log.warn("Allowing seed that connects to seeds for comments: " + peer); - setInteresting(interest); + if (_log.shouldDebug()) + _log.debug("Allowing seed that connects to seeds for comments: " + peer); + setInteresting(false); return; } } catch (InvalidBEncodingException ibee) {} @@ -880,7 +883,7 @@ class PeerState implements DataLoader boolean more_pieces = true; while (more_pieces) { - more_pieces = outstandingRequests.size() < MAX_PIPELINE; + more_pieces = outstandingRequests.size() < peer.getMaxPipeline(); // We want something and we don't have outstanding requests? if (more_pieces && lastRequest == null) { // we have nothing in the queue right now diff --git a/history.txt b/history.txt index f5c98c5dec..25df71e5a1 100644 --- a/history.txt +++ b/history.txt @@ -1,5 +1,16 @@ +2020-07-19 zzz + * i2psnark: Increase max pipeline, negotiate actual value + +2020-07-11 zzz + * NTCP: Atomics for NTCP final state (ticket #2701) + * OCMOSJ: Don't lookup an expiring LS2 if unpublished + +2020-07-07 zzz + * i2psnark: Change ETA default sort order (ticket #2733) + * Reseed: Enforce minimum version in generated bundle + 2020-07-02 zzz - * i2ptunnel: Fix missing throttling section for non-HTTP servers + * i2ptunnel: Fix missing throttling section for non-HTTP servers (ticket #2758) 2020-06-28 zzz * NetDB: Check signature in verify diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index fecba78d69..a6204817e3 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 7; + public final static long BUILD = 8; /** for example "-test" */ public final static String EXTRA = "";