Author: zothar
Date: 2006-05-30 02:19:36 +0000 (Tue, 30 May 2006)
New Revision: 8945

Modified:
   trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java
   trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
   trunk/freenet/src/freenet/node/DNSRequester.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Get the order and semantics of DNS requests sorted out.  Explicitly don't do 
DNS requests in anywhere we shouldn't in the code (hopefully I didn't miss 
something).  Don't do DNS requests until the second cycle through DNSRequests 
after startup (which may improve startup performance).  Various DNS related 
tweaks and cleanups.

Modified: trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java   2006-05-30 
01:08:59 UTC (rev 8944)
+++ trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java   2006-05-30 
02:19:36 UTC (rev 8945)
@@ -161,7 +161,7 @@
                if (_address != null) {
                        return _address;
                } else {
-                       if(doDNSRequest == false) return null;
+                       if(!doDNSRequest) return null;
                        InetAddress addr = getHandshakeAddress();
                        if( addr != null ) {
                                this._address = addr;

Modified: trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketManager.java     2006-05-30 
01:08:59 UTC (rev 8944)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketManager.java     2006-05-30 
02:19:36 UTC (rev 8945)
@@ -471,7 +471,7 @@
      * @param destination The peer to send it to.
      */
     public void sendPacket(byte[] blockToSend, Peer destination) {
-               if( destination.getAddress() == null ) {
+               if( destination.getAddress(false) == null ) {
                     Logger.error(this, "Tried sending to bad destination 
address: null:" + destination.getPort());
                     return;
                }
@@ -482,7 +482,7 @@
                        }
                }
                DatagramPacket packet = new DatagramPacket(blockToSend, 
blockToSend.length);
-               packet.setAddress(destination.getAddress());
+               packet.setAddress(destination.getAddress(false));
                packet.setPort(destination.getPort());

                // TODO: keep?

Modified: trunk/freenet/src/freenet/node/DNSRequester.java
===================================================================
--- trunk/freenet/src/freenet/node/DNSRequester.java    2006-05-30 01:08:59 UTC 
(rev 8944)
+++ trunk/freenet/src/freenet/node/DNSRequester.java    2006-05-30 02:19:36 UTC 
(rev 8945)
@@ -12,6 +12,7 @@
     final Thread myThread;
     final Node node;
     private long lastLogTime = 0;
+    private boolean firstCycle = true;

     DNSRequester(Node node) {
         this.node = node;
@@ -60,10 +61,10 @@
             if(!pn.isConnected()) {
                 // Not connected
                 // Try new DNS lookup
-                // **FIXME** Logger.normal(this, "Calling 
myabeUpdateHandshakeIPs() for peer '"+pn.getPeer()+"' named 
'"+pn.getName()+"'");
-                pn.maybeUpdateHandshakeIPs();
+                pn.maybeUpdateHandshakeIPs(firstCycle);
             }
         }
+        firstCycle = false;
         try {
             synchronized(this) {
                 wait(200);  // sleep 200ms

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-05-30 01:08:59 UTC (rev 
8944)
+++ trunk/freenet/src/freenet/node/Node.java    2006-05-30 02:19:36 UTC (rev 
8945)
@@ -626,7 +626,8 @@
                if(myOldPeer.getPort() != portNumber)
                        throw new IllegalArgumentException("Wrong port number "+
                                        myOldPeer.getPort()+" should be 
"+portNumber);
-               oldIPAddress = myOldPeer.getAddress();
+               // DNSRequester doesn't deal with our own node
+               oldIPAddress = myOldPeer.getAddress(true);
         }
         String identity = fs.get("identity");
         if(identity == null)
@@ -2056,7 +2057,8 @@
                        for(int i=0;i<peerList.length;i++) {
                                Peer p = peerList[i].getRemoteDetectedPeer();
                                if(p == null || p.isNull()) continue;
-                               InetAddress ip = p.getAddress();
+                               // DNSRequester doesn't deal with our own node
+                               InetAddress ip = p.getAddress(true);
                                if(!IPUtil.checkAddress(ip)) continue;
                                if(countsByPeer.containsKey(ip)) {
                                        Integer count = (Integer) 
countsByPeer.get(ip);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-05-30 01:08:59 UTC 
(rev 8944)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-05-30 02:19:36 UTC 
(rev 8945)
@@ -478,7 +478,7 @@
                }
                toOutputString.append("'");
                // Actually do the DNS request for the member Peer of 
localHandshakeIPs
-               
toOutputString.append(localHandshakeIPs[i].getHandshakeAddress());
+               toOutputString.append(localHandshakeIPs[i].getAddress(false));
                toOutputString.append("'");
                needSep = true;
         }
@@ -486,14 +486,20 @@
        return toOutputString.toString();
     }

-    public void maybeUpdateHandshakeIPs() {
-      long now = System.currentTimeMillis();
-      if((now - lastAttemptedHandshakeIPUpdateTime) < 5*60*1000) return;  // 5 
minutes
-      lastAttemptedHandshakeIPUpdateTime = now;
-      Logger.normal(this, "Updating handshake IPs for peer '"+getPeer()+"' 
named '"+myName+"'");
-    
-       Peer[] p=null;
-       
+    /**
+      * Do occasional DNS requests, but ignoreHostnames should be true
+      * for the first cycle through the peers by DNSRequester at node
+      * startup (faster startup time if we know some IPs already)
+      */
+    public void maybeUpdateHandshakeIPs(boolean ignoreHostnames) {
+       long now = System.currentTimeMillis();
+       if((now - lastAttemptedHandshakeIPUpdateTime) < (5*60*1000)) return;  
// 5 minutes
+       // We want to come back right away for DNS requesting if this is our 
first time through
+       if(!ignoreHostnames)
+               lastAttemptedHandshakeIPUpdateTime = now;
+       Logger.normal(this, "Updating handshake IPs for peer '"+getPeer()+"' 
named '"+myName+"' ("+ignoreHostnames+")");
+       Peer[] localHandshakeIPs;
+       Peer[] p = null;
        Peer[] myNominalPeer;

        // Don't synchronize while doing lookups which may take a long time!
@@ -503,14 +509,26 @@

        if(myNominalPeer.length == 0) {
                if(detectedPeer == null) {
+                       localHandshakeIPs = null;
                        synchronized(this) {
-                               handshakeIPs = null;
+                               handshakeIPs = localHandshakeIPs;
                        }
                        Logger.normal(this, "1: maybeUpdateHandshakeIPs got a 
result of: "+handshakeIPsToString());
                        return;
                }
+               localHandshakeIPs = new Peer[] { detectedPeer };
+               for(int i=0;i<localHandshakeIPs.length;i++) {
+                       if(ignoreHostnames) {
+                               // Don't do a DNS request on the first cycle 
through PeerNodes by DNSRequest
+                               // upon startup (I suspect the following won't 
do anything, but just in case)
+                               localHandshakeIPs[i].getAddress(false);
+                       } else {
+                               // Actually do the DNS request for the member 
Peer of localHandshakeIPs
+                               localHandshakeIPs[i].getHandshakeAddress();
+                       }
+               }
                synchronized(this) {
-                       handshakeIPs = new Peer[] { detectedPeer };
+                       handshakeIPs = localHandshakeIPs;
                }
                Logger.normal(this, "2: maybeUpdateHandshakeIPs got a result 
of: "+handshakeIPsToString());
                return;
@@ -542,8 +560,13 @@
                newPeers[p.length] = extra;
                p = newPeers;
        }
+       localHandshakeIPs = p;
+        for(int i=0;i<localHandshakeIPs.length;i++) {
+               // Actually do the DNS request for the member Peer of 
localHandshakeIPs
+               localHandshakeIPs[i].getHandshakeAddress();
+        }
        synchronized(this) {
-               handshakeIPs = p;
+               handshakeIPs = localHandshakeIPs;
        }
        Logger.normal(this, "3: maybeUpdateHandshakeIPs got a result of: 
"+handshakeIPsToString());
        return;


Reply via email to