Author: toad
Date: 2006-04-10 23:00:04 +0000 (Mon, 10 Apr 2006)
New Revision: 8505
Modified:
trunk/freenet/src/freenet/node/FNPPacketMangler.java
trunk/freenet/src/freenet/node/KeyTracker.java
trunk/freenet/src/freenet/node/NodePinger.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/support/UpdatableSortedLinkedListWithForeignIndex.java
Log:
626:
Track ping time by packet acknowledgement, NOT by explicit FNPLinkPing's.
Also better packet size estimation, so fewer oversize packets.
Also use a TimeDecayingRunningAverage rather than a
BootstrappingRunningAverage, so don't need to fiddle with number of packets.
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2006-04-10
20:10:30 UTC (rev 8504)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2006-04-10
23:00:04 UTC (rev 8505)
@@ -864,7 +864,7 @@
}
} else {
- length = 1;
+ length = 56;
int count = 0;
int lastIndex = 0;
for(int i=0;i<=messages.length;i++) {
Modified: trunk/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- trunk/freenet/src/freenet/node/KeyTracker.java 2006-04-10 20:10:30 UTC
(rev 8504)
+++ trunk/freenet/src/freenet/node/KeyTracker.java 2006-04-10 23:00:04 UTC
(rev 8505)
@@ -297,13 +297,17 @@
}
private class QueuedAckRequest extends BaseQueuedResend {
- long initialActiveTime(long now) {
+
+ final long createdTime;
+
+ long initialActiveTime(long now) {
// 500ms after sending packet, send ackrequest
return now + 500;
}
QueuedAckRequest(int packetNumber, boolean sendSoon) {
super(packetNumber);
+ this.createdTime = System.currentTimeMillis();
if(sendSoon) {
activeTime -= 500;
urgentTime -= 500;
@@ -316,6 +320,15 @@
ackRequestQueue.update(this);
}
}
+
+ /**
+ * Acknowledged.
+ */
+ public void onAcked() {
+ long t = Math.max(0, System.currentTimeMillis() -
createdTime);
+ pn.pingAverage.report(t);
+ Logger.minor(this, "Reported round-trip time of "+t+"ms
on "+pn.getPeer());
+ }
}
/**
@@ -522,7 +535,7 @@
* @throws UpdatableSortedLinkedListKilledException
*/
private void removeAckRequest(int seqNo) throws
UpdatableSortedLinkedListKilledException {
- ackRequestQueue.removeByKey(new Integer(seqNo));
+ ((QueuedAckRequest)ackRequestQueue.removeByKey(new
Integer(seqNo))).onAcked();
}
/**
Modified: trunk/freenet/src/freenet/node/NodePinger.java
===================================================================
--- trunk/freenet/src/freenet/node/NodePinger.java 2006-04-10 20:10:30 UTC
(rev 8504)
+++ trunk/freenet/src/freenet/node/NodePinger.java 2006-04-10 23:00:04 UTC
(rev 8505)
@@ -22,26 +22,12 @@
} catch (InterruptedException e) {
// Ignore
}
- PeerNode[] peers = node.peers.connectedPeers;
- if(peers == null) continue;
- recalculateMean(peers);
- for(int i=0;i<peers.length;i++) {
- PeerNode pn = peers[i];
- if(!pn.isConnected())
- continue;
- pn.sendPing();
- recalculateMean(peers);
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- // Ignore
- }
- }
+ recalculateMean(node.peers.connectedPeers);
}
}
/** Recalculate the mean ping time */
- private void recalculateMean(PeerNode[] peers) {
+ void recalculateMean(PeerNode[] peers) {
int peerCount = 0;
double total = 1.0;
for(int i=0;i<peers.length;i++) {
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-04-10 20:10:30 UTC
(rev 8504)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-04-10 23:00:04 UTC
(rev 8505)
@@ -38,6 +38,7 @@
import freenet.support.math.BootstrappingDecayingRunningAverage;
import freenet.support.math.RunningAverage;
import freenet.support.math.SimpleRunningAverage;
+import freenet.support.math.TimeDecayingRunningAverage;
/**
* @author amphibian
@@ -307,8 +308,10 @@
// A SimpleRunningAverage would be a bad choice because it would cause
oscillations.
// So go for a filter.
- pingAverage = new BootstrappingDecayingRunningAverage(1, 0,
Long.MAX_VALUE, 50);
- throttledPacketSendAverage = new
BootstrappingDecayingRunningAverage(1, 0, Long.MAX_VALUE, 50);
+ pingAverage =
+ new TimeDecayingRunningAverage(1, 60000 /* should be
significantly longer than a typical transfer */, 0, Long.MAX_VALUE);
+ throttledPacketSendAverage =
+ new TimeDecayingRunningAverage(1, 60000 /* should be
significantly longer than a typical transfer */, 0, Long.MAX_VALUE);
}
private void randomizeMaxTimeBetweenPacketSends() {
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-04-10 20:10:30 UTC (rev
8504)
+++ trunk/freenet/src/freenet/node/Version.java 2006-04-10 23:00:04 UTC (rev
8505)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 625;
+ private static final int buildNumber = 626;
/** Oldest build of Fred we will talk to */
private static final int lastGoodBuild = 591;
Modified:
trunk/freenet/src/freenet/support/UpdatableSortedLinkedListWithForeignIndex.java
===================================================================
---
trunk/freenet/src/freenet/support/UpdatableSortedLinkedListWithForeignIndex.java
2006-04-10 20:10:30 UTC (rev 8504)
+++
trunk/freenet/src/freenet/support/UpdatableSortedLinkedListWithForeignIndex.java
2006-04-10 23:00:04 UTC (rev 8505)
@@ -46,10 +46,11 @@
* Remove an element from the list by its key.
* @throws UpdatableSortedLinkedListKilledException
*/
- public synchronized void removeByKey(Object key) throws
UpdatableSortedLinkedListKilledException {
+ public synchronized IndexableUpdatableSortedLinkedListItem
removeByKey(Object key) throws UpdatableSortedLinkedListKilledException {
IndexableUpdatableSortedLinkedListItem item =
(IndexableUpdatableSortedLinkedListItem) map.get(key);
if(item != null) remove(item);
checkList();
+ return item;
}
}