On Thursday 17 July 2008 14:38, j16sdiz at freenetproject.org wrote:
> Author: j16sdiz
> Date: 2008-07-17 13:38:25 +0000 (Thu, 17 Jul 2008)
> New Revision: 21168
>
> Modified:
>
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
> branches/saltedhashstore/freenet/src/freenet/node/Node.java
>
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
> Log:
> show user alert when rebuilding filter / resizing
Please use a callback. The below is a rather messy layering violation.
>
> Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
> ===================================================================
> ---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
2008-07-17 13:38:00 UTC (rev 21167)
> +++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
2008-07-17 13:38:25 UTC (rev 21168)
> @@ -895,6 +895,11 @@
> PproxyToadlet.unloadPluginWithName=Are you sure you wish to unload ${name}?
> PproxyToadlet.unloadPurge=Remove plugin from cache
> PproxyToadlet.versionTitle=Version
> +SaltedHashFreenetStore.shortResizeProgress=Datastore(${name}) resize in
progress: ${processed}/${total}
> +SaltedHashFreenetStore.shortRebuildProgress=Datastore(${name}) maintenance
in progress: ${processed}/${total}
> +SaltedHashFreenetStore.longResizeProgress=Datastore(${name}) resize in
progress: ${processed}/${total}. The node may be a little bit slower then
usual during the process. Avoid restarting the node during this.
> +SaltedHashFreenetStore.longRebuildProgress=Datastore(${name}) maintenance
in progress: ${processed}/${total}. The node may be a little bit slower then
usual during the process. Avoid restarting the node during this.
> +SaltedHashFreenetStore.cleanerAlertTitle=Datastore maintenance task running
> QueueToadlet.DUinProgress=Directory uploads in progress (${size})
> QueueToadlet.DinProgress=Downloads in progress (${size})
> QueueToadlet.UinProgress=Uploads in progress (${size})
>
> Modified: branches/saltedhashstore/freenet/src/freenet/node/Node.java
> ===================================================================
> --- branches/saltedhashstore/freenet/src/freenet/node/Node.java
> 2008-07-17
13:38:00 UTC (rev 21167)
> +++ branches/saltedhashstore/freenet/src/freenet/node/Node.java
> 2008-07-17
13:38:25 UTC (rev 21168)
> @@ -1354,34 +1354,32 @@
> System.out.println("Initializing CHK Datastore
> (" + maxStoreKeys + "
keys)");
> chkDatastore = new CHKStore();
> SaltedHashFreenetStore chkDataFS =
SaltedHashFreenetStore.construct(storeDir, "CHK-store",
> - chkDatastore, random, maxStoreKeys,
> 0x10000000, shutdownHook);
> + chkDatastore, this, maxStoreKeys,
> 0x10000000, shutdownHook);
> Logger.normal(this, "Initializing CHK
> Datacache");
> System.out.println("Initializing CHK Datacache
> (" + maxCacheKeys + ':'
+ maxCacheKeys + " keys)");
> chkDatacache = new CHKStore();
> SaltedHashFreenetStore chkCacheFS =
SaltedHashFreenetStore.construct(storeDir, "CHK-cache",
> - chkDatacache, random, maxCacheKeys,
> 0x10000000, shutdownHook);
> -
> + chkDatacache, this, maxCacheKeys,
> 0x10000000, shutdownHook);
> Logger.normal(this, "Initializing pubKey
> Datastore");
> System.out.println("Initializing pubKey
> Datastore");
> pubKeyDatastore = new PubkeyStore();
> SaltedHashFreenetStore pubkeyDataFS =
SaltedHashFreenetStore.construct(storeDir, "PUBKEY-store",
> - pubKeyDatastore, random, maxStoreKeys,
> 0x10000000,
shutdownHook);
> + pubKeyDatastore, this, maxStoreKeys,
> 0x10000000, shutdownHook);
> Logger.normal(this, "Initializing pubKey
> Datacache");
> System.out.println("Initializing pubKey
> Datacache (" + maxCacheKeys + "
keys)");
> pubKeyDatacache = new PubkeyStore();
> SaltedHashFreenetStore pubkeyCacheFS =
SaltedHashFreenetStore.construct(storeDir, "PUBKEY-cache",
> - pubKeyDatacache, random, maxCacheKeys,
> 0x10000000,
shutdownHook);
> -
> + pubKeyDatacache, this, maxCacheKeys,
> 0x10000000, shutdownHook);
> Logger.normal(this, "Initializing SSK
> Datastore");
> System.out.println("Initializing SSK
> Datastore");
> sskDatastore = new SSKStore(this);
> SaltedHashFreenetStore sskDataFS =
SaltedHashFreenetStore.construct(storeDir, "SSK-store",
> - sskDatastore, random, maxStoreKeys,
> 0x10000000, shutdownHook);
> + sskDatastore, this, maxStoreKeys,
> 0x10000000, shutdownHook);
> Logger.normal(this, "Initializing SSK
> Datacache");
> System.out.println("Initializing SSK Datacache
> (" + maxCacheKeys + "
keys)");
> sskDatacache = new SSKStore(this);
> SaltedHashFreenetStore sskCacheFS =
SaltedHashFreenetStore.construct(storeDir, "SSK-cache",
> - sskDatacache, random, maxCacheKeys,
> 0x10000000, shutdownHook);
> + sskDatacache, this, maxCacheKeys,
> 0x10000000, shutdownHook);
>
> File migrationFile = new File(storeDir,
> "migrated");
> if (!migrationFile.exists()) {
>
> Modified:
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
> ===================================================================
> ---
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
2008-07-17 13:38:00 UTC (rev 21167)
> +++
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
2008-07-17 13:38:25 UTC (rev 21168)
> @@ -14,7 +14,6 @@
> import java.util.List;
> import java.util.ListIterator;
> import java.util.Map;
> -import java.util.Random;
> import java.util.SortedSet;
> import java.util.TreeMap;
> import java.util.TreeSet;
> @@ -29,13 +28,17 @@
> import org.tanukisoftware.wrapper.WrapperManager;
>
> import freenet.keys.KeyVerifyException;
> +import freenet.l10n.L10n;
> +import freenet.node.Node;
> import freenet.node.SemiOrderedShutdownHook;
> +import freenet.node.useralerts.UserAlert;
> import freenet.store.FreenetStore;
> import freenet.store.KeyCollisionException;
> import freenet.store.StorableBlock;
> import freenet.store.StoreCallback;
> import freenet.support.BloomFilter;
> import freenet.support.Fields;
> +import freenet.support.HTMLNode;
> import freenet.support.HexUtil;
> import freenet.support.Logger;
> import freenet.support.io.FileUtil;
> @@ -70,18 +73,21 @@
> private final int routeKeyLength;
> private final int fullKeyLength;
> private final int dataBlockLength;
> - private final Random random;
> + private final Node node;
> +
> private long storeSize;
> private int generation;
> private int flags;
>
> - public static SaltedHashFreenetStore construct(File baseDir, String
> name,
StoreCallback callback, Random random,
> - long maxKeys, int bloomFilterSize, SemiOrderedShutdownHook
shutdownHook) throws IOException {
> - return new SaltedHashFreenetStore(baseDir, name, callback,
> random,
maxKeys, bloomFilterSize, shutdownHook);
> + public static SaltedHashFreenetStore construct(File baseDir, String
> name,
StoreCallback callback, Node node,
> + long maxKeys, int bloomFilterSize, SemiOrderedShutdownHook
shutdownHook)
> + throws IOException {
> + return new SaltedHashFreenetStore(baseDir, name, callback,
> node, maxKeys,
bloomFilterSize, shutdownHook);
> }
>
> - private SaltedHashFreenetStore(File baseDir, String name, StoreCallback
callback, Random random, long maxKeys,
> - int bloomFilterSize, SemiOrderedShutdownHook shutdownHook)
> throws
IOException {
> + private SaltedHashFreenetStore(File baseDir, String name, StoreCallback
callback, Node node, long maxKeys,
> + int bloomFilterSize, SemiOrderedShutdownHook shutdownHook)
> + throws IOException {
> logMINOR = Logger.shouldLog(Logger.MINOR, this);
> logDEBUG = Logger.shouldLog(Logger.DEBUG, this);
>
> @@ -95,7 +101,7 @@
> fullKeyLength = callback.fullKeyLength();
> dataBlockLength = callback.dataLength();
>
> - this.random = random;
> + this.node = node;
> storeSize = maxKeys;
> this.bloomFilterSize = bloomFilterSize;
>
> @@ -454,7 +460,7 @@
>
> private ByteBuffer toMetaDataBuffer() {
> ByteBuffer out = ByteBuffer.allocate(METADATA_LENGTH);
> - cipherManager.encrypt(this, random);
> + cipherManager.encrypt(this, node.random);
>
> out.put(getDigestedRoutingKey());
> out.put(dataEncryptIV);
> @@ -661,7 +667,7 @@
> * </ul>
> */
> private void writeEntry(Entry entry, long offset) throws IOException {
> - cipherManager.encrypt(entry, random);
> + cipherManager.encrypt(entry, node.random);
>
> ByteBuffer bf = entry.toMetaDataBuffer();
> do {
> @@ -759,7 +765,7 @@
> if (!configFile.exists()) {
> // create new
> byte[] newsalt = new byte[0x10];
> - random.nextBytes(newsalt);
> + node.random.nextBytes(newsalt);
> cipherManager = new CipherManager(newsalt);
>
> writeConfigFile();
> @@ -852,6 +858,9 @@
> * How often the clean should run
> */
> private static final int CLEANER_PERIOD = 5 * 60 * 1000; // 5
> minutes
> +
> + private volatile boolean isRebuilding;
> + private volatile boolean isResizing;
>
> public Cleaner() {
> super("Store-" + name + "-Cleaner",
> NativeThread.LOW_PRIORITY, false);
> @@ -862,10 +871,88 @@
> @Override
> public void run() {
> super.run();
> +
> try {
> + while (node.clientCore == null) {
> + Thread.sleep(1000);
> + }
> Thread.sleep((int)(CLEANER_PERIOD / 2 +
> CLEANER_PERIOD *
Math.random()));
> } catch (InterruptedException e){}
> +
> + node.clientCore.alerts.register(new UserAlert() {
> + public String anchor() {
> + return "store-cleaner-" + name;
> + }
>
> + public String dismissButtonText() {
> + return L10n.getString("UserAlert.hide");
> + }
> +
> + public HTMLNode getHTMLText() {
> + return new HTMLNode("#", getText());
> + }
> +
> + public short getPriorityClass() {
> + return UserAlert.ERROR;
> + }
> +
> + public String getShortText() {
> + if (isResizing)
> + return
L10n.getString("SaltedHashFreenetStore.shortResizeProgress", //
> + new String[] { "name",
> "processed", "total" },//
> + new String[] { name,
> (entriesTotal - entriesLeft) + "",
entriesTotal + "" });
> + else
> + return
L10n.getString("SaltedHashFreenetStore.shortRebuildProgress", //
> + new String[] { "name",
> "processed", "total" },//
> + new String[] { name,
> (entriesTotal - entriesLeft) + "",
entriesTotal + "" });
> + }
> +
> + public String getText() {
> + if (isResizing)
> + return
> L10n.getString("SaltedHashFreenetStore.longResizeProgress", //
> + new String[] { "name",
> "processed", "total" },//
> + new String[] { name,
> (entriesTotal - entriesLeft) + "",
entriesTotal + "" });
> + else
> + return
L10n.getString("SaltedHashFreenetStore.longRebuildProgress", //
> + new String[] { "name",
> "processed", "total" },//
> + new String[] { name,
> (entriesTotal - entriesLeft) + "",
entriesTotal + "" });
> + }
> +
> + public String getTitle() {
> + return
> L10n.getString("SaltedHashFreenetStore.cleanerAlertTitle", //
> + new String[] { "name" }, //
> + new String[] { name });
> + }
> +
> + public Object getUserIdentifier() {
> + return null;
> + }
> +
> + public boolean isValid() {
> + return isRebuilding || isResizing;
> + }
> +
> + public void isValid(boolean validity) {
> + // Ignore
> + }
> +
> + public void onDismiss() {
> + // Ignore
> + }
> +
> + public boolean shouldUnregisterOnDismiss() {
> + return true;
> + }
> +
> + public boolean userCanDismiss() {
> + return true;
> + }
> +
> + public boolean isEventNotification() {
> + return false;
> + }
> + });
> +
> int loop = 0;
> while (!shutdown) {
> loop++;
> @@ -882,8 +969,10 @@
>
> if (_prevStoreSize != 0 &&
> cleanerGlobalLock.tryLock()) {
> try {
> + isResizing = true;
>
> resizeStore(_prevStoreSize, true);
> } finally {
> + isResizing = false;
>
> cleanerGlobalLock.unlock();
> }
> }
> @@ -897,8 +986,10 @@
> }
> if (_rebuildBloom && prevStoreSize == 0
> &&
cleanerGlobalLock.tryLock()) {
> try {
> + isRebuilding = true;
> rebuildBloom(true);
> } finally {
> + isRebuilding = false;
>
> cleanerGlobalLock.unlock();
> }
> }
>
> _______________________________________________
> 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/20080802/8da5f247/attachment.pgp>