On Fri, Aug 1, 2008 at 6:33 PM, Matthew Toseland
<toad at amphibian.dyndns.org> wrote:
> On Friday 01 August 2008 03:10, Daniel Cheng wrote:
>> On Fri, Aug 1, 2008 at 7:08 AM, Matthew Toseland
>> <toad at amphibian.dyndns.org> wrote:
>> > It looks like you no longer use a scratch file for resizing...?
>>
>> no longer used.
>> it's just too slow and don't give many help.
>
> You lose an equal number of blocks with and without one?

lose a little bit lesser with it, but it's more then 2x slower and
affect normal operation -- too heavy to do it online.

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

Reply via email to