push
github
vinyl: fix gc of incomplete runs left after dropped space A space may be dropped while it's being compacted. The vinyl garbage collector purges all run files left after a dropped space, including `.run.inprogress` and `.index.inprogress` files currently being written by compaction tasks. As a result, when a compaction task is completed, it may fail to rename the new run file with a `ENOENT` error: ``` vinyl.compaction.0/102/task xlog.c:800 !> can't rename ./512/0/00000000000000000006.index.inprogress to ./512/0/00000000000000000006.index: No such file or directory ``` This bug has another effect. If the compaction starts writing the file after the garbage collector purges meta-information about it from vylog, the run file will be successfully written but never committed to vylog. As a result, it will never be deleted. Let's fix this issue by making the garbage collector skip incomplete runs unless explicitly instructed to delete them (`VY_GC_INCOMPLETE`). Compaction tasks now discard run files on completion if the space was dropped while compaction was in progress so that they are removed during the next garbage collection round. Closes #11163 NO_DOC=bug fix (cherry picked from commit 219e27d18)
63428 of 114804 branches covered (55.25%)
7 of 7 new or added lines in 2 files covered. (100.0%)
47 existing lines in 9 files now uncovered.94381 of 109719 relevant lines covered (86.02%)
1891383.34 hits per line