[freenet-cvs] r11655 - trunk/freenet/src/freenet/node

toad at freenetproject.org toad at freenetproject.org
Sat Feb 3 14:32:56 UTC 2007


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




More information about the cvs mailing list