]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: separate producing EC's WritePlan out into a dedicated method
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Sun, 11 May 2025 06:51:23 +0000 (06:51 +0000)
committerAlex Ainscow <aainscow@uk.ibm.com>
Wed, 17 Sep 2025 08:43:26 +0000 (09:43 +0100)
For the sake of sharing with crimson in next commits.

Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
(cherry picked from commit e06c0c6dd08fd6d2418a189532171553d63a9deb)

src/osd/ECBackend.cc
src/osd/ECBackend.h

index c5158d8757723ced8d31459ca27bd43a72f741d7..2716b72a532088ace9d178f69e3c85a8eafcb057 100644 (file)
@@ -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<const hobject_t, PGTransaction::ObjectOperation> &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(
index f951a2f56c444407afc80de89f1b200231acc43b..7f3f9418f4649427b607ef2a1bfb236771a0c35b 100644 (file)
@@ -328,10 +328,15 @@ public:
     size_t
   > get_attrs_n_size_from_disk(const hobject_t &hoid);
 
-  std::optional<object_info_t> get_object_info_from_obc(
+  static std::optional<object_info_t> 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(