On Friday 09 May 2008 03:09, j16sdiz at freenetproject.org wrote:
>
> /**
> - * Sample to take at a time
> + * Scan all entries and try to move them
> */
> - private static final double SAMPLE_RATE = 0.05; // 5%
> + private void moveOldEntry0(boolean queueItem) {
> + newEntries = 0;
> + oldEntries = 0;
> + freeEntries = 0;
> + resolvedEntries = 0;
> + droppedEntries = 0;
>
> + List oldItems = null;
> + if (queueItem) {
> + oldItems = new ArrayList();
> + }
> +
> + long maxOffset = maxOldItemOffset;
> + maxOldItemOffset = 0;
> + for (long offset = 0; offset <= maxOffset; offset++) {
> + if (logDEBUG && offset % 1024 == 0) {
> + Logger.debug(this, "Resize progress:
> newEntries=" + newEntries + ",
oldEntries=" + oldEntries
> + + ", freeEntries=" +
> freeEntries + ", resolvedEntries=" +
resolvedEntries
> + + ", droppedEntries=" +
> droppedEntries);
> + }
> +
> + if (shutdown)
> + return;
> +
> + if (!lockEntry(offset)) //lock
> + continue;
> + try {
> + Entry entry = readEntry(offset, null);
> +
> + if (entry.isFree()) {
> + // free block
> + freeEntries++;
> + } else if (entry.getStoreSize() ==
> storeSize) {
> + // new store size entries
> + maxOldItemOffset = offset;
> + newEntries++;
> + } else { // if (entry.getStoreSize() ==
> prevStoreSize)
> + // old store size entries, try
> to move them
> + oldEntries++;
> + maxOldItemOffset = offset;
> +
> + entry.setStoreSize(storeSize);
> + long newOffset =
> entry.getOffset();
> +
> + if (newOffset == offset) { //
> lucky!
> + writeEntry(entry); //
> write back entry storeSize
> + resolvedEntries++;
> + continue;
> + }
> +
> + if (!lockEntry(newOffset)) //
> lock
> + continue;
> + try {
> + // see what's in the
> new offset
> + Entry newOffsetEntry =
> readEntry(newOffset, null);
> +
> + if
> (newOffsetEntry.isFree()) {
> + // the new
> offset is freeeeeeee..
> +
> writeEntry(entry);
> +
> freeOffset(offset);
> +
> resolvedEntries++;
> + } else if
> (newOffsetEntry.getStoreSize() == storeSize) {
> + // new offset
> already have a new entry, free old entry
> +
> freeOffset(offset);
> +
> droppedEntries++;
> + } else if
> (Arrays.equals(entry.digestedRoutingKey,
newOffsetEntry.digestedRoutingKey)) {
> + // same
> digested routing key, free the old entry
> +
> freeOffset(offset);
> +
> resolvedEntries++;
> + } else if (queueItem) {
> + // break tie by
> moveing old item to queue
> + if
> (oldItems.size() * entryTotalLength < RESIZE_MEMORY) {
> +
> oldItems.add(newOffsetEntry);
> + if
> (newOffset > offset) {
> +
> oldEntries++; // newOffset wasn't counted count it
> + }
> +
> +
> writeEntry(entry);
> +
> freeOffset(offset);
> +
> resolvedEntries++;
Where are we writing it to here? It looks like we write it to the old
location, and then delete it?
> + }
> + }
> + } finally {
> + unlockEntry(newOffset);
> + }
> + }
> + } catch (IOException e) {
> + Logger.debug(this, "IOExcception on
> moveOldEntries0", e);
> + } finally {
> + unlockEntry(offset);
> + }
> + }
> +
> + if (queueItem) {
> + putBackOldItems(oldItems);
> + }
> + }
-------------- 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/20080509/78235e59/attachment.pgp>
