diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java index a6b48271a8..a47348231a 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java @@ -431,6 +431,7 @@ public class PeerHelper extends HelperBase { long resentTotal = 0; long dupRecvTotal = 0; int numPeers = 0; + int numRTTPeers = 0; StringBuilder buf = new StringBuilder(512); buf.append("

").append(_t("UDP connections")).append(": ").append(peers.size()); @@ -593,7 +594,10 @@ public class PeerHelper extends HelperBase { int rto = peer.getRTO(); buf.append(""); - buf.append(DataHelper.formatDuration2(rtt)); + if (rtt > 0) + buf.append(DataHelper.formatDuration2(rtt)); + else + buf.append("n/a"); buf.append(""); //buf.append(""); @@ -651,7 +655,10 @@ public class PeerHelper extends HelperBase { uptimeMsTotal += uptime; cwinTotal += sendWindow; - rttTotal += rtt; + if (rtt > 0) { + rttTotal += rtt; + numRTTPeers++; + } rtoTotal += rto; sendTotal += sent; @@ -679,7 +686,10 @@ public class PeerHelper extends HelperBase { buf.append(cwinTotal/(numPeers*1024) + "K"); buf.append(" \n" + ""); - buf.append(DataHelper.formatDuration2(rttTotal/numPeers)); + if (numRTTPeers > 0) + buf.append(DataHelper.formatDuration2(rttTotal/numRTTPeers)); + else + buf.append("n/a"); //buf.append(" "); buf.append(""); buf.append(DataHelper.formatDuration2(rtoTotal/numPeers)); diff --git a/history.txt b/history.txt index f29a49c509..95285592e5 100644 --- a/history.txt +++ b/history.txt @@ -1,5 +1,11 @@ +2019-02-26 zzz + * SSU: + - Fix scheduling of peer test at startup (ticket #2441) + - Fix RTT/RTO calculations (ticket #2443) + 2019-02-25 zzz * NetDB: Fix dup publish of RI at startup + * NTCP: Fix number of SendFinisher threads (ticket #2438) 2019-02-23 zzz * Console: Flip order of router logs diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 7ca1a3ec2c..5a58b19bc2 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 = 10; + public final static long BUILD = 11; /** for example "-test" */ public final static String EXTRA = ""; diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState.java b/router/java/src/net/i2p/router/transport/udp/PeerState.java index 8bedd2ff38..da7edc2b16 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState.java @@ -1237,14 +1237,11 @@ public class PeerState { if (_rtt <= 0) { // first measurement _rtt = (int) lifetime; - _rttDeviation = (int)(lifetime / 2); + _rttDeviation = _rtt / 2; } else { // the rttDev calculation matches that recommended in RFC 2988 (beta = 1/4) - _rttDeviation = (int)( 0.75*_rttDeviation + 0.25*Math.abs(lifetime-_rtt) ); - - float scale = RTT_DAMPENING; - - _rtt = (int)(_rtt*(1.0f-scale) + (scale)*lifetime); + _rttDeviation = (int)((0.75 * _rttDeviation) + (0.25 * Math.abs(lifetime - _rtt))); + _rtt = (int)((_rtt * (1.0f - RTT_DAMPENING)) + (RTT_DAMPENING * lifetime)); } // K = 4 _rto = Math.min(MAX_RTO, Math.max(minRTO(), _rtt + (_rttDeviation<<2)));