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>

Reply via email to