• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tarantool / tarantool / 13459354959

21 Feb 2025 02:54PM UTC coverage: 87.419% (-0.003%) from 87.422%
13459354959

push

github

locker
vinyl: fix race between manual compaction and range splitting

To force compaction, index:compact() sets the needs_compaction flag
on all ranges of the target LSM tree. When a range is split, the new
ranges inherit this flag. The problem is that there's a yield caused by
vy_log_tx_commit() between setting the flag in vy_lsm_split_range() and
adding the new ranges to the LSM tree. If vinyl_index_compact() is
called while vy_lsm_split_range() is waiting for vy_log_tx_commit() to
complete, the needs_compaction flag will be set for the old range but
not for the new ranges hence compaction won't be triggered for them.
This breaks assumptions made by some tests (select_consistency_test,
for example).

Fix this issue by setting the needs_compaction flag right before
modifying the LSM tree, after the vylog record is committed.

Note that vy_lsm_coalesce_range() isn't affected because it already
sets the flag after the vylog write.

Closes #11019

NO_DOC=bug fix
NO_TEST=checked by existing tests; difficult to reproduce
NO_CHANGELOG=minor issue; unlikely to happen; no adverse effects;
             easy to work around (just call index:compact() again)

(cherry picked from commit 501ef6165)

69846 of 123749 branches covered (56.44%)

3 of 3 new or added lines in 1 file covered. (100.0%)

39 existing lines in 14 files now uncovered.

102876 of 117682 relevant lines covered (87.42%)

2174282.25 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

86.49
/src/box/lua/ctl.c


Source Not Available

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc