if (bucketSearchResult.itemIndex < 0)
return null;
OBonsaiBucketPointer bucketPointer = bucketSearchResult.getLastPathItem();
OCacheEntry keyBucketCacheEntry = diskCache.load(fileId, bucketPointer.getPageIndex(), false);
final V removed;
keyBucketCacheEntry.acquireExclusiveLock();
try {
startAtomicOperation();
lockTillAtomicOperationCompletes();
OSBTreeBonsaiBucket<K, V> keyBucket = new OSBTreeBonsaiBucket<K, V>(keyBucketCacheEntry, bucketPointer.getPageOffset(),
keySerializer, valueSerializer, getTrackMode());
removed = keyBucket.getEntry(bucketSearchResult.itemIndex).value;
keyBucket.remove(bucketSearchResult.itemIndex);
logPageChanges(keyBucket, fileId, keyBucketCacheEntry.getPageIndex(), false);
keyBucketCacheEntry.markDirty();
} finally {
keyBucketCacheEntry.releaseExclusiveLock();
diskCache.release(keyBucketCacheEntry);
}
setSize(size() - 1);
endAtomicOperation(false);
return removed;