Author: j16sdiz
Date: 2008-07-11 12:45:38 +0000 (Fri, 11 Jul 2008)
New Revision: 21050

Modified:
   
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
Log:
less aggressive store-resize / filter-rebuild

Modified: 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
   2008-07-11 12:45:19 UTC (rev 21049)
+++ 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
   2008-07-11 12:45:38 UTC (rev 21050)
@@ -535,7 +535,6 @@
                        return digestedRoutingKey;
                }

-
                // XXX Old Format, to be removed in next build
                public void readOldFormat(ByteBuffer in) {
                        assert in.remaining() == entryTotalLength;
@@ -891,7 +890,6 @@
                        while (!shutdown) {
                                cleanerLock.lock();
                                try {
-                                       
                                        long _prevStoreSize;
                                        configLock.readLock().lock();
                                        try {
@@ -902,7 +900,7 @@

                                        if (_prevStoreSize != 0 && 
cleanerGlobalLock.tryLock()) {
                                                try {
-                                                       
resizeStore(_prevStoreSize);
+                                                       
resizeStore(_prevStoreSize, true);
                                                } finally {
                                                        
cleanerGlobalLock.unlock();
                                                }
@@ -917,7 +915,7 @@
                                        }
                                        if (_rebuildBloom && prevStoreSize == 0 
&& cleanerGlobalLock.tryLock()) {
                                                try {
-                                                       rebuildBloom();
+                                                       rebuildBloom(true);
                                                } finally {
                                                        
cleanerGlobalLock.unlock();
                                                }
@@ -942,12 +940,12 @@
                        }
                }

-               private static final int RESIZE_MEMORY_ENTRIES = 256; // 
temporary memory store size (in # of entries)
+               private static final int RESIZE_MEMORY_ENTRIES = 128; // 
temporary memory store size (in # of entries)

                /**
                 * Move old entries to new location and resize store
                 */
-               private void resizeStore(long _prevStoreSize) {
+               private void resizeStore(long _prevStoreSize, boolean sleep) {
                        Logger.normal(this, "Starting datastore resize");
                        long startTime = System.currentTimeMillis();

@@ -975,6 +973,7 @@
                                        return;
                                }

+                               
WrapperManager.signalStarting(RESIZE_MEMORY_ENTRIES * 30 * 1000 + 1000);
                                batchProcessEntries(curOffset, 
RESIZE_MEMORY_ENTRIES, new BatchProcessor() {
                                        public Entry process(Entry entry) {
                                                if (entry.generation != 
generation) {
@@ -1018,6 +1017,14 @@
                                long processed = _prevStoreSize - curOffset;
                                if (i++ % 16 == 0)
                                        Logger.normal(this, "Store resize (" + 
name + "): " + processed + "/" + _prevStoreSize);
+
+                               try {
+                                       if (!sleep)
+                                               Thread.sleep(500);
+                               } catch (InterruptedException e) {
+                                       bloomFilter.discard();
+                                       return;
+                               }
                        }

                        long endTime = System.currentTimeMillis();
@@ -1041,7 +1048,7 @@
                /**
                 * Rebuild bloom filter
                 */
-               private void rebuildBloom() {
+               private void rebuildBloom(boolean sleep) {
                        if (bloomFilter == null)
                                return;

@@ -1064,6 +1071,7 @@
                                        bloomFilter.discard();
                                        return;
                                }
+                               
WrapperManager.signalStarting(RESIZE_MEMORY_ENTRIES * 5 * 1000 + 1000);
                                batchProcessEntries(curOffset, 
RESIZE_MEMORY_ENTRIES, new BatchProcessor() {
                                        public Entry process(Entry entry) {
                                                if (entry.generation != 
generation) {
@@ -1081,6 +1089,14 @@
                                        Logger.normal(this, "Rebuilding bloom 
filter (" + name + "): " + curOffset + "/" + storeSize);
                                        writeConfigFile();
                                }
+
+                               try {
+                                       if (sleep)
+                                               Thread.sleep(500);
+                               } catch (InterruptedException e) {
+                                       bloomFilter.discard();
+                                       return;
+                               }
                        }

                        bloomFilter.merge();


Reply via email to