private void handleMerge(TreeBlock parentBlock, TreeBlock leftSibbling, TreeBlock rightSibbling) throws JasDBStorageException {
Key removeKey;
if(leftSibbling != null) {
Key mergeKey = leftSibbling.getMax();
TreeNode leftSibblingLastNode = leftSibbling.getNodes().last();
TreeNode currentFirstNode = treeNodes.first();
removeKey = currentFirstNode.getKey();
TreeNode mergeNode = new TreeNode(mergeKey, leftSibblingLastNode.getRight(), currentFirstNode.getLeft());
leftSibbling.addKey(mergeNode);
leftSibbling.addNodes(treeNodes.values(), null, leftSibbling.getPosition());
} else if(rightSibbling != null) {
Key mergeKey = getMax();
TreeNode rightFirstNode = rightSibbling.getNodes().first();
TreeNode currentLastNode = treeNodes.last();
removeKey = currentLastNode.getKey();
TreeNode mergeNode = new TreeNode(mergeKey, currentLastNode.getRight(), rightFirstNode.getLeft());
rightSibbling.addKey(mergeNode);
rightSibbling.addNodes(treeNodes.values(), null, rightSibbling.getPosition());
} else {
throw new JasDBStorageException("Invalid index state there should always be a sibbling tree block");
}
treeNodes.reset();
persister.markDeleted(this);
parentBlock.removeBlockPointer(removeKey, this);
}