From: Howard Chu Date: Wed, 13 Mar 2013 00:29:34 +0000 (-0700) Subject: ITS#7538 fallout from ITS#7536 fix. X-Git-Tag: OPENLDAP_REL_ENG_2_4_35~26^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=77001f549ba5b28a4cff89c4d58012a106985437;p=openldap ITS#7538 fallout from ITS#7536 fix. Allow leaf pages to have only 1 key. --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index a2a2e528a7..cf306fcb77 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -6250,7 +6250,7 @@ static int mdb_rebalance(MDB_cursor *mc) { MDB_node *node; - int rc; + int rc, minkeys; unsigned int ptop; MDB_cursor mn; @@ -6380,13 +6380,12 @@ 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 three - * keys, move one key from it. (A page must never have fewer than - * 2 keys.) - * - * Otherwise we should try to merge them. + /* If the neighbor page is above threshold and has enough keys, + * move one key from it. Otherwise we should try to merge them. + * (A branch page must never have less than 2 keys.) */ - if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= FILL_THRESHOLD && NUMKEYS(mn.mc_pg[mn.mc_top]) > 2) + minkeys = 1 + (IS_BRANCH(mn.mc_pg[mn.mc_top])); + if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= FILL_THRESHOLD && NUMKEYS(mn.mc_pg[mn.mc_top]) > minkeys) return mdb_node_move(&mn, mc); else { if (mc->mc_ki[ptop] == 0)