protected void setPrevious(long previous) { leaveProperties.setPreviousBlock(previous); }
@Override public LeaveBlock loadBlock(DataBlock dataBlock) throws JasDBStorageException { LOG.debug("Loading block: {}", dataBlock); LeaveBlockImpl leaveBlock = createBlock(-1, dataBlock); LeaveBlockProperties properties = leaveBlock.getProperties(); properties.setModified(false); int amountOfKeys = dataBlock.getHeader().getInt(AMOUNT_KEY_INDEX); long nextBlock = dataBlock.getHeader().getLong(NEXT_LEAVE_INDEX); long previousBlock = dataBlock.getHeader().getLong(PREVIOUS_LEAVE_INDEX); long parent = dataBlock.getHeader().getLong(PARENT_BLOCK_INDEX); int offset = 0; DataBlock currentBlock = dataBlock; for(int i=0; i<amountOfKeys; i++) { KeyLoadResult loadedKeyResult = keyInfo.loadKey(offset, currentBlock); leaveBlock.addKey(loadedKeyResult.getLoadedKey()); currentBlock = loadedKeyResult.getEndBlock(); offset = loadedKeyResult.getNextOffset(); } properties.setNextBlock(nextBlock); properties.setPreviousBlock(previousBlock); properties.setModified(false); properties.setParentBlock(parent); return leaveBlock; }
private void handleBlockOverflow() throws JasDBStorageException { if(leaves.size() > persister.getMaxKeys()) { List<Key>[] splittedKeys = leaves.split(); this.leaves.reset(); /* this block keeps representing the right half, the last current block key == max right */ List<Key> rightKeys = splittedKeys[1]; addKeys(rightKeys); List<Key> leftKeys = splittedKeys[0]; long currentPrevious = leaveProperties.getPreviousBlock(); LeaveBlockImpl leftLeaveBlock = (LeaveBlockImpl) persister.createBlock(BlockTypes.LEAVEBLOCK, leaveProperties.getParentPointer()); leftLeaveBlock.setPrevious(currentPrevious); leftLeaveBlock.setNext(getPosition()); leftLeaveBlock.addKeys(leftKeys); this.recalculateMemorySize(); leftLeaveBlock.recalculateMemorySize(); if(currentPrevious != -1) { //we need to relink, there is a previous block present LeaveBlockImpl previousBlock = (LeaveBlockImpl) persister.loadBlock(currentPrevious); previousBlock.setNext(leftLeaveBlock.getPosition()); } leaveProperties.setPreviousBlock(leftLeaveBlock.getPosition()); TreeBlock parentBlock = (TreeBlock) persister.loadBlock(leaveProperties.getParentPointer()); parentBlock.insertBlock(leftLeaveBlock.getLast(), leftLeaveBlock, this); } }