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


Reply via email to