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


Reply via email to