Author: toad
Date: 2007-02-03 14:32:33 +0000 (Sat, 03 Feb 2007)
New Revision: 11655

Modified:
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Only update version flags when the version changes, and at the transition time.

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2007-02-03 14:30:55 UTC 
(rev 11654)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2007-02-03 14:32:33 UTC 
(rev 11655)
@@ -108,7 +108,20 @@
     void start() {
         Logger.normal(this, "Starting PacketSender");
         System.out.println("Starting PacketSender");
-        lastTimeInSeconds = (int) (System.currentTimeMillis() / 1000);
+       long now = System.currentTimeMillis();
+       long transition = Version.transitionTime;
+       if(now < transition) {
+               queueTimedJob(new Runnable() {
+                       public void run() {
+                               PeerNode[] nodes = node.peers.myPeers;
+                               for(int i=0;i<nodes.length;i++) {
+                                       PeerNode pn = nodes[i];
+                                       pn.updateShouldDisconnectNow();
+                               }
+                       }
+               }, transition - now);
+       }
+        lastTimeInSeconds = (int) (now / 1000);
         // Necessary because of sun JVM bugs when NPTL is enabled. Write once, 
debug everywhere!
         Thread t1 = new Thread(new Watchdog(), "PacketSender watchdog");
         t1.setDaemon(true);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-02-03 14:30:55 UTC 
(rev 11654)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-02-03 14:32:33 UTC 
(rev 11655)
@@ -360,6 +360,8 @@
         // FIXME make mandatory once everyone has upgraded
         lastGoodVersion = fs.get("lastGoodVersion");

+        updateShouldDisconnectNow();
+        
         String name = fs.get("myName");
         if(name == null) throw new FSParseException("No name");
         myName = name;
@@ -1601,11 +1603,11 @@
     }

     public boolean publicInvalidVersion() {
-        return !Version.checkGoodVersion(getVersion());
+        return verifiedIncompatibleOlderVersion;
     }

     public synchronized boolean publicReverseInvalidVersion() {
-        return 
!Version.checkArbitraryGoodVersion(Version.getVersionString(),lastGoodVersion);
+        return verifiedIncompatibleNewerVersion;
     }

     /**
@@ -1705,6 +1707,11 @@
                version = newVersion;
                Version.seenVersion(newVersion);
         }
+
+        lastGoodVersion = fs.get("lastGoodVersion");
+        
+        updateShouldDisconnectNow();
+        
         String locationString = fs.get("location");
         if(locationString == null) {
                // Location WILL be ommitted for an ARK.
@@ -1722,8 +1729,6 @@
                nominalPeer=new Vector();
         nominalPeer.removeAllElements();

-        lastGoodVersion = fs.get("lastGoodVersion");
-        
         Peer[] oldPeers = (Peer[]) nominalPeer.toArray(new 
Peer[nominalPeer.size()]);

         try{
@@ -2535,6 +2540,11 @@
                return isBurstOnly;
        }

+       synchronized void updateShouldDisconnectNow() {
+               verifiedIncompatibleOlderVersion = invalidVersion();
+               verifiedIncompatibleNewerVersion = reverseInvalidVersion();
+       }
+       
        /**
         * Should the node be disconnected from immediately?
         * This will return true if our lastGoodBuild has changed due to a 
timed mandatory.
@@ -2542,8 +2552,6 @@
        public synchronized boolean shouldDisconnectNow() {
                // TODO: We should disconnect here if "protocol version 
mismatch", maybe throwing an exception
                // TODO: shouldDisconnectNow() is hopefully only called when 
we're connected, otherwise we're breaking the meaning of 
verifiedIncompable[Older|Newer]Version
-               verifiedIncompatibleOlderVersion = invalidVersion();
-               verifiedIncompatibleNewerVersion = reverseInvalidVersion();
                if(verifiedIncompatibleNewerVersion || 
verifiedIncompatibleOlderVersion) return true;
                return false;
        }


Reply via email to