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
>