namespace crimson::osd {
-ECBackend::ECBackend(shard_id_t shard,
+ECBackend::ECBackend(pg_shard_t whoami,
ECBackend::CollectionRef coll,
crimson::osd::ShardServices& shard_services,
const ec_profile_t&,
bool fast_read,
bool allows_ecoverwrites,
DoutPrefixProvider &dpp)
- : PGBackend{shard, coll, shard_services, dpp},
+ : PGBackend{whoami, coll, shard_services, dpp},
sinfo{ec_impl->get_data_chunk_count(), stripe_width},
fast_read{fast_read},
allows_ecoverwrites{allows_ecoverwrites}
std::unique_ptr<PGBackend>
PGBackend::create(pg_t pgid,
- const pg_shard_t pg_shard,
+ const pg_shard_t whoami,
const pg_pool_t& pool,
crimson::osd::PG& pg,
crimson::os::CollectionRef coll,
{
switch (pool.type) {
case pg_pool_t::TYPE_REPLICATED:
- return std::make_unique<ReplicatedBackend>(pgid, pg_shard, pg,
+ return std::make_unique<ReplicatedBackend>(pgid, whoami, pg,
coll, shard_services,
dpp);
case pg_pool_t::TYPE_ERASURE:
- return std::make_unique<ECBackend>(pg_shard.shard, coll, shard_services,
+ return std::make_unique<ECBackend>(whoami, coll, shard_services,
std::move(ec_profile),
pool.stripe_width,
pool.fast_read,
}
}
-PGBackend::PGBackend(shard_id_t shard,
+PGBackend::PGBackend(pg_shard_t whoami,
CollectionRef coll,
crimson::osd::ShardServices &shard_services,
DoutPrefixProvider &dpp)
- : shard{shard},
+ : whoami{whoami},
coll{coll},
shard_services{shard_services},
dpp{dpp},
{
return interruptor::make_interruptible(store->get_attrs(
coll,
- ghobject_t{oid, ghobject_t::NO_GEN, shard})).safe_then_interruptible(
+ ghobject_t{oid, ghobject_t::NO_GEN, get_shard()})).safe_then_interruptible(
[oid](auto &&attrs) -> load_metadata_ertr::future<loaded_object_md_t::ref>{
loaded_object_md_t::ref ret(new loaded_object_md_t());
if (auto oiiter = attrs.find(OI_ATTR); oiiter != attrs.end()) {
// 1) Delete current head
if (os.exists) {
txn.remove(coll->get_cid(), ghobject_t{os.oi.soid,
- ghobject_t::NO_GEN, shard});
+ ghobject_t::NO_GEN, get_shard()});
}
// 2) Clone correct snapshot into head
txn.clone(coll->get_cid(), ghobject_t{resolved_obc->obs.oi.soid},
{
// todo: snapset
txn.remove(coll->get_cid(),
- ghobject_t{os.oi.soid, ghobject_t::NO_GEN, shard});
+ ghobject_t{os.oi.soid, ghobject_t::NO_GEN, get_shard()});
os.oi.size = 0;
os.oi.new_object();
os.exists = false;
return seastar::now();
}
txn.remove(coll->get_cid(),
- ghobject_t{os.oi.soid, ghobject_t::NO_GEN, shard});
+ ghobject_t{os.oi.soid, ghobject_t::NO_GEN, get_shard()});
if (os.oi.is_omap()) {
os.oi.clear_flag(object_info_t::FLAG_OMAP);
os.oi.set_flag(object_info_t::FLAG_WHITEOUT);
delta_stats.num_whiteouts++;
txn.create(coll->get_cid(),
- ghobject_t{os.oi.soid, ghobject_t::NO_GEN, shard});
+ ghobject_t{os.oi.soid, ghobject_t::NO_GEN, get_shard()});
return seastar::now();
}
PGBackend::list_objects(
const hobject_t& start, const hobject_t &end, uint64_t limit) const
{
- auto gstart = start.is_min() ? ghobject_t{} : ghobject_t{start, 0, shard};
- auto gend = end.is_max() ? ghobject_t::get_max() : ghobject_t{end, 0, shard};
+ auto gstart = start.is_min() ? ghobject_t{} : ghobject_t{start, 0, get_shard()};
+ auto gend = end.is_max() ? ghobject_t::get_max() : ghobject_t{end, 0, get_shard()};
auto [gobjects, next] = co_await interruptor::make_interruptible(
store->list_objects(coll, gstart, gend, limit));
std::tuple<interruptible_future<>,
interruptible_future<>>;
using rep_op_fut_t = interruptible_future<rep_op_ret_t>;
- PGBackend(shard_id_t shard, CollectionRef coll,
+ PGBackend(pg_shard_t whoami, CollectionRef coll,
crimson::osd::ShardServices &shard_services,
DoutPrefixProvider &dpp);
virtual ~PGBackend() = default;
static std::unique_ptr<PGBackend> create(pg_t pgid,
- const pg_shard_t pg_shard,
+ const pg_shard_t whoami,
const pg_pool_t& pool,
crimson::osd::PG &pg,
crimson::os::CollectionRef coll,
virtual seastar::future<> stop() = 0;
virtual void on_actingset_changed(bool same_primary) = 0;
protected:
- const shard_id_t shard;
+ const pg_shard_t whoami;
CollectionRef coll;
crimson::osd::ShardServices &shard_services;
DoutPrefixProvider &dpp; ///< provides log prefix context
virtual seastar::future<> request_committed(
const osd_reqid_t& reqid,
const eversion_t& at_version) = 0;
+ const shard_id_t& get_shard() const {
+ return whoami.shard;
+ }
public:
struct loaded_object_md_t {
ObjectState os;