Author: toad
Date: 2008-01-04 19:31:35 +0000 (Fri, 04 Jan 2008)
New Revision: 16889
Modified:
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
Pass Node as a GetPubkey into BDBFS so we can reconstruct SSKs.
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-01-04 19:28:22 UTC (rev
16888)
+++ trunk/freenet/src/freenet/node/Node.java 2008-01-04 19:31:35 UTC (rev
16889)
@@ -1313,28 +1313,28 @@
Logger.normal(this, "Initializing CHK Datastore");
System.out.println("Initializing CHK Datastore
("+maxStoreKeys+" keys)");
chkDatastore =
BerkeleyDBFreenetStore.construct(lastVersion, storeDir, true, suffix,
maxStoreKeys,
- CHKBlock.DATA_LENGTH,
CHKBlock.TOTAL_HEADERS_LENGTH, true, BerkeleyDBFreenetStore.TYPE_CHK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile);
+ CHKBlock.DATA_LENGTH,
CHKBlock.TOTAL_HEADERS_LENGTH, true, BerkeleyDBFreenetStore.TYPE_CHK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile, this);
Logger.normal(this, "Initializing CHK Datacache");
System.out.println("Initializing CHK Datacache
("+maxCacheKeys+ ':' +maxCacheKeys+" keys)");
chkDatacache =
BerkeleyDBFreenetStore.construct(lastVersion, storeDir, false, suffix,
maxCacheKeys,
- CHKBlock.DATA_LENGTH,
CHKBlock.TOTAL_HEADERS_LENGTH, true, BerkeleyDBFreenetStore.TYPE_CHK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile);
+ CHKBlock.DATA_LENGTH,
CHKBlock.TOTAL_HEADERS_LENGTH, true, BerkeleyDBFreenetStore.TYPE_CHK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile, this);
Logger.normal(this, "Initializing pubKey Datastore");
System.out.println("Initializing pubKey Datastore");
pubKeyDatastore =
BerkeleyDBFreenetStore.construct(lastVersion, storeDir, true, suffix,
maxStoreKeys,
- DSAPublicKey.PADDED_SIZE, 0, true,
BerkeleyDBFreenetStore.TYPE_PUBKEY, storeEnvironment, random,
storeShutdownHook, tryDbLoad, reconstructFile);
+ DSAPublicKey.PADDED_SIZE, 0, true,
BerkeleyDBFreenetStore.TYPE_PUBKEY, storeEnvironment, random,
storeShutdownHook, tryDbLoad, reconstructFile, this);
Logger.normal(this, "Initializing pubKey Datacache");
System.out.println("Initializing pubKey Datacache
("+maxCacheKeys+" keys)");
pubKeyDatacache =
BerkeleyDBFreenetStore.construct(lastVersion, storeDir, false, suffix,
maxCacheKeys,
- DSAPublicKey.PADDED_SIZE, 0, true,
BerkeleyDBFreenetStore.TYPE_PUBKEY, storeEnvironment, random,
storeShutdownHook, tryDbLoad, reconstructFile);
+ DSAPublicKey.PADDED_SIZE, 0, true,
BerkeleyDBFreenetStore.TYPE_PUBKEY, storeEnvironment, random,
storeShutdownHook, tryDbLoad, reconstructFile, this);
// FIXME can't auto-fix SSK stores.
Logger.normal(this, "Initializing SSK Datastore");
System.out.println("Initializing SSK Datastore");
sskDatastore =
BerkeleyDBFreenetStore.construct(lastVersion, storeDir, true, suffix,
maxStoreKeys,
- SSKBlock.DATA_LENGTH,
SSKBlock.TOTAL_HEADERS_LENGTH, false, BerkeleyDBFreenetStore.TYPE_SSK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile);
+ SSKBlock.DATA_LENGTH,
SSKBlock.TOTAL_HEADERS_LENGTH, false, BerkeleyDBFreenetStore.TYPE_SSK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile, this);
Logger.normal(this, "Initializing SSK Datacache");
System.out.println("Initializing SSK Datacache
("+maxCacheKeys+" keys)");
sskDatacache =
BerkeleyDBFreenetStore.construct(lastVersion, storeDir, false, suffix,
maxStoreKeys,
- SSKBlock.DATA_LENGTH,
SSKBlock.TOTAL_HEADERS_LENGTH, false, BerkeleyDBFreenetStore.TYPE_SSK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile);
+ SSKBlock.DATA_LENGTH,
SSKBlock.TOTAL_HEADERS_LENGTH, false, BerkeleyDBFreenetStore.TYPE_SSK,
storeEnvironment, random, storeShutdownHook, tryDbLoad, reconstructFile, this);
} catch (FileNotFoundException e1) {
String msg = "Could not open datastore: "+e1;
Logger.error(this, msg, e1);
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-01-04
19:28:22 UTC (rev 16888)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-01-04
19:31:35 UTC (rev 16889)
@@ -46,6 +46,7 @@
import freenet.keys.NodeSSK;
import freenet.keys.SSKBlock;
import freenet.keys.SSKVerifyException;
+import freenet.node.GetPubkey;
import freenet.node.SemiOrderedShutdownHook;
import freenet.support.Fields;
import freenet.support.HexUtil;
@@ -67,7 +68,7 @@
final File reconstructFile;
final int dataBlockSize;
final int headerBlockSize;
-
+
private final short storeType;
private final Environment environment;
private final TupleBinding storeBlockTupleBinding;
@@ -109,7 +110,7 @@
public static BerkeleyDBFreenetStore construct(int lastVersion, File
baseStoreDir, boolean isStore,
String suffix, long maxStoreKeys, int blockSize, int
headerSize, boolean throwOnTooFewKeys,
short type, Environment storeEnvironment, RandomSource
random,
- SemiOrderedShutdownHook storeShutdownHook, boolean
tryDbLoad, File reconstructFile) throws DatabaseException, IOException {
+ SemiOrderedShutdownHook storeShutdownHook, boolean
tryDbLoad, File reconstructFile, GetPubkey pubkeyCache) throws
DatabaseException, IOException {
/**
* Migration strategy:
@@ -157,7 +158,7 @@
// Don't need to create a new Environment, since we can
use the old one.
tmp = openStore(storeEnvironment, baseStoreDir,
newDBPrefix, newStoreFile, lruFile, keysFile, newFixSecondaryFile, maxStoreKeys,
- blockSize, headerSize,
throwOnTooFewKeys, false, lastVersion, type, false, storeShutdownHook,
tryDbLoad, reconstructFile, keyLength);
+ blockSize, headerSize,
throwOnTooFewKeys, false, lastVersion, type, false, storeShutdownHook,
tryDbLoad, reconstructFile, keyLength, pubkeyCache);
} else {
@@ -166,7 +167,7 @@
tmp = openStore(storeEnvironment, baseStoreDir,
newDBPrefix, newStoreFile, lruFile, keysFile, newFixSecondaryFile,
maxStoreKeys, blockSize, headerSize,
throwOnTooFewKeys, false, lastVersion, type,
- false, storeShutdownHook, tryDbLoad,
reconstructFile, keyLength);
+ false, storeShutdownHook, tryDbLoad,
reconstructFile, keyLength, pubkeyCache);
}
@@ -176,7 +177,7 @@
private static BerkeleyDBFreenetStore openStore(Environment
storeEnvironment, File baseDir, String newDBPrefix, File newStoreFile,
File lruFile, File keysFile, File newFixSecondaryFile,
long maxStoreKeys, int blockSize, int headerSize, boolean throwOnTooFewKeys,
boolean noCheck, int lastVersion, short type, boolean
wipe, SemiOrderedShutdownHook storeShutdownHook,
- boolean tryDbLoad, File reconstructFile, int keyLength)
throws DatabaseException, IOException {
+ boolean tryDbLoad, File reconstructFile, int keyLength,
GetPubkey pubkeyCache) throws DatabaseException, IOException {
if(tryDbLoad) {
String dbName = newDBPrefix+"CHK";
@@ -230,7 +231,7 @@
// Reconstruct
return new BerkeleyDBFreenetStore(storeEnvironment,
newDBPrefix, newStoreFile, lruFile, keysFile, newFixSecondaryFile,
- maxStoreKeys, blockSize, headerSize,
type, noCheck, storeShutdownHook, reconstructFile, keyLength);
+ maxStoreKeys, blockSize, headerSize,
type, noCheck, storeShutdownHook, reconstructFile, keyLength, pubkeyCache);
}
}
@@ -1021,7 +1022,7 @@
* @throws IOException If the store cannot be opened because of a
filesystem problem.
* @throws FileNotFoundException if the dir does not exist and could not
be created
*/
- private BerkeleyDBFreenetStore(Environment env, String prefix, File
storeFile, File lruFile, File keysFile, File fixSecondaryFile, long
maxChkBlocks, int blockSize, int headerSize, short type, boolean noCheck,
SemiOrderedShutdownHook storeShutdownHook, File reconstructFile, int keyLength)
throws DatabaseException, IOException {
+ private BerkeleyDBFreenetStore(Environment env, String prefix, File
storeFile, File lruFile, File keysFile, File fixSecondaryFile, long
maxChkBlocks, int blockSize, int headerSize, short type, boolean noCheck,
SemiOrderedShutdownHook storeShutdownHook, File reconstructFile, int keyLength,
GetPubkey pubkeyCache) throws DatabaseException, IOException {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
this.storeType = type;
this.keyLength = keyLength;
@@ -1100,7 +1101,7 @@
lastRecentlyUsed = 0;
- reconstruct(type);
+ reconstruct(type, pubkeyCache);
blocksInStore = countCHKBlocksFromFile();
lastRecentlyUsed = getMaxRecentlyUsed();
@@ -1134,7 +1135,7 @@
}
}
- private void reconstruct(short type) throws DatabaseException,
IOException {
+ private void reconstruct(short type, GetPubkey pubkeyCache) throws
DatabaseException, IOException {
if(keysDB.count() != 0)
throw new IllegalStateException("Store must be empty
before reconstruction!");
if(type == TYPE_SSK) {