I've worked on this sort of timing issues ... below a certain level,
it's not worth it; java just produces random delays sometimes... at
least with as many threads as we use...

On Sun, Jun 18, 2006 at 05:35:33PM +0000, zothar at freenetproject.org wrote:
> Author: zothar
> Date: 2006-06-18 17:35:22 +0000 (Sun, 18 Jun 2006)
> New Revision: 9303
> 
> Modified:
>    trunk/freenet/src/freenet/crypt/DiffieHellman.java
>    trunk/freenet/src/freenet/node/FNPPacketMangler.java
>    trunk/freenet/src/freenet/node/PeerNode.java
> Log:
> More time and complaint.  A few logging and other minor tweaks.
> 
> Modified: trunk/freenet/src/freenet/crypt/DiffieHellman.java
> ===================================================================
> --- trunk/freenet/src/freenet/crypt/DiffieHellman.java        2006-06-18 
> 16:36:39 UTC (rev 9302)
> +++ trunk/freenet/src/freenet/crypt/DiffieHellman.java        2006-06-18 
> 17:35:22 UTC (rev 9303)
> @@ -9,6 +9,7 @@
>  import java.util.Random;
>  import java.util.Stack;
>  
> +import freenet.support.Logger;
>  import net.i2p.util.NativeBigInteger;
>  
>  public class DiffieHellman {
> @@ -97,13 +98,18 @@
>               }
>       }
>  
> -    /**
> -     * Create a DiffieHellmanContext. This will include this side's DH 
> params.
> -     */
> -    public static DiffieHellmanContext generateContext() {
> -        NativeBigInteger[] params = getParams();
> -        return new DiffieHellmanContext(params[0], params[1], group);
> -    }
> +     /**
> +      * Create a DiffieHellmanContext. This will include this side's DH 
> params.
> +      */
> +     public static DiffieHellmanContext generateContext() {
> +             long time1 = System.currentTimeMillis();
> +             NativeBigInteger[] params = getParams();
> +             long time2 = System.currentTimeMillis();
> +             if((time2 - time1) > 300) {
> +                     Logger.error(null, "DiffieHellman.generateContext(): 
> time2 is more than 300ms after time1 ("+(time2 - time1)+")");
> +             }
> +             return new DiffieHellmanContext(params[0], params[1], group);
> +     }
>       
>       public static NativeBigInteger[] getParams() {
>               synchronized (precalcBuffer) {
> 
> Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/FNPPacketMangler.java      2006-06-18 
> 16:36:39 UTC (rev 9302)
> +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java      2006-06-18 
> 17:35:22 UTC (rev 9303)
> @@ -310,6 +310,7 @@
>       * @param replyTo
>       */
>      private void sendFirstHalfDHPacket(int phase, NativeBigInteger integer, 
> PeerNode pn, Peer replyTo) {
> +        long time1 = System.currentTimeMillis();
>          Logger.minor(this, "Sending ("+phase+") "+integer.toHexString()+" to 
> "+pn.getPeer());
>          byte[] data = integer.toByteArray();
>          int targetLength = DiffieHellman.modulusLengthInBytes();
> @@ -326,19 +327,32 @@
>              data = newData;
>          }
>          Logger.minor(this, "Processed: "+HexUtil.bytesToHex(data));
> +        long time2 = System.currentTimeMillis();
> +        if((time2 - time1) > 200) {
> +          Logger.error(this, "sendFirstHalfDHPacket: time2 is more than 
> 200ms after time1 ("+(time2 - time1)+") working on "+replyTo+" of 
> "+pn.getName());
> +        }
>          sendAuthPacket(1, 0, phase, data, pn, replyTo);
> +        long time3 = System.currentTimeMillis();
> +        if((time3 - time2) > 500) {
> +          Logger.error(this, "sendFirstHalfDHPacket:sendAuthPacket() time3 
> is more than half a second after time2 ("+(time3 - time2)+") working on 
> "+replyTo+" of "+pn.getName());
> +        }
> +        if((time3 - time1) > 500) {
> +          Logger.error(this, "sendFirstHalfDHPacket: time3 is more than half 
> a second after time1 ("+(time3 - time1)+") working on "+replyTo+" of 
> "+pn.getName());
> +        }
>      }
>  
>      /**
>       * Send an auth packet.
>       */
>      private void sendAuthPacket(int version, int negType, int phase, byte[] 
> data, PeerNode pn, Peer replyTo) {
> +        long now = System.currentTimeMillis();
> +        int delta = (int) (now - pn.lastSentPacketTime());
>          byte[] output = new byte[data.length+3];
>          output[0] = (byte) version;
>          output[1] = (byte) negType;
>          output[2] = (byte) phase;
>          System.arraycopy(data, 0, output, 3, data.length);
> -        Logger.minor(this, "Sending auth packet ("+version+","+negType+" to 
> "+replyTo+" - version="+version+" negType="+negType+" phase="+phase+" 
> data.length="+data.length+" for "+pn);
> +        Logger.minor(this, "Sending auth packet ("+version+","+negType+" to 
> "+replyTo+" - version="+version+" negType="+negType+" phase="+phase+" 
> data.length="+data.length+" for "+pn.getPeer()+" (last packet sent 
> "+delta+"ms ago)");
>          sendAuthPacket(output, pn, replyTo);
>      }
>  
> @@ -1292,23 +1306,23 @@
>          handshakeIPs = pn.getHandshakeIPs();
>          long secondTime = System.currentTimeMillis();
>          if((secondTime - firstTime) > 1000)
> -            Logger.normal(this, "getHandshakeIPs() took more than a second 
> to execute ("+(secondTime - firstTime)+") working on "+pn.getName());
> +            Logger.error(this, "getHandshakeIPs() took more than a second to 
> execute ("+(secondTime - firstTime)+") working on "+pn.getName());
>          if(handshakeIPs.length == 0) {
>              pn.couldNotSendHandshake();
>              long thirdTime = System.currentTimeMillis();
>              if((thirdTime - secondTime) > 1000)
> -                Logger.normal(this, "couldNotSendHandshake() (after 
> getHandshakeIPs()) took more than a second to execute ("+(thirdTime - 
> secondTime)+") working on "+pn.getName());
> +                Logger.error(this, "couldNotSendHandshake() (after 
> getHandshakeIPs()) took more than a second to execute ("+(thirdTime - 
> secondTime)+") working on "+pn.getName());
>              return;
>          } else {
>              long DHTime1 = System.currentTimeMillis();
>              ctx = DiffieHellman.generateContext();
>              long DHTime2 = System.currentTimeMillis();
>              if((DHTime2 - DHTime1) > 1000)
> -                Logger.normal(this, "DHTime2 is more than a second after 
> DHTime1 ("+(DHTime2 - DHTime1)+") working on "+pn.getName());
> +                Logger.error(this, "DHTime2 is more than a second after 
> DHTime1 ("+(DHTime2 - DHTime1)+") working on "+pn.getName());
>              pn.setDHContext(ctx);
>              long DHTime3 = System.currentTimeMillis();
>              if((DHTime3 - DHTime2) > 1000)
> -                Logger.normal(this, "DHTime3 is more than a second after 
> DHTime2 ("+(DHTime3 - DHTime2)+") working on "+pn.getName());
> +                Logger.error(this, "DHTime3 is more than a second after 
> DHTime2 ("+(DHTime3 - DHTime2)+") working on "+pn.getName());
>          }
>          int sentCount = 0;
>          long loopTime1 = System.currentTimeMillis();
> 
> Modified: trunk/freenet/src/freenet/node/PeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/PeerNode.java      2006-06-18 16:36:39 UTC 
> (rev 9302)
> +++ trunk/freenet/src/freenet/node/PeerNode.java      2006-06-18 17:35:22 UTC 
> (rev 9303)
> @@ -556,7 +556,7 @@
>        */
>      public void maybeUpdateHandshakeIPs(boolean ignoreHostnames) {
>       long now = System.currentTimeMillis();
> -     if((now - lastAttemptedHandshakeIPUpdateTime) < (5*60*1000)) {
> +     if((now - lastAttemptedHandshakeIPUpdateTime) < (5*60*1000)) {  // 5 
> minutes
>               //Logger.minor(this, "Looked up recently (detectedPeer = 
> "+detectedPeer + " : "+((detectedPeer == null) ? "" : 
> detectedPeer.getAddress(false).toString()));
>               return;  // 5 minutes FIXME
>       }
> @@ -628,7 +628,7 @@
>                       detectedPeer = detectedDuplicate;
>               }
>       }
> -     Logger.minor(this, "3: detectedPeer = "+detectedPeer+" 
> ("+detectedPeer.getAddress(false));
> +     Logger.minor(this, "3: detectedPeer = "+detectedPeer+" 
> ("+detectedPeer.getAddress(false)+")");
>       Logger.minor(this, "3: maybeUpdateHandshakeIPs got a result of: 
> "+handshakeIPsToString());
>       return;
>      }
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> 

-- 
Matthew J Toseland - toad at amphibian.dyndns.org
Freenet Project Official Codemonkey - http://freenetproject.org/
ICTHUS - Nothing is impossible. Our Boss says so.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: 
<https://emu.freenetproject.org/pipermail/cvs/attachments/20060620/4b33e00f/attachment.pgp>

Reply via email to