From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Vladimir Davydov Subject: [PATCH v2 2/8] vinyl: update compact priority usual way on range split/coalesce Date: Sun, 16 Sep 2018 20:06:45 +0300 Message-Id: <8da96f62e4b6b8a75c91ce4007c1e10bc38fee5b.1537115208.git.vdavydov.dev@gmail.com> In-Reply-To: References: In-Reply-To: References: To: kostja@tarantool.org Cc: tarantool-patches@freelists.org List-ID: When a few ranges are coalesced, we "force" compaction of the resulting range by raising its compaction priority to max (slice count). There's actually no point in that, because as long as the shape of the resulting LSM tree is OK, we don't need to do extra compaction work. Moreover, it actually doesn't work if a new slice is added to the resulting range by dump before it gets compacted, which is fairly likely, because then its compaction priority will be recalculated as usual. So let's simply call vy_range_update_compact_priority() for the resulting range. When a range is split, the produced ranges will inherit its compaction priority. This is actually incorrect, because range split may change the shape of the tree so let's recalculate priority for each part the usual way, i.e. by calling vy_range_update_compact_priority(). After this patch, there's this only place where we can update compaction priority of a range - it's vy_range_update_compact_priority(). --- src/box/vy_lsm.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/box/vy_lsm.c b/src/box/vy_lsm.c index 71a44f63..a1d4aa80 100644 --- a/src/box/vy_lsm.c +++ b/src/box/vy_lsm.c @@ -1017,7 +1017,7 @@ vy_lsm_split_range(struct vy_lsm *lsm, struct vy_range *range) vy_range_add_slice(part, new_slice); } part->needs_compaction = range->needs_compaction; - part->compact_priority = range->compact_priority; + vy_range_update_compact_priority(part, &lsm->opts); } /* @@ -1129,13 +1129,7 @@ vy_lsm_coalesce_range(struct vy_lsm *lsm, struct vy_range *range) vy_range_delete(it); it = next; } - /* - * Coalescing increases read amplification and breaks the log - * structured layout of the run list, so, although we could - * leave the resulting range as it is, we'd better compact it - * as soon as we can. - */ - result->compact_priority = result->slice_count; + vy_range_update_compact_priority(result, &lsm->opts); vy_lsm_acct_range(lsm, result); vy_lsm_add_range(lsm, result); lsm->range_tree_version++; -- 2.11.0