[freenet-cvs] r15477 - trunk/freenet/src/freenet/node

nextgens at freenetproject.org nextgens at freenetproject.org
Mon Oct 22 18:57:36 UTC 2007


Author: nextgens
Date: 2007-10-22 18:57:35 +0000 (Mon, 22 Oct 2007)
New Revision: 15477

Modified:
   trunk/freenet/src/freenet/node/Node.java
Log:
Change the default directory of the datastore. Now it will be under datastore/
Add some backward compatibility code to move it even on old setups.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java	2007-10-22 18:52:24 UTC (rev 15476)
+++ trunk/freenet/src/freenet/node/Node.java	2007-10-22 18:57:35 UTC (rev 15477)
@@ -917,7 +917,7 @@
 
 		maxTotalKeys = maxTotalDatastoreSize / sizePerKey;
 		
-		nodeConfig.register("storeDir", ".", sortOrder++, true, true, "Node.storeDirectory", "Node.storeDirectoryLong", 
+		nodeConfig.register("storeDir", "datastore", sortOrder++, true, true, "Node.storeDirectory", "Node.storeDirectoryLong", 
 				new StringCallback() {
 					public String get() {
 						return storeDir.getPath();
@@ -929,7 +929,66 @@
 					}
 		});
 		
-		storeDir = new File(nodeConfig.getString("storeDir"));
+		final String suffix = "-" + getDarknetPortNumber();
+		String datastoreDir = nodeConfig.getString("storeDir");
+		// FIXME: temporary cludge for backward compat.
+		File tmpFile = new File("datastore");
+		if(".".equals(datastoreDir) && !tmpFile.exists()) {
+			System.out.println("Your node seems to be using the old directory, we will move it: !!DO NOT RESTART!!");
+			Logger.normal(this, "Your node seems to be using the old directory, we will move it: !!DO NOT RESTART!!");
+			boolean done = false;
+			try {
+				if(tmpFile.mkdir()) {
+					File chkStoreCache = new File("chk"+suffix+".cache");
+					File chkStoreCacheNew = new File("datastore/chk"+suffix+".cache");
+					if(!chkStoreCache.renameTo(chkStoreCacheNew))
+						throw new IOException();
+					File chkStoreStore = new File("chk"+suffix+".store");
+					File chkStoreStoreNew = new File("datastore/chk"+suffix+".store");
+					if(!chkStoreStore.renameTo(chkStoreStoreNew))
+						throw new IOException();
+					
+					File sskStoreCache = new File("ssk"+suffix+".cache");
+					File sskStoreCacheNew = new File("datastore/ssk"+suffix+".cache");
+					if(!sskStoreCache.renameTo(sskStoreCacheNew))
+						throw new IOException();
+					File sskStoreStore = new File("ssk"+suffix+".store");
+					File sskStoreStoreNew = new File("datastore/ssk"+suffix+".store");
+					if(!sskStoreStore.renameTo(sskStoreStoreNew))
+						throw new IOException();
+					
+					File pubkeyStoreCache = new File("pubkey"+suffix+".cache");
+					File pubkeyStoreCacheNew = new File("datastore/pubkey"+suffix+".cache");
+					if(!pubkeyStoreCache.renameTo(pubkeyStoreCacheNew))
+						throw new IOException();
+					File pubkeyStoreStore = new File("pubkey"+suffix+".store");
+					File pubkeyStoreStoreNew = new File("datastore/pubkey"+suffix+".store");
+					if(!pubkeyStoreStore.renameTo(pubkeyStoreStoreNew))
+						throw new IOException();
+					
+					File databaseStoreDir = new File("database"+suffix);
+					File databaseStoreDirNew = new File("datastore/database"+suffix);
+					if(!databaseStoreDir.renameTo(databaseStoreDirNew))
+						throw new IOException();
+					done = true;
+				}
+			} catch (Throwable e) {
+				e.printStackTrace();
+				done = false;
+			}
+			
+			if(done) {
+				datastoreDir = "datastore/";
+				nodeConfig.fixOldDefault("storeDir", datastoreDir);
+				Logger.normal(this, "The migration is complete, cool :)");
+				System.out.println("The migration is complete, cool :)");
+			} else {
+				Logger.error(this, "Something went wrong :( please report the bug!");
+				System.err.println("Something went wrong :( please report the bug!");
+			}
+		}
+		
+		storeDir = new File(datastoreDir);
 		if(!((storeDir.exists() && storeDir.isDirectory()) || (storeDir.mkdir()))) {
 			String msg = "Could not find or create datastore directory";
 			throw new NodeInitException(NodeInitException.EXIT_STORE_OTHER, msg);
@@ -967,8 +1026,6 @@
 		
 		boolean tryDbLoad = false;
 		
-		String suffix = "-" + getDarknetPortNumber();
-		
 		// This can take some time
 		System.out.println("Starting database...");
 		try {
@@ -997,7 +1054,7 @@
 			System.err.println("Attempting DbDump-level recovery...");
 			
 			boolean[] isStores = new boolean[] { true, false, true, false, true, false };
-			short[] types = new short[] { 
+			final short[] types = new short[] { 
 					BerkeleyDBFreenetStore.TYPE_CHK,
 					BerkeleyDBFreenetStore.TYPE_CHK,
 					BerkeleyDBFreenetStore.TYPE_PUBKEY,
@@ -1005,7 +1062,7 @@
 					BerkeleyDBFreenetStore.TYPE_SSK,
 					BerkeleyDBFreenetStore.TYPE_SSK
 			};
-			int[] lengths = new int[] {
+			final int[] lengths = new int[] {
 					CHKBlock.TOTAL_HEADERS_LENGTH + CHKBlock.DATA_LENGTH,
 					CHKBlock.TOTAL_HEADERS_LENGTH + CHKBlock.DATA_LENGTH,
 					DSAPublicKey.PADDED_SIZE,




More information about the cvs mailing list