Author: j16sdiz
Date: 2008-05-26 09:34:39 +0000 (Mon, 26 May 2008)
New Revision: 20097
Modified:
branches/saltedhashstore/freenet/src/freenet/node/Node.java
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
Log:
Data store migration
Modified: branches/saltedhashstore/freenet/src/freenet/node/Node.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-05-26
09:34:05 UTC (rev 20096)
+++ branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-05-26
09:34:39 UTC (rev 20097)
@@ -1331,35 +1331,61 @@
Logger.normal(this, "Initializing CHK
Datastore");
System.out.println("Initializing CHK Datastore
(" + maxStoreKeys + " keys)");
chkDatastore = new CHKStore();
- SaltedHashFreenetStore.construct(storeDir,
"CHK-store", chkDatastore, random, maxStoreKeys,
- shutdownHook);
+ SaltedHashFreenetStore chkDataFS =
SaltedHashFreenetStore.construct(storeDir, "CHK-store",
+ chkDatastore, random, maxStoreKeys,
shutdownHook);
Logger.normal(this, "Initializing CHK
Datacache");
System.out.println("Initializing CHK Datacache
(" + maxCacheKeys + ':' + maxCacheKeys + " keys)");
chkDatacache = new CHKStore();
- SaltedHashFreenetStore.construct(storeDir,
"CHK-cache", chkDatacache, random, maxCacheKeys,
- shutdownHook);
+ SaltedHashFreenetStore chkCacheFS =
SaltedHashFreenetStore.construct(storeDir, "CHK-cache",
+ chkDatacache, random, maxCacheKeys,
shutdownHook);
Logger.normal(this, "Initializing pubKey
Datastore");
System.out.println("Initializing pubKey
Datastore");
pubKeyDatastore = new PubkeyStore();
- SaltedHashFreenetStore.construct(storeDir,
"PUBKEY-store", pubKeyDatastore, random, maxStoreKeys,
- shutdownHook);
+ SaltedHashFreenetStore pubkeyDataFS =
SaltedHashFreenetStore.construct(storeDir, "PUBKEY-store",
+ pubKeyDatastore, random, maxStoreKeys,
shutdownHook);
Logger.normal(this, "Initializing pubKey
Datacache");
System.out.println("Initializing pubKey
Datacache (" + maxCacheKeys + " keys)");
pubKeyDatacache = new PubkeyStore();
- SaltedHashFreenetStore.construct(storeDir,
"PUBKEY-cache", pubKeyDatacache, random, maxCacheKeys,
- shutdownHook);
+ SaltedHashFreenetStore pubkeyCacheFS =
SaltedHashFreenetStore.construct(storeDir, "PUBKEY-cache",
+ pubKeyDatacache, random, maxCacheKeys,
shutdownHook);
Logger.normal(this, "Initializing SSK
Datastore");
System.out.println("Initializing SSK
Datastore");
sskDatastore = new SSKStore(this);
- SaltedHashFreenetStore.construct(storeDir,
"SSK-store", sskDatastore, random, maxStoreKeys,
- shutdownHook);
+ SaltedHashFreenetStore sskDataFS =
SaltedHashFreenetStore.construct(storeDir, "SSK-store",
+ sskDatastore, random, maxStoreKeys,
shutdownHook);
Logger.normal(this, "Initializing SSK
Datacache");
System.out.println("Initializing SSK Datacache
(" + maxCacheKeys + " keys)");
sskDatacache = new SSKStore(this);
- SaltedHashFreenetStore.construct(storeDir,
"SSK-cache", sskDatacache, random, maxCacheKeys,
+ SaltedHashFreenetStore sskCacheFS =
SaltedHashFreenetStore.construct(storeDir, "SSK-cache",
+ sskDatacache, random, maxCacheKeys,
shutdownHook);
+
+ File migrationFile = new File(storeDir,
"migrated");
+ if (!migrationFile.exists()) {
+ chkDataFS.migrationFrom(//
+ new File(storeDir, "chk" +
suffix + ".store"), //
+ new File(storeDir, "chk" +
suffix + ".store.keys"));
+ chkCacheFS.migrationFrom(//
+ new File(storeDir, "chk" +
suffix + ".cache"), //
+ new File(storeDir, "chk" +
suffix + ".cache.keys"));
+
+ pubkeyDataFS.migrationFrom(//
+ new File(storeDir, "pubkey" +
suffix + ".store"), //
+ new File(storeDir, "pubkey" +
suffix + ".store.keys"));
+ pubkeyCacheFS.migrationFrom(//
+ new File(storeDir, "pubkey" +
suffix + ".cache"), //
+ new File(storeDir, "pubkey" +
suffix + ".cache.keys"));
+
+ sskDataFS.migrationFrom(//
+ new File(storeDir, "ssk" +
suffix + ".store"), //
+ new File(storeDir, "ssk" +
suffix + ".store.keys"));
+ sskCacheFS.migrationFrom(//
+ new File(storeDir, "ssk" +
suffix + ".cache"), //
+ new File(storeDir, "ssk" +
suffix + ".cache.keys"));
+ migrationFile.createNewFile();
+ }
} catch (IOException e) {
System.err.println("Could not open store: " +
e);
e.printStackTrace();
Modified:
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
2008-05-26 09:34:05 UTC (rev 20096)
+++
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
2008-05-26 09:34:39 UTC (rev 20097)
@@ -1376,4 +1376,47 @@
return storeSize;
}
+ // ------------- Migration
+ public void migrationFrom(File storeFile, File keyFile) {
+ try {
+ System.out.println("Migrating from " + storeFile);
+
+ RandomAccessFile storeRAF = new
RandomAccessFile(storeFile, "r");
+ RandomAccessFile keyRAF = keyFile.exists() ? new
RandomAccessFile(keyFile, "r") : null;
+
+ byte[] header = new byte[headerBlockLength];
+ byte[] data = new byte[dataBlockLength];
+ byte[] key = new byte[fullKeyLength];
+
+ long maxKey = storeRAF.length() / (headerBlockLength +
dataBlockLength);
+ for (int l = 0; true; l++) {
+ if (l % 1024 == 0)
+ System.out.println(" key " + l + "/" +
maxKey);
+
+ boolean keyRead = false;
+ storeRAF.readFully(header);
+ storeRAF.readFully(data);
+ try {
+ if (keyRAF != null) {
+ keyRAF.readFully(key);
+ keyRead = true;
+ }
+ } catch (IOException e) {
+ }
+
+ try {
+ StorableBlock b =
callback.construct(data, header, null, keyRead ? key : null);
+ put(b, b.getRoutingKey(),
b.getFullKey(), data, header, true);
+ } catch (KeyVerifyException e) {
+ System.out.println("kve at block " + l);
+ } catch (KeyCollisionException e) {
+ System.out.println("kce at block " + l);
+ }
+ }
+ } catch (EOFException eof) {
+ // done
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}