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. > > 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 >