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();
+               }
+       }
 }


Reply via email to