mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 16:49:39 -05:00
ITS#7536 fix mdb_rebalance
A page must always have at least 2 keys (unless it's a root page)
This commit is contained in:
parent
6dab37f2ac
commit
d74330128a
1 changed files with 4 additions and 3 deletions
|
|
@ -6368,12 +6368,13 @@ mdb_rebalance(MDB_cursor *mc)
|
|||
DPRINTF("found neighbor page %zu (%u keys, %.1f%% full)",
|
||||
mn.mc_pg[mn.mc_top]->mp_pgno, NUMKEYS(mn.mc_pg[mn.mc_top]), (float)PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) / 10);
|
||||
|
||||
/* If the neighbor page is above threshold and has at least two
|
||||
* keys, move one key from it.
|
||||
/* If the neighbor page is above threshold and has at least three
|
||||
* keys, move one key from it. (A page must never have fewer than
|
||||
* 2 keys.)
|
||||
*
|
||||
* Otherwise we should try to merge them.
|
||||
*/
|
||||
if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= FILL_THRESHOLD && NUMKEYS(mn.mc_pg[mn.mc_top]) >= 2)
|
||||
if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= FILL_THRESHOLD && NUMKEYS(mn.mc_pg[mn.mc_top]) > 2)
|
||||
return mdb_node_move(&mn, mc);
|
||||
else {
|
||||
if (mc->mc_ki[ptop] == 0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue