On Monday 26 May 2008 10:34, j16sdiz at freenetproject.org wrote: > 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
Would it make sense to move a bunch of keys from the end, truncate the old files, and repeat until everything is moved, to minimize disk space usage during migration? Of course this relies on a filesystem supporting sparse files, and will likely result in the new store files being rather fragmented...? > > 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(); > + } > + } > } > > _______________________________________________ > cvs mailing list > cvs at freenetproject.org > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs > > -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20080528/d89ca3cd/attachment.pgp>