protected void handleBlockUnderflow() throws JasDBStorageException { if(treeNodes.size() < persister.getMinKeys()) { LOG.debug("Handling block underflow"); TreeBlock parentBlock = (TreeBlock) persister.loadBlock(parentPointer); long leftSibblingPointer = parentBlock.getLeftSibbling(this); long rightSibblingPointer = parentBlock.getRightSibbling(this); TreeBlock leftSibbling = null; TreeBlock rightSibbling = null; if(leftSibblingPointer != -1) { leftSibbling = (TreeBlock) persister.loadBlock(leftSibblingPointer); } if(rightSibblingPointer != -1) { rightSibbling = (TreeBlock) persister.loadBlock(rightSibblingPointer); } if(leftSibbling != null && leftSibbling.size() > persister.getMinKeys()) { handleBorrowLeft(parentBlock, leftSibbling); } else if(rightSibbling != null && rightSibbling.size() > persister.getMinKeys()) { handleBorrowRight(parentBlock, rightSibbling); } else { //nothing to borrow we need to merge handleMerge(parentBlock, leftSibbling, rightSibbling); } } }
private void handleBlockUnderflow() throws JasDBStorageException { if(leaves.size() < persister.getMinKeys()) { LeaveBlockImpl leftLeave = null; LeaveBlockImpl rightLeave = null; if(leftLeave != null && leftLeave.getParentPointer() == getParentPointer() && leftLeave.size() > persister.getMinKeys()) { log.debug("Borrowing from left leave"); } else if(rightLeave != null && rightLeave.getParentPointer() == getParentPointer() && rightLeave.size() > persister.getMinKeys()) { log.debug("Borrowing from right leave");
@Override public void removeFromIndex(Key key) throws JasDBStorageException { openIndex(); resourceLockManager.sharedLock(); lockManager.startLockChain(); lockManager.acquireLock(LockIntentType.LEAVELOCK_OPTIMISTIC, rootBlock); try { LeaveBlock leaveBlock = rootBlock.findLeaveBlock(LockIntentType.LEAVELOCK_OPTIMISTIC, key); if(leaveBlock.size() == persister.getMinKeys()) { lockManager.releaseLockChain(); lockManager.startLockChain(); lockManager.acquireLock(LockIntentType.WRITE_EXCLUSIVE, rootBlock); leaveBlock = rootBlock.findLeaveBlock(LockIntentType.WRITE_EXCLUSIVE, key); doLeaveBlockRemove(leaveBlock, key); } else { doLeaveBlockRemove(leaveBlock, key); } } finally { lockManager.releaseLockChain(); resourceLockManager.sharedUnlock(); } }