It looks like you no longer use a scratch file for resizing...?

On Wednesday 09 July 2008 09:42, j16sdiz at freenetproject.org wrote:
> Author: j16sdiz
> Date: 2008-07-09 08:42:42 +0000 (Wed, 09 Jul 2008)
> New Revision: 21007
> 
> Modified:
>    
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
> Log:
> fix cleaner
> 
> Modified: 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
> ===================================================================
> --- 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
       
2008-07-09 08:42:19 UTC (rev 21006)
> +++ 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
       
2008-07-09 08:42:42 UTC (rev 21007)
> @@ -463,6 +463,9 @@
>               private ByteBuffer toHeaderBuffer() {
>                       assert isEncrypted; // should have encrypted to get 
> dataEncryptIV in 
control buffer
>  
> +                     if (header == null)
> +                             return null;
> +
>                       ByteBuffer out = ByteBuffer.allocate(headerBlockLength);
>                       out.put(header);
>                       assert out.remaining() == 0;
> @@ -474,6 +477,9 @@
>               private ByteBuffer toDataBuffer() {
>                       assert isEncrypted; // should have encrypted to get 
> dataEncryptIV in 
control buffer
>  
> +                     if (data == null)
> +                             return null;
> +
>                       ByteBuffer out = ByteBuffer.allocate(dataBlockLength);
>                       out.put(data);
>                       assert out.remaining() == 0;
> @@ -822,12 +828,9 @@
>                               cleanerLock.lock();
>                               try {
>                                       long _prevStoreSize;
> -                                     boolean _rebuildBloom;
> -
>                                       configLock.readLock().lock();
>                                       try {
>                                               _prevStoreSize = prevStoreSize;
> -                                             _rebuildBloom = ((flags & 
> FLAG_REBUILD_BLOOM) != 0);
>                                       } finally {
>                                               configLock.readLock().unlock();
>                                       }
> @@ -840,6 +843,13 @@
>                                               }
>                                       }
>  
> +                                     boolean _rebuildBloom;
> +                                     configLock.readLock().lock();
> +                                     try {
> +                                             _rebuildBloom = ((flags & 
> FLAG_REBUILD_BLOOM) != 0);
> +                                     } finally {
> +                                             configLock.readLock().unlock();
> +                                     }
>                                       if (_rebuildBloom && prevStoreSize == 0 
> && 
cleanerGlobalLock.tryLock()) {
>                                               try {
>                                                       rebuildBloom();
> @@ -873,9 +883,6 @@
>                * Move old entries to new location and resize store
>                */
>               private void resizeStore(long _prevStoreSize) {
> -                     if (true) // temporary disabled
> -                             return;
> -
>                       Logger.normal(this, "Starting datastore resize");
>                       long startTime = System.currentTimeMillis();
>  
> @@ -904,20 +911,34 @@
>  
>                               batchProcessEntries(curOffset, 
> RESIZE_MEMORY_ENTRIES, new 
BatchProcessor() {
>                                       public Entry process(Entry entry) {
> +                                             if (entry.generation != 
> generation) {
>                                               entry.generation = generation;
>                                               keyCount.incrementAndGet();
> +                                             }
>  
> -                                             if (entry.storeSize == 
> storeSize) {// new size
> +                                             if (entry.storeSize == 
> storeSize) {
> +                                                     // new size, don't have 
> to relocate
> +                                                     if (entry.generation != 
> generation) {
> +                                                             // update filter
>                                                       
> bloomFilter.updateFilter(entry.getDigestedRoutingKey());
> -
>                                                       return entry;
> +                                                     } else {
> +                                                             return 
> NOT_MODIFIED;
> +                                                     }
>                                               }
>  
> +                                             // remove from store, prepare 
> for relocation
> +                                             try {
> +                                                     
> entry.setData(readHeader(entry.curOffset), 
readData(entry.curOffset));
>                                               oldEntryList.add(entry);
> +                                             } catch (IOException e) {
> +                                                     Logger.error(this, 
> "error reading entry (offset=" + entry.curOffset 
+ ")", e);
> +                                             }
>                                               return null;
>                                       }
>                               });
>  
> +                             // shrink data file to current size
>                               if (storeSize < _prevStoreSize)
>                                       setStoreFileSize(Math.max(storeSize, 
> curOffset));
>  
> @@ -952,9 +973,6 @@
>                * Rebuild bloom filter
>                */
>               private void rebuildBloom() {
> -                     if (true) // temporary disabled
> -                             return;
> -
>                       if (bloomFilter == null)
>                               return;
>  
> @@ -1022,12 +1040,6 @@
>                *         otherwise (e.g. can't acquire locks, node shutting 
> down)
>                */
>               private boolean batchProcessEntries(long offset, int length, 
BatchProcessor processor) {
> -                     return false;
> -
> -                     /*- temporary disabled
> -                     assert offset % FILE_SPLIT == 0;
> -                     assert length % FILE_SPLIT == 0;
> -
>                       boolean[] locked = new boolean[length];
>                       try {
>                               // acquire all locks in the region, will unlock 
> in the finally block
> @@ -1038,17 +1050,15 @@
>                                               return false;
>                               }
>  
> -                             long startFileOffset = (offset / FILE_SPLIT) * 
> entryTotalLength;
> -                             long entriesToRead = length / FILE_SPLIT;
> -                             long bufLen = entryTotalLength * entriesToRead;
> +                             long startFileOffset = offset  * 
> Entry.METADATA_LENGTH;
> +                             long entriesToRead = length;
> +                             long bufLen =  Entry.METADATA_LENGTH * 
> entriesToRead;
>  
>                               ByteBuffer buf = ByteBuffer.allocate((int) 
> bufLen);
> -                             for (int i = 0; i < FILE_SPLIT; i++) { // for 
> each split file
>                                       boolean dirty = false;
> -                                     buf.clear();
>                                       try {
>                                               while (buf.hasRemaining()) {
> -                                                     int status = 
> storeFC[i].read(buf, startFileOffset + buf.position());
> +                                             int status = metaFC.read(buf, 
> startFileOffset + buf.position());
>                                                       if (status == -1)
>                                                               break;
>                                               }
> @@ -1060,35 +1070,36 @@
>                                       buf.flip();
>  
>                                       try { 
> -                                             for (int j = 0; buf.limit() >= 
> j * entryTotalLength; j++) {
> -                                                     if (shutdown)
> -                                                             return false;
> -
> -                                                     buf.position((int) (j * 
> entryTotalLength));
> -                                                     if (buf.remaining() < 
> entryTotalLength) // EOF
> +                                     for (int j = 0; !shutdown && 
> buf.limit() > j * Entry.METADATA_LENGTH; 
j++) {
> +                                             buf.position(j * 
> Entry.METADATA_LENGTH);
> +                                             if (buf.remaining() < 
> Entry.METADATA_LENGTH) // EOF
>                                                               break;
>  
>                                                       ByteBuffer enBuf = 
> buf.slice();
> -                                                     enBuf.limit((int) 
> entryTotalLength);
> +                                             
> enBuf.limit(Entry.METADATA_LENGTH);
>  
> -                                                     Entry entry = new 
> Entry(enBuf, SaltedHashFreenetStore.this);
> -                                                     entry.curOffset = 
> offset + j * FILE_SPLIT + i;
> +                                             Entry entry = new Entry(enBuf, 
> null, null);
> +                                             entry.curOffset = offset + j;
>  
>                                                       if (entry.isFree())
>                                                               continue; // 
> not occupied
>  
>                                                       Entry newEntry = 
> processor.process(entry);
>                                                       if (newEntry == null) 
> {// free the offset
> -                                                             
> buf.position((int) (j * entryTotalLength));
> -                                                             
> buf.put(ByteBuffer.allocate((int) entryTotalLength));
> +                                                     buf.position(j * 
> Entry.METADATA_LENGTH);
> +                                                     
> buf.put(ByteBuffer.allocate(Entry.METADATA_LENGTH));
>                                                               
> keyCount.decrementAndGet();
>  
>                                                               dirty = true;
>                                                       } else if (newEntry == 
> NOT_MODIFIED) {
>                                                       } else {
>                                                               // write back
> -                                                             
> buf.position((int) (j * entryTotalLength));
> -                                                             
> buf.put(newEntry.toByteBuffer(SaltedHashFreenetStore.this));
> +                                                     buf.position(j * 
> Entry.METADATA_LENGTH);
> +                                                     
> buf.put(newEntry.toMetaDataBuffer());
> +
> +                                                     assert newEntry.header 
> == null; // not supported
> +                                                     assert newEntry.data == 
> null; // not supported
> +
>                                                               dirty = true;
>                                                       } 
>                                               }
> @@ -1099,14 +1110,13 @@
>  
>                                                       try {
>                                                               while 
> (buf.hasRemaining()) {
> -                                                                     
> storeFC[i].write(buf, startFileOffset + buf.position());
> +                                                             
> metaFC.write(buf, startFileOffset + buf.position());
>                                                               }
>                                                       } catch (IOException 
> ioe) {
>                                                               
> Logger.error(this, "unexpected IOException", ioe);
>                                                       }
>                                               }
>                                       }
> -                             }
>  
>                               return true;
>                       } finally {
> @@ -1115,7 +1125,6 @@
>                                       if (locked[i])
>                                               lockManager.unlockEntry(offset 
> + i);
>                       }
> -                      */
>               }
>  
>               /**
> 
> _______________________________________________
> 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/20080801/f6c4d8b1/attachment.pgp>

Reply via email to