}
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);
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(
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(