mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-02 21:19:53 -05:00
ITS#7266 fix rebalance for LEAF2 pages
This commit is contained in:
parent
a540597dd6
commit
eeec509150
1 changed files with 24 additions and 9 deletions
|
|
@ -5214,9 +5214,14 @@ mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst)
|
|||
MDB_node *s2;
|
||||
/* must find the lowest key below src */
|
||||
mdb_page_search_root(csrc, NULL, 0);
|
||||
s2 = NODEPTR(csrc->mc_pg[csrc->mc_top], 0);
|
||||
key.mv_size = NODEKSZ(s2);
|
||||
key.mv_data = NODEKEY(s2);
|
||||
if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) {
|
||||
key.mv_size = csrc->mc_db->md_pad;
|
||||
key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], 0, key.mv_size);
|
||||
} else {
|
||||
s2 = NODEPTR(csrc->mc_pg[csrc->mc_top], 0);
|
||||
key.mv_size = NODEKSZ(s2);
|
||||
key.mv_data = NODEKEY(s2);
|
||||
}
|
||||
csrc->mc_snum = snum--;
|
||||
csrc->mc_top = snum;
|
||||
} else {
|
||||
|
|
@ -5232,9 +5237,14 @@ mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst)
|
|||
MDB_val bkey;
|
||||
/* must find the lowest key below dst */
|
||||
mdb_page_search_root(cdst, NULL, 0);
|
||||
s2 = NODEPTR(cdst->mc_pg[cdst->mc_top], 0);
|
||||
bkey.mv_size = NODEKSZ(s2);
|
||||
bkey.mv_data = NODEKEY(s2);
|
||||
if (IS_LEAF2(cdst->mc_pg[cdst->mc_top])) {
|
||||
bkey.mv_size = cdst->mc_db->md_pad;
|
||||
bkey.mv_data = LEAF2KEY(cdst->mc_pg[cdst->mc_top], 0, bkey.mv_size);
|
||||
} else {
|
||||
s2 = NODEPTR(cdst->mc_pg[cdst->mc_top], 0);
|
||||
bkey.mv_size = NODEKSZ(s2);
|
||||
bkey.mv_data = NODEKEY(s2);
|
||||
}
|
||||
cdst->mc_snum = snum--;
|
||||
cdst->mc_top = snum;
|
||||
rc = mdb_update_key(cdst->mc_pg[cdst->mc_top], 0, &bkey);
|
||||
|
|
@ -5377,9 +5387,14 @@ mdb_page_merge(MDB_cursor *csrc, MDB_cursor *cdst)
|
|||
MDB_node *s2;
|
||||
/* must find the lowest key below src */
|
||||
mdb_page_search_root(csrc, NULL, 0);
|
||||
s2 = NODEPTR(csrc->mc_pg[csrc->mc_top], 0);
|
||||
key.mv_size = NODEKSZ(s2);
|
||||
key.mv_data = NODEKEY(s2);
|
||||
if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) {
|
||||
key.mv_size = csrc->mc_db->md_pad;
|
||||
key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], 0, key.mv_size);
|
||||
} else {
|
||||
s2 = NODEPTR(csrc->mc_pg[csrc->mc_top], 0);
|
||||
key.mv_size = NODEKSZ(s2);
|
||||
key.mv_data = NODEKEY(s2);
|
||||
}
|
||||
csrc->mc_snum = snum--;
|
||||
csrc->mc_top = snum;
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue