You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Kathey Marsden (JIRA)" <ji...@apache.org> on 2008/11/17 20:35:44 UTC
[jira] Updated: (DERBY-3022) Index Split stops right after
restarting to split the parent node
[ https://issues.apache.org/jira/browse/DERBY-3022?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kathey Marsden updated DERBY-3022:
----------------------------------
Issue Type: Improvement (was: Bug)
Changing to improvement. User did not indicate a failing case with the issue.
> Index Split stops right after restarting to split the parent node
> -----------------------------------------------------------------
>
> Key: DERBY-3022
> URL: https://issues.apache.org/jira/browse/DERBY-3022
> Project: Derby
> Issue Type: Improvement
> Components: Store
> Affects Versions: 10.3.1.4
> Environment: windows
> Reporter: Kangmo Kim
>
> Whle I was analyzing source code, I found that
> at org.apache.derby.impl.store.access.btree.BranchControlRow
> splitFor method tries to split the branch node.
> But, as soon as it finds that the parent node does not have enough space to insert
> the split branch row (the mid row in the page to be splitted),
> it calls restartSplitFor to restart split...
> // At this point we have guaranteed there is space in the parent
> // page for splitrow, but it could be the case that the new
> // "newbranchrow" does not fit on the parent page.
> if (!parent.page.spaceForInsert(
> newbranchrow.getRow(), (FormatableBitSet) null,
> AccessFactoryGlobals.BTREE_OVERFLOW_THRESHOLD))
> {
> // There is no room on the parent page to complete a split at
> // the current level, so restart the split at top with the
> // branchrow that did not fit. On return from this routine
> // there is no way to know the state of the tree, so the
> // current split pass recursion must end.
> return(
> parent.restartSplitFor(
> open_btree, template, parent, this,
> newbranchrow.getRow(), splitrow, flag));
> }
> Right before following the code, what I guessed was that
> restartSplitFor would insert newbranchrow into parent, and continue to split nodes to reserve space insert splitrow at leaf node of b-tree.
> public static long restartSplitFor(
> OpenBTree open_btree,
> DataValueDescriptor[] template,
> BranchControlRow parent,
> ControlRow child,
> DataValueDescriptor[] newbranchrow,
> DataValueDescriptor[] splitrow,
> int flag)
> throws StandardException
> {
> // release parent and current latch
> parent.release();
> child.release();
> parent = null;
> child = null;
> // Get the root page back, and perform a split following the
> // branch row which would not fit.
> ControlRow root = ControlRow.get(open_btree, BTree.ROOTPAGEID);
> if (SanityManager.DEBUG)
> SanityManager.ASSERT(root.page.isLatched());
> return(root.splitFor(open_btree, template, null, newbranchrow, flag));
> }
> But what I found was...
> It just inserts the split branch row into the parent,
> and ends...
> restartSplitFor should continue to split nodes to reserve space to insert splitrow at leaf level.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.