On Sat, Aug 2, 2008 at 9:10 AM, Matthew Toseland
<toad at amphibian.dyndns.org> wrote:
> 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.
>

What kind of callback? Any example?

>>
>> 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
>>
>>
>
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>

Reply via email to