Author: nextgens
Date: 2008-07-21 16:45:47 +0000 (Mon, 21 Jul 2008)
New Revision: 21289
Modified:
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
trunk/freenet/test/freenet/config/ConfigTest.java
Log:
updater: force-disable UoM for one hour in order to let the "normal" updating
process do its job. In case a self-mandatory build is released, UoM is allowed
to take over.
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-07-21 16:24:59 UTC (rev
21288)
+++ trunk/freenet/src/freenet/node/Node.java 2008-07-21 16:45:47 UTC (rev
21289)
@@ -2833,6 +2833,10 @@
return false;
}
+ public synchronized boolean isOudated() {
+ return (buildOldAgeUserAlert.lastGoodVersion > 0);
+ }
+
/**
* Handle a received node to node message
*/
Modified: trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
2008-07-21 16:24:59 UTC (rev 21288)
+++ trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
2008-07-21 16:45:47 UTC (rev 21289)
@@ -908,4 +908,7 @@
disabledThisSession = true;
}
+ protected long getStartedFetchingNextMainJarTimestamp() {
+ return startedFetchingNextMainJar;
+ }
}
Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-07-21 16:24:59 UTC (rev 21288)
+++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-07-21 16:45:47 UTC (rev 21289)
@@ -46,6 +46,7 @@
import freenet.support.HTMLNode;
import freenet.support.Logger;
import freenet.support.SizeUtil;
+import freenet.support.TimeUtil;
import freenet.support.io.FileBucket;
import freenet.support.io.RandomAccessFileWrapper;
import java.io.FileFilter;
@@ -77,6 +78,8 @@
static final int MAX_NODES_SENDING_MAIN_JAR = 2;
/** Maximum time between asking for the main jar and it starting to
transfer */
static final int REQUEST_MAIN_JAR_TIMEOUT = 60*1000;
+ //** Grace time before we use UoM to update */
+ public static final int GRACE_TIME = 60*60*1000; // 1h
private boolean logMINOR;
private UserAlert alert;
@@ -206,28 +209,37 @@
if(!updateManager.isEnabled()) return true; // Don't care if
not enabled, except for the revocation URI
- if(mainJarVersion > Version.buildNumber() && mainJarFileLength
> 0 &&
- mainJarVersion >
updateManager.newMainJarVersion()) {
- // Fetch it
- try {
- FreenetURI mainJarURI = new
FreenetURI(jarKey).setSuggestedEdition(mainJarVersion);
-
if(mainJarURI.equals(updateManager.updateURI.setSuggestedEdition(mainJarVersion)))
{
- sendUOMRequestMain(source, true);
- } else {
- System.err.println("Node
"+source.userToString()+" offered us a new main jar (version
"+mainJarVersion+") but his key was different to ours:\n"+
- "our key:
"+updateManager.updateURI+"\nhis key:"+mainJarURI);
+ long now = System.currentTimeMillis();
+ long whenToTakeOverTheNormalUpdater =
updateManager.getStartedFetchingNextMainJarTimestamp() + GRACE_TIME;
+ boolean isOutdated = updateManager.node.isOudated();
+ // if the new build is self-mandatory or if the "normal"
updater has been trying to update for more than one hour
+ Logger.normal(this, "We received a valid UOMAnnounce :
(isOutdated="+isOutdated+" version="+mainJarVersion +"
whenToTakeOverTheNormalUpdater="+TimeUtil.formatTime(whenToTakeOverTheNormalUpdater-now)+')');
+ if((isOutdated) || (whenToTakeOverTheNormalUpdater > 0 &&
whenToTakeOverTheNormalUpdater < now)) {
+ if(!isOutdated) {
+ Logger.error(this, "The update process seems to
have been stuck for over an hour; let's switch to UoM! SHOULD NOT HAPPEN!");
+ System.out.println("The update process seems to
have been stuck for over an hour; let's switch to UoM! SHOULD NOT HAPPEN!");
+ }
+ if(mainJarVersion > Version.buildNumber() &&
mainJarFileLength > 0 &&
+ mainJarVersion >
updateManager.newMainJarVersion())
+ // Fetch it
+ try {
+ FreenetURI mainJarURI = new
FreenetURI(jarKey).setSuggestedEdition(mainJarVersion);
+
if(mainJarURI.equals(updateManager.updateURI.setSuggestedEdition(mainJarVersion)))
+ sendUOMRequestMain(source,
true);
+ else
+ System.err.println("Node " +
source.userToString() + " offered us a new main jar (version " + mainJarVersion
+ ") but his key was different to ours:\n" +
+ "our key: " +
updateManager.updateURI + "\nhis key:" + mainJarURI);
+ } catch(MalformedURLException e) {
+ // Should maybe be a useralert?
+ Logger.error(this, "Node " + source + "
sent us a UOMAnnounce claiming to have a new jar, but it had an invalid URI: "
+ revocationKey + " : " + e, e);
+ System.err.println("Node " +
source.userToString() + " sent us a UOMAnnounce claiming to have a new jar, but
it had an invalid URI: " + revocationKey + " : " + e);
}
- } catch (MalformedURLException e) {
- // Should maybe be a useralert?
- Logger.error(this, "Node "+source+" sent us a
UOMAnnounce claiming to have a new jar, but it had an invalid URI:
"+revocationKey+" : "+e, e);
- System.err.println("Node
"+source.userToString()+" sent us a UOMAnnounce claiming to have a new jar, but
it had an invalid URI: "+revocationKey+" : "+e);
- }
}
return true;
}
- protected void sendUOMRequestMain(final PeerNode source, boolean
addOnFail) {
+ private void sendUOMRequestMain(final PeerNode source, boolean
addOnFail) {
synchronized(this) {
if(nodesAskedSendMainJar.contains(source)) {
if(logMINOR) Logger.minor(this, "Recently asked
node "+source+" so not re-asking yet.");
@@ -320,7 +332,7 @@
updateManager.node.clientCore.alerts.register(alert);
}
- class PeersSayKeyBlownAlert extends AbstractUserAlert {
+ private class PeersSayKeyBlownAlert extends AbstractUserAlert {
public PeersSayKeyBlownAlert() {
super(false, null, null, null, null,
UserAlert.CRITICAL_ERROR, true, null, false, null);
Modified: trunk/freenet/test/freenet/config/ConfigTest.java
===================================================================
--- trunk/freenet/test/freenet/config/ConfigTest.java 2008-07-21 16:24:59 UTC
(rev 21288)
+++ trunk/freenet/test/freenet/config/ConfigTest.java 2008-07-21 16:45:47 UTC
(rev 21289)
@@ -15,8 +15,6 @@
*/
package freenet.config;
-import freenet.config.Config;
-import freenet.config.SubConfig;
import freenet.utils.UTFUtil;
import junit.framework.TestCase;
@@ -71,5 +69,4 @@
public void testGet() {
assertSame(sc, conf.get("testing"));
}
-
}