mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-04-12 15:10:31 +08:00
ITS#8221 don't merge branch pages needlessly
This commit is contained in:
parent
ddb7478e06
commit
4b01cb3727
@ -7685,17 +7685,23 @@ mdb_rebalance(MDB_cursor *mc)
|
||||
{
|
||||
MDB_node *node;
|
||||
int rc;
|
||||
unsigned int ptop, minkeys;
|
||||
unsigned int ptop, minkeys, thresh;
|
||||
MDB_cursor mn;
|
||||
indx_t oldki;
|
||||
|
||||
minkeys = 1 + (IS_BRANCH(mc->mc_pg[mc->mc_top]));
|
||||
if (IS_BRANCH(mc->mc_pg[mc->mc_top])) {
|
||||
minkeys = 1;
|
||||
thresh = 1;
|
||||
} else {
|
||||
minkeys = 2;
|
||||
thresh = FILL_THRESHOLD;
|
||||
}
|
||||
DPRINTF(("rebalancing %s page %"Z"u (has %u keys, %.1f%% full)",
|
||||
IS_LEAF(mc->mc_pg[mc->mc_top]) ? "leaf" : "branch",
|
||||
mdb_dbg_pgno(mc->mc_pg[mc->mc_top]), NUMKEYS(mc->mc_pg[mc->mc_top]),
|
||||
(float)PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) / 10));
|
||||
|
||||
if (PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) >= FILL_THRESHOLD &&
|
||||
if (PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) >= thresh &&
|
||||
NUMKEYS(mc->mc_pg[mc->mc_top]) >= minkeys) {
|
||||
DPRINTF(("no need to rebalance page %"Z"u, above fill threshold",
|
||||
mdb_dbg_pgno(mc->mc_pg[mc->mc_top])));
|
||||
@ -7829,8 +7835,7 @@ mdb_rebalance(MDB_cursor *mc)
|
||||
* move one key from it. Otherwise we should try to merge them.
|
||||
* (A branch page must never have less than 2 keys.)
|
||||
*/
|
||||
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) {
|
||||
if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= thresh && NUMKEYS(mn.mc_pg[mn.mc_top]) > minkeys) {
|
||||
rc = mdb_node_move(&mn, mc);
|
||||
if (mc->mc_ki[ptop]) {
|
||||
oldki++;
|
||||
|
Loading…
x
Reference in New Issue
Block a user