From eb31d19999fdf2018df4ae815a0fe130dd407532 Mon Sep 17 00:00:00 2001 From: leveldb Team Date: Thu, 15 Aug 2024 21:37:00 +0000 Subject: [PATCH] Allow compaction to finish in TEST_CompactRange Waits for a current transaction to finish in TEST_CompactRange when the `background_work_finished_signal_` signal may be emitted due to an error. This is a prospective fix for flaky crashes observed in b/351680196#comment5. PiperOrigin-RevId: 663457574 --- db/db_impl.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/db/db_impl.cc b/db/db_impl.cc index 1ec2afb867..f96d245583 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -629,6 +629,11 @@ void DBImpl::TEST_CompactRange(int level, const Slice* begin, background_work_finished_signal_.Wait(); } } + // Finish current background compaction in the case where + // `background_work_finished_signal_` was signalled due to an error. + while (background_compaction_scheduled_) { + background_work_finished_signal_.Wait(); + } if (manual_compaction_ == &manual) { // Cancel my manual compaction since we aborted early for some reason. manual_compaction_ = nullptr;