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;
     }
 }


Reply via email to