protected void insertBlock(Key key, IndexBlock leftChildBlock, IndexBlock rightChildBlock) throws JasDBStorageException { TreeNode node = new TreeNode(key, leftChildBlock.getPosition(), rightChildBlock.getPosition()); treeNodes.put(key, node); modified = true; /* let's relink all the blocks */ TreeNode previousNode = treeNodes.previous(key); TreeNode nextNode = treeNodes.next(key); if(previousNode != null && nextNode != null) { //we are adding in the middle previousNode.setRight(leftChildBlock.getPosition()); nextNode.setLeft(rightChildBlock.getPosition()); } else if(previousNode != null) { //we are adding in the end previousNode.setRight(leftChildBlock.getPosition()); } else { //we must be adding to the beginning nextNode.setLeft(rightChildBlock.getPosition()); } handleBlockOverflow(); }
protected void removeBlockPointer(Key minBlockValue, IndexBlock removedBlock) throws JasDBStorageException { TreeNode removeNode = treeNodes.getBefore(minBlockValue); // LOG.info("Closest remove node: {} nodes: {}", removeNode, treeNodes.size()); TreeNode next = treeNodes.next(removeNode.getKey()); if(next != null && removeNode.getLeft() != removedBlock.getPosition()) { //we need to relink the next block next.setLeft(removeNode.getLeft()); } treeNodes.remove(removeNode.getKey()); modified = true; handleBlockUnderflow(); }
next.setLeft(removeNode.getLeft());