}
}
+// Defined here because there is a circular dependency between OpsExecuter and PG
+uint32_t OpsExecuter::get_pool_stripe_width() const {
+ return pg->get_pool().info.get_stripe_width();
+}
+
static inline std::unique_ptr<const PGLSFilter> get_pgls_filter(
const std::string& type,
bufferlist::const_iterator& iter)
Ref<PG> pg; // for the sake of object class
ObjectContextRef obc;
const OpInfo& op_info;
- const pg_pool_t& pool_info; // for the sake of the ObjClass API
PGBackend& backend;
ceph::static_ptr<ExecutableMessage,
sizeof(ExecutableMessagePimpl<void>)> msg;
OpsExecuter(Ref<PG> pg,
ObjectContextRef obc,
const OpInfo& op_info,
- const pg_pool_t& pool_info,
PGBackend& backend,
const MsgT& msg)
: pg(std::move(pg)),
obc(std::move(obc)),
op_info(op_info),
- pool_info(pool_info),
backend(backend),
msg(std::in_place_type_t<ExecutableMessagePimpl<MsgT>>{}, &msg) {
}
return num_read + num_write;
}
- uint32_t get_pool_stripe_width() const {
- return pool_info.get_stripe_width();
- }
+ uint32_t get_pool_stripe_width() const;
bool has_seen_write() const {
return num_write > 0;
}
return do_osd_ops_execute<MURef<MOSDOpReply>>(
seastar::make_lw_shared<OpsExecuter>(
- Ref<PG>{this}, std::move(obc), op_info, *m),
+ Ref<PG>{this}, std::move(obc), op_info, get_backend(), *m),
m->ops,
op_info,
[this, m, rvec = op_info.allows_returnvec()] {
{
return do_osd_ops_execute<void>(
seastar::make_lw_shared<OpsExecuter>(
- Ref<PG>{this}, std::move(obc), op_info, msg_params),
+ Ref<PG>{this}, std::move(obc), op_info, get_backend(), msg_params),
ops,
std::as_const(op_info),
std::move(success_func),