Author: toad
Date: 2006-11-11 02:12:03 +0000 (Sat, 11 Nov 2006)
New Revision: 10881
Modified:
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
Create a single global Environment. Will be used by all
BerkeleyDBFreenetStore's and any other uses we put the DB to. (Queued requests
maybe?)
New config option databaseMaxMemory.
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-11-11 01:46:58 UTC (rev
10880)
+++ trunk/freenet/src/freenet/node/Node.java 2006-11-11 02:12:03 UTC (rev
10881)
@@ -32,6 +32,9 @@
import org.tanukisoftware.wrapper.WrapperManager;
import com.sleepycat.je.DatabaseException;
+import com.sleepycat.je.Environment;
+import com.sleepycat.je.EnvironmentConfig;
+import com.sleepycat.je.EnvironmentMutableConfig;
import freenet.client.FetcherContext;
import freenet.config.FreenetFilePersistentConfig;
@@ -265,6 +268,8 @@
private long maxStoreKeys;
/* These are private because must be protected by synchronized(this) */
+ private final Environment storeEnvironment;
+ private final EnvironmentMutableConfig envMutableConfig;
/** The CHK datastore. Long term storage; data should only be inserted
here if
* this node is the closest location on the chain so far, and it is on
an
* insert (because inserts will always reach the most specialized node;
if we
@@ -1124,7 +1129,49 @@
maxStoreKeys = maxTotalKeys / 2;
maxCacheKeys = maxTotalKeys - maxStoreKeys;
+ // Setup datastores
+
+ // First, global settings
+
+ // Percentage of the database that must contain usefull data
+ // decrease to increase performance, increase to save disk space
+ System.setProperty("je.cleaner.minUtilization","90");
+ // Delete empty log files
+ System.setProperty("je.cleaner.expunge","true");
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setAllowCreate(true);
+ envConfig.setTransactional(true);
+ envConfig.setTxnWriteNoSync(true);
+
+ File dbDir = new File(storeDir, "database-"+portNumber);
+ dbDir.mkdirs();
+
try {
+ storeEnvironment = new Environment(dbDir, envConfig);
+ envMutableConfig = storeEnvironment.getMutableConfig();
+ } catch (DatabaseException e) {
+ System.err.println("Could not open store: "+e);
+ e.printStackTrace();
+ throw new NodeInitException(EXIT_STORE_OTHER,
e.getMessage());
+ }
+
+ nodeConfig.register("databaseMaxMemory", "20M", sortOrder++,
true, false, "Datastore maximum memory usage", "Maximum memory usage of the
database backing the datastore indexes", new LongCallback() {
+
+ public long get() {
+ return envMutableConfig.getCacheSize();
+ }
+
+ public void set(long val) throws
InvalidConfigValueException {
+ if(val < 0)
+ throw new
InvalidConfigValueException("Negative values not supported");
+ envMutableConfig.setCacheSize(val);
+ }
+
+ });
+
+
envMutableConfig.setCacheSize(nodeConfig.getLong("databaseMaxMemory"));
+
+ try {
BerkeleyDBFreenetStore tmp;
Logger.normal(this, "Initializing CHK Datastore");
System.out.println("Initializing CHK Datastore
("+maxStoreKeys+" keys)");
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-11-11
01:46:58 UTC (rev 10880)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-11-11
02:12:03 UTC (rev 10881)
@@ -95,16 +95,7 @@
this.dataBlockSize = blockSize;
this.headerBlockSize = headerSize;
this.freeBlocks = new SortedLongSet();
- // Percentage of the database that must contain usefull data
- // decrease to increase performance, increase to save disk space
- System.setProperty("je.cleaner.minUtilization","98");
- // Delete empty log files
- System.setProperty("je.cleaner.expunge","true");
-
- // Percentage of the maximum heap size used as a cache
- System.setProperty("je.maxMemoryPercent","30");
-
this.maxChkBlocks=maxChkBlocks;
File dir = new File(storeDir);