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