From b002d5a4413ef281f79870bf5b545a5930b09d77 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Thu, 19 Oct 2023 11:24:03 +0000 Subject: [PATCH] crimson/osd/pg: log_reply() into seperate method Signed-off-by: Matan Breizman --- src/crimson/osd/pg.cc | 64 ++++++++++++++++++++++++------------------- src/crimson/osd/pg.h | 3 ++ 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index a64530e801e65..3f9a9e0f7a2f1 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -1047,31 +1047,9 @@ PG::do_osd_ops( fut = submit_error_log(m, op_info, obc, e, rep_tid, version); } return fut.then([m, e, epoch, &op_info, rep_tid, &version, last_complete, this] { - auto log_reply = [m, e, this] { - auto reply = crimson::make_message( - m.get(), -e.value(), get_osdmap_epoch(), 0, false); - if (m->ops.empty() ? 0 : - m->ops.back().op.flags & CEPH_OSD_OP_FLAG_FAILOK) { - reply->set_result(0); - } - // For all ops except for CMPEXT, the correct error value is encoded - // in e.value(). For CMPEXT, osdop.rval has the actual error value. - if (e.value() == ct_error::cmp_fail_error_value) { - assert(!m->ops.empty()); - for (auto &osdop : m->ops) { - if (osdop.rval < 0) { - reply->set_result(osdop.rval); - break; - } - } - } - reply->set_enoent_reply_versions( - peering_state.get_info().last_update, - peering_state.get_info().last_user_version); - reply->add_flags(CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK); - return do_osd_ops_iertr::make_ready_future>( - std::move(reply)); - }; + auto log_reply_fut = [m, e, this] { + return log_reply(m, e); + }; if (!peering_state.pg_has_reset_since(epoch) && op_info.may_write()) { auto it = log_entry_update_waiting_on.find(rep_tid); @@ -1087,20 +1065,50 @@ PG::do_osd_ops( } } else { return it->second.all_committed.get_shared_future() - .then([this, &version, last_complete, log_reply = std::move(log_reply)] { + .then([this, &version, last_complete, log_reply_fut = std::move(log_reply_fut)] { if (version != eversion_t()) { peering_state.complete_write(version, last_complete); } - return log_reply(); + return log_reply_fut(); }); } } - return log_reply(); + return log_reply_fut(); }); }); }); } +PG::do_osd_ops_iertr::future> +PG::log_reply( + Ref m, + const std::error_code& e) +{ + auto reply = crimson::make_message( + m.get(), -e.value(), get_osdmap_epoch(), 0, false); + if (m->ops.empty() ? 0 : + m->ops.back().op.flags & CEPH_OSD_OP_FLAG_FAILOK) { + reply->set_result(0); + } + // For all ops except for CMPEXT, the correct error value is encoded + // in e.value(). For CMPEXT, osdop.rval has the actual error value. + if (e.value() == ct_error::cmp_fail_error_value) { + assert(!m->ops.empty()); + for (auto &osdop : m->ops) { + if (osdop.rval < 0) { + reply->set_result(osdop.rval); + break; + } + } + } + reply->set_enoent_reply_versions( + peering_state.get_info().last_update, + peering_state.get_info().last_user_version); + reply->add_flags(CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK); + return do_osd_ops_iertr::make_ready_future>( + std::move(reply)); +} + PG::do_osd_ops_iertr::future> PG::do_osd_ops( ObjectContextRef obc, diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 380820e8250d4..6a0231e452f60 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -576,6 +576,9 @@ private: using do_osd_ops_failure_func_t = std::function(const std::error_code&)>; struct do_osd_ops_params_t; + do_osd_ops_iertr::future> log_reply( + Ref m, + const std::error_code& e); do_osd_ops_iertr::future> do_osd_ops( ObjectContextRef obc, std::vector& ops, -- 2.39.5