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() {