From f400e6ea4d5973bd6a899c8b39ec269cc1476149 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Sun, 11 May 2025 06:51:23 +0000 Subject: [PATCH] osd: separate producing EC's WritePlan out into a dedicated method For the sake of sharing with crimson in next commits. Signed-off-by: Radoslaw Zarzynski (cherry picked from commit e06c0c6dd08fd6d2418a189532171553d63a9deb) --- src/osd/ECBackend.cc | 23 ++++++++++++++++++++--- src/osd/ECBackend.h | 7 ++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index c5158d87577..2716b72a532 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -987,7 +987,24 @@ void ECBackend::submit_transaction( } ECTransaction::WritePlan &plans = op->plan; - op->t->safe_create_traverse( + ceph_assert(op->plan.plans.empty()); + op->plan = get_write_plan( + sinfo, + *op->t, + get_parent()->get_dpp()); + ldpp_dout(get_parent()->get_dpp(), 20) << __func__ + << " plans=" << plans + << dendl; + rmw_pipeline.start_rmw(std::move(op)); +} + +ECTransaction::WritePlan ECBackend::get_write_plan( + const ECUtil::stripe_info_t &sinfo, + PGTransaction &t, + DoutPrefixProvider *dpp) { + ECTransaction::WritePlan plans; + auto obc_map = t.obc_map; + t.safe_create_traverse( [&](std::pair &i) { const auto &[oid, inner_op] = i; auto &obc = obc_map.at(oid); @@ -1027,11 +1044,11 @@ void ECBackend::submit_transaction( if (plan.to_read) plans.want_read = true; plans.plans.emplace_back(std::move(plan)); - }); + }); ldpp_dout(get_parent()->get_dpp(), 20) << __func__ << " plans=" << plans << dendl; - rmw_pipeline.start_rmw(std::move(op)); + return plans; } int ECBackend::objects_read_sync( diff --git a/src/osd/ECBackend.h b/src/osd/ECBackend.h index f951a2f56c4..7f3f9418f46 100644 --- a/src/osd/ECBackend.h +++ b/src/osd/ECBackend.h @@ -328,10 +328,15 @@ public: size_t > get_attrs_n_size_from_disk(const hobject_t &hoid); - std::optional get_object_info_from_obc( + static std::optional get_object_info_from_obc( ObjectContextRef &obc_map ); + ECTransaction::WritePlan get_write_plan( + const ECUtil::stripe_info_t &sinfo, + PGTransaction &t, + DoutPrefixProvider *dpp); + public: int object_stat(const hobject_t &hoid, struct stat *st); ECBackend( -- 2.39.5