From f37e915e9faf26d9ee143a892d291557e0746356 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 7 Feb 2021 13:53:11 +0800 Subject: [PATCH] crimson/osd: remove no-op func passed to OpsExecuter::flush_changes() no need to create an empty func for an request which creates no transactions. Signed-off-by: Kefu Chai --- src/crimson/osd/ops_executer.h | 28 ++++++++++++---------------- src/crimson/osd/pg.cc | 7 ------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index 42fcf61b8003d..54a715b0060b4 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -180,8 +180,8 @@ public: osd_op_errorator::future<> execute_op(class OSDOp& osd_op); - template - osd_op_errorator::future<> flush_changes(Func&& func, MutFunc&& mut_func) &&; + template + osd_op_errorator::future<> flush_changes(MutFunc&& mut_func) &&; const auto& get_message() const { return msg; @@ -235,29 +235,25 @@ auto OpsExecuter::with_effect_on_obc( return std::forward(main_func)(ctx_ref); } -template +template OpsExecuter::osd_op_errorator::future<> OpsExecuter::flush_changes( - Func&& func, MutFunc&& mut_func) && { const bool want_mutate = !txn.empty(); // osd_op_params are instantiated by every wr-like operation. assert(osd_op_params || !want_mutate); assert(obc); + auto maybe_mutated = osd_op_errorator::now(); + if (want_mutate) { + maybe_mutated = std::forward(mut_func)(std::move(txn), + std::move(obc), + std::move(*osd_op_params), + user_modify); + } if (__builtin_expect(op_effects.empty(), true)) { - return want_mutate ? std::forward(mut_func)(std::move(txn), - std::move(obc), - std::move(*osd_op_params), - user_modify) - : std::forward(func)(std::move(obc)); + return maybe_mutated; } else { - return (want_mutate ? std::forward(mut_func)(std::move(txn), - std::move(obc), - std::move(*osd_op_params), - user_modify) - : std::forward(func)(std::move(obc)) - ).safe_then([this] { + return maybe_mutated.safe_then([this] { // let's do the cleaning of `op_effects` in destructor return crimson::do_for_each(op_effects, [] (auto& op_effect) { return op_effect->execute(); diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 145293565b380..28551eb0a264b 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -728,13 +728,6 @@ PG::do_osd_ops( *m, obc->obs.oi.soid); return std::move(*ox).flush_changes( - [m] (auto&& obc) -> osd_op_errorator::future<> { - logger().debug( - "do_osd_ops: {} - object {} txn is empty, bypassing mutate", - *m, - obc->obs.oi.soid); - return osd_op_errorator::now(); - }, [this, m, &op_info] (auto&& txn, auto&& obc, auto&& osd_op_p, -- 2.39.5