Author: nextgens
Date: 2006-09-23 10:39:59 +0000 (Sat, 23 Sep 2006)
New Revision: 10502

Modified:
   trunk/freenet/src/freenet/config/FilePersistentConfig.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeClientCore.java
Log:
Refactor NodeClient.storeConfig() into FilePersistentConfig.

Modified: trunk/freenet/src/freenet/config/FilePersistentConfig.java
===================================================================
--- trunk/freenet/src/freenet/config/FilePersistentConfig.java  2006-09-22 
16:00:59 UTC (rev 10501)
+++ trunk/freenet/src/freenet/config/FilePersistentConfig.java  2006-09-23 
10:39:59 UTC (rev 10502)
@@ -11,6 +11,7 @@
 import java.io.OutputStreamWriter;
 import java.util.Iterator;

+import freenet.node.Node;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.io.LineReadingInputStream;
@@ -31,6 +32,8 @@
        private SimpleFieldSet origConfigFileContents;
        private boolean finishedInit;
        private final Object storeSync = new Object();
+       private boolean isWritingConfig = false;
+       private Node node;

        public FilePersistentConfig(File f) throws IOException {
                this.filename = f;
@@ -123,15 +126,32 @@
                                return;
                        }
                }
-               try {
-                       synchronized(storeSync) {
-                               innerStore();
+               synchronized(storeSync) {
+                       if(isWritingConfig || node == null){
+                               Logger.normal(this, "Already writing the config 
file to disk or the node object hasn't been set : refusing to proceed");
+                               return;
                        }
-               } catch (IOException e) {
-                       String err = "Cannot store config: "+e;
-                       Logger.error(this, err, e);
-                       System.err.println(err);
-                       e.printStackTrace();
+                       isWritingConfig = true;
+
+                       node.ps.queueTimedJob(new Runnable() {
+                               public void run() {
+                                       try{
+                                               while(!node.isHasStarted())
+                                                       Thread.sleep(1000);
+                                       }catch (InterruptedException e) {}
+                                       try {
+                                               innerStore();
+                                       } catch (IOException e) {
+                                               String err = "Cannot store 
config: "+e;
+                                               Logger.error(this, err, e);
+                                               System.err.println(err);
+                                               e.printStackTrace();
+                                       }
+                                       synchronized (storeSync) {
+                                               isWritingConfig = false;
+                                       }
+                               }
+                       }, 0);
                }
        }

@@ -197,4 +217,12 @@
                        Logger.error(this, "Could not parse config option 
"+name+": "+e, e);
                }
        }
+       
+       public void setNode(Node n){
+               if(node != null){
+                       Logger.error(this, "The node object has already been 
initialized! it's likely to be a bug.");
+                       return;
+               }
+               this.node = n;
+       }
 }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-09-22 16:00:59 UTC (rev 
10501)
+++ trunk/freenet/src/freenet/node/Node.java    2006-09-23 10:39:59 UTC (rev 
10502)
@@ -33,7 +33,7 @@
 import com.sleepycat.je.DatabaseException;

 import freenet.client.FetcherContext;
-import freenet.config.Config;
+import freenet.config.FilePersistentConfig;
 import freenet.config.IntCallback;
 import freenet.config.InvalidConfigValueException;
 import freenet.config.LongCallback;
@@ -157,7 +157,7 @@
        }

        /** Config object for the whole node. */
-       public final Config config;
+       public final FilePersistentConfig config;

        // Static stuff related to logger

@@ -681,7 +681,7 @@
         * @param the loggingHandler
         * @throws NodeInitException If the node initialization fails.
         */
-        Node(Config config, RandomSource random, LoggingConfigHandler lc, 
NodeStarter ns) throws NodeInitException {
+        Node(FilePersistentConfig config, RandomSource random, 
LoggingConfigHandler lc, NodeStarter ns) throws NodeInitException {
                // Easy stuff
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                Logger.normal(this, "Initializing Node using SVN 
r"+Version.cvsRevision+" and freenet-ext r"+NodeStarter.extRevisionNumber);
@@ -1405,6 +1405,7 @@

                // After everything has been created, write the config file 
back to disk.
                config.finishedInit();
+               config.setNode(this);
                config.store();

                // Process any data in the extra peer data directory

Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java  2006-09-22 16:00:59 UTC 
(rev 10501)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java  2006-09-23 10:39:59 UTC 
(rev 10502)
@@ -59,9 +59,6 @@
        private final HealingQueue healingQueue;
        /** Must be included as a hidden field in order for any dangerous HTTP 
operation to complete successfully. */
        public final String formPassword;
-       
-       private volatile Object writeSync = new Object();
-       private boolean isWritingConfig = false;

        File downloadDir;
        final FilenameGenerator tempFilenameGenerator;
@@ -740,24 +737,8 @@
        }

        public void storeConfig() {
-               Logger.normal(this, "Writing config", new Exception("debug"));
-               synchronized (writeSync) {
-                       if(isWritingConfig) return;
-                       isWritingConfig = true;
-               
-                       node.ps.queueTimedJob(new Runnable() {
-                               public void run() {
-                                       try{
-                                               while(!node.isHasStarted())
-                                                       Thread.sleep(1000);
-                                       }catch (InterruptedException e) {}
-                                       node.config.store();
-                                       synchronized (writeSync) {
-                                               isWritingConfig = false;
-                                       }
-                               }
-                       }, 0);
-               }
+               Logger.normal(this, "Trying to write config to disk", new 
Exception("debug"));
+               node.config.store();
        }

        public boolean isTestnetEnabled() {


Reply via email to