From 6ee493f1a67cb693aafb831388fcae7030d3710b Mon Sep 17 00:00:00 2001 From: JaySon-Huang Date: Tue, 23 Sep 2025 17:58:57 +0800 Subject: [PATCH 1/2] Fix data race in checkSegmentUpdate Signed-off-by: JaySon-Huang --- dbms/src/Storages/DeltaMerge/DeltaMergeStore.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dbms/src/Storages/DeltaMerge/DeltaMergeStore.cpp b/dbms/src/Storages/DeltaMerge/DeltaMergeStore.cpp index e7dc4d6a2da..ec6ef7d84e9 100644 --- a/dbms/src/Storages/DeltaMerge/DeltaMergeStore.cpp +++ b/dbms/src/Storages/DeltaMerge/DeltaMergeStore.cpp @@ -1707,11 +1707,13 @@ bool DeltaMergeStore::checkSegmentUpdate( if (shutdown_called.load(std::memory_order_relaxed)) return; - auto [added, heavy] = background_tasks.tryAddTask( - task, - thread_type, - std::max(id_to_segment.size() * 2, background_pool.getNumberOfThreads() * 3), - log); + size_t max_task_num = 0; + { + std::shared_lock lock(read_write_mutex); // protect `id_to_segment` + max_task_num = std::max(id_to_segment.size() * 2, background_pool.getNumberOfThreads() * 3); + } + + auto [added, heavy] = background_tasks.tryAddTask(task, thread_type, max_task_num, log); // Prevent too many tasks. if (!added) return; From 2c6c7f2e18b7f10d906663d668c12f8bd92cda4b Mon Sep 17 00:00:00 2001 From: JaySon-Huang Date: Fri, 26 Sep 2025 09:02:40 +0800 Subject: [PATCH 2/2] Add more debug log for random test on RowKey.ToNextKeyIntHandle Signed-off-by: JaySon-Huang --- dbms/src/Storages/DeltaMerge/tests/gtest_key_range.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dbms/src/Storages/DeltaMerge/tests/gtest_key_range.cpp b/dbms/src/Storages/DeltaMerge/tests/gtest_key_range.cpp index 50d55cd8b58..922f6c3a6de 100644 --- a/dbms/src/Storages/DeltaMerge/tests/gtest_key_range.cpp +++ b/dbms/src/Storages/DeltaMerge/tests/gtest_key_range.cpp @@ -193,9 +193,11 @@ TEST(RowKey, ToNextKeyIntHandle) key_end.insert(key_end.end(), rand_suffix.begin(), rand_suffix.end()); LOG_INFO( Logger::get(), - "key_end={} rand_suffix={}", + "key_end={} rand_length={} rand_suffix={} rand_suffix_size={}", key_end.toDebugString(), - Redact::keyToDebugString(rand_suffix.data(), rand_length)); + rand_length, + Redact::keyToDebugString(rand_suffix.data(), rand_length), + rand_suffix.size()); const auto range_keys = std::make_shared( RecordKVFormat::genKey(table_id, 0),