From f2c05e21ee6dbcf1a41dfc09eadb09d949fa8a55 Mon Sep 17 00:00:00 2001 From: Asias He Date: Tue, 7 Jun 2022 15:35:13 +0800 Subject: [PATCH] repair: Avoid stall in working_row_hashes Fix the following stall during repair: ``` Reactor stalled for 1 ms on shard 0. Backtrace: [Backtrace #11] {build/release/scylla} 0x4c6deb2: void seastar::backtrace(seastar::backtrace_buffer::append_backtrace_oneline()::{lambda(seastar::frame)#1}&&) at ./ (inlined by) seastar::backtrace_buffer::append_backtrace_oneline() at ./build/release/seastar/./seastar/src/core/reactor.cc:772 (inlined by) seastar::print_with_backtrace(seastar::backtrace_buffer&, bool) at ./build/release/seastar/./seastar/src/core/reactor.cc:791 {build/release/scylla} 0x4c6cb10: seastar::internal::cpu_stall_detector::generate_trace() at ./build/release/seastar/./seastar/src/core/reactor.cc:1366 {build/release/scylla} 0x4c6ddc0: seastar::internal::cpu_stall_detector::maybe_report() at ./build/release/seastar/./seastar/src/core/reactor.cc:1108 (inlined by) seastar::internal::cpu_stall_detector::on_signal() at ./build/release/seastar/./seastar/src/core/reactor.cc:1125 (inlined by) seastar::reactor::block_notifier(int) at ./build/release/seastar/./seastar/src/core/reactor.cc:1349 {build/release/scylla} 0x7f75551bfa1f: ?? ??:0 {build/release/scylla} 0x37abf12: repair_hash::operator<(repair_hash const&) const at ././repair/hash.hh:30 (inlined by) std::less::operator()(repair_hash const&, repair_hash const&) const at /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_function.h:400 (inlined by) bool absl::container_internal::key_compare_adapter, repair_hash>::checked_compare::operator()(repair_hash const&, repair_hash const&) const at ./abseil/absl/containe (inlined by) absl::container_internal::SearchResult absl::container_internal::btree_node, std::allocator, 256, false> >::binary_sear (inlined by) _ZNK4absl18container_internal10btree_nodeINS0_10set_paramsI11repair_hashSt4lessIS3_ESaIS3_ELi256ELb0EEEE13binary_searchIS3_NS0_19key_compare_adapterIS5_S3_E15checked_compareEEENS0_12SearchResultIiXsr23btree_is_key_com (inlined by) absl::container_internal::SearchResult absl::container_internal::btree_node, std::allocator, 256, false> >::lower_bound (inlined by) absl::container_internal::SearchResult, std::allocator, std::allocator, 256, false> >, repair_hash (inlined by) std::pair, std::allocator, 256, false> >, repair_hash (inlined by) operator() at ./repair/row_level.cc:896 (inlined by) seastar::future seastar::futurize::invoke, std::allocator >&)#1}::operator()(absl::btree_set, std::allocator >&)#1}::operator()(absl::btree_set, repair_meta::working_row_hashes()::{lambda(absl::btree_set, std::allocator >&) {build/release/scylla} 0x4c7ee64: seastar::reactor::run_tasks(seastar::reactor::task_queue&) at ./build/release/seastar/./seastar/src/core/reactor.cc:2356 (inlined by) seastar::reactor::run_some_tasks() at ./build/release/seastar/./seastar/src/core/reactor.cc:2769 {build/release/scylla} 0x4c80247: seastar::reactor::do_run() at ./build/release/seastar/./seastar/src/core/reactor.cc:2938 {build/release/scylla} 0x4c7f49c: seastar::reactor::run() at ./build/release/seastar/./seastar/src/core/reactor.cc:2821 {build/release/scylla} 0x4c264d8: seastar::app_template::run_deprecated(int, char**, std::function&&) at ./build/release/seastar/./seastar/src/core/app-template.cc:265 {build/release/scylla} 0x4c259b1: seastar::app_template::run(int, char**, std::function ()>&&) at ./build/release/seastar/./seastar/src/core/app-template.cc:156 {build/release/scylla} 0xf5c16f: scylla_main(int, char**) at ./main.cc:535 {build/release/scylla} 0xf5999a: std::function::operator()(int, char**) const at /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/std_function.h:590 (inlined by) main at ./main.cc:1575 {build/release/scylla} 0x27b74: ?? ??:0 {build/release/scylla} 0xf5892d: _start at ??:? ``` Found with scylla --blocked-reactor-notify-ms 1 Refs #10665 --- repair/row_level.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repair/row_level.cc b/repair/row_level.cc index afa10c0aff..d905e4251a 100644 --- a/repair/row_level.cc +++ b/repair/row_level.cc @@ -892,9 +892,9 @@ public: future working_row_hashes() { return do_with(repair_hash_set(), [this] (repair_hash_set& hashes) { - return do_for_each(_working_row_buf, [&hashes] (repair_row& r) { + return do_for_each(_working_row_buf, [&hashes] (repair_row& r) mutable { hashes.emplace(r.hash()); - }).then([&hashes] { + }).then([&hashes] () mutable { return std::move(hashes); }); });