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>