From: Radosław Zarzyński Date: Fri, 4 Aug 2023 13:07:06 +0000 (+0200) Subject: crimson/osd: PGBackend stores pg_shard_t instead of just shard_id_t X-Git-Tag: v21.0.0~3^2~89 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a1dbf1177223d3293a926175e7a59bcaa2939be5;p=ceph.git crimson/osd: PGBackend stores pg_shard_t instead of just shard_id_t It's worth a note that `ReplicatedBackend` (derivate of `PGBackend`) already holds `pg_shard_t`, so information is duplicated. As the `ECBackend` starts needs `pg_shard_t` as well, let's rework. Signed-off-by: Radosław Zarzyński --- diff --git a/src/crimson/osd/ec_backend.cc b/src/crimson/osd/ec_backend.cc index 673dd1482e80..379e01f8eced 100644 --- a/src/crimson/osd/ec_backend.cc +++ b/src/crimson/osd/ec_backend.cc @@ -12,7 +12,7 @@ namespace { namespace crimson::osd { -ECBackend::ECBackend(shard_id_t shard, +ECBackend::ECBackend(pg_shard_t whoami, ECBackend::CollectionRef coll, crimson::osd::ShardServices& shard_services, store_index_t store_index, @@ -21,7 +21,7 @@ ECBackend::ECBackend(shard_id_t shard, bool fast_read, bool allows_ecoverwrites, DoutPrefixProvider &dpp) - : PGBackend{shard, coll, shard_services, store_index, dpp}, + : PGBackend{whoami, coll, shard_services, store_index, dpp}, sinfo{ec_impl->get_data_chunk_count(), stripe_width}, fast_read{fast_read}, allows_ecoverwrites{allows_ecoverwrites} diff --git a/src/crimson/osd/ec_backend.h b/src/crimson/osd/ec_backend.h index 0c14c109011d..4bbcd4ef8771 100644 --- a/src/crimson/osd/ec_backend.h +++ b/src/crimson/osd/ec_backend.h @@ -20,7 +20,7 @@ namespace crimson::osd { class ECBackend : public PGBackend { public: - ECBackend(shard_id_t shard, + ECBackend(pg_shard_t whoami, CollectionRef coll, crimson::osd::ShardServices& shard_services, store_index_t store_index, diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index baa5dffa37b8..0864c06b2e24 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -47,7 +47,7 @@ namespace crimson::osd { 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, @@ -57,11 +57,11 @@ PGBackend::create(pg_t pgid, { switch (pool.type) { case pg_pool_t::TYPE_REPLICATED: - return std::make_unique(pgid, pg_shard, pg, + return std::make_unique(pgid, whoami, pg, coll, shard_services, dpp); case pg_pool_t::TYPE_ERASURE: - return std::make_unique( pg_shard.shard, coll, shard_services, pg.get_store_index(), + return std::make_unique(whoami, coll, shard_services, pg.get_store_index(), std::move(ec_profile), pool.stripe_width, pool.fast_read, @@ -73,12 +73,12 @@ PGBackend::create(pg_t pgid, } } -PGBackend::PGBackend(shard_id_t shard, +PGBackend::PGBackend(pg_shard_t whoami, CollectionRef coll, crimson::osd::ShardServices &shard_services, store_index_t store_index, DoutPrefixProvider &dpp) - : shard{shard}, + : whoami{whoami}, coll{coll}, shard_services{shard_services}, dpp{dpp}, @@ -93,7 +93,7 @@ PGBackend::load_metadata(const hobject_t& oid) crimson::os::with_store<&crimson::os::FuturizedStore::Shard::get_attrs>( store, coll, - ghobject_t{oid, ghobject_t::NO_GEN, shard}, 0)).safe_then_interruptible( + ghobject_t{oid, ghobject_t::NO_GEN, get_shard()}, 0)).safe_then_interruptible( [oid](auto &&attrs) -> load_metadata_ertr::future{ loaded_object_md_t::ref ret(new loaded_object_md_t()); if (auto oiiter = attrs.find(OI_ATTR); oiiter != attrs.end()) { @@ -798,7 +798,7 @@ PGBackend::rollback_iertr::future<> PGBackend::rollback( // 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}, @@ -974,7 +974,7 @@ PGBackend::remove(ObjectState& os, ceph::os::Transaction& txn) { // 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; @@ -1005,7 +1005,7 @@ PGBackend::remove(ObjectState& os, ceph::os::Transaction& txn, 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); @@ -1033,7 +1033,7 @@ PGBackend::remove(ObjectState& os, ceph::os::Transaction& txn, 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(); } @@ -1055,8 +1055,8 @@ PGBackend::interruptible_future, hobject_t>> 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( crimson::os::with_store<&crimson::os::FuturizedStore::Shard::list_objects>( store, coll, gstart, gend, limit, 0)); diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 5613b8839cb6..ca82ebec8c5f 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -63,13 +63,13 @@ public: std::tuple, interruptible_future<>>; using rep_op_fut_t = interruptible_future; - PGBackend(shard_id_t shard, CollectionRef coll, + PGBackend(pg_shard_t whoami, CollectionRef coll, crimson::osd::ShardServices &shard_services, store_index_t store_index, DoutPrefixProvider &dpp); virtual ~PGBackend() = default; static std::unique_ptr 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, @@ -436,7 +436,7 @@ public: 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 @@ -444,6 +444,9 @@ protected: 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; diff --git a/src/crimson/osd/replicated_backend.cc b/src/crimson/osd/replicated_backend.cc index ef062d14be7c..af99b8ca3568 100644 --- a/src/crimson/osd/replicated_backend.cc +++ b/src/crimson/osd/replicated_backend.cc @@ -23,9 +23,8 @@ ReplicatedBackend::ReplicatedBackend(pg_t pgid, ReplicatedBackend::CollectionRef coll, crimson::osd::ShardServices& shard_services, DoutPrefixProvider &dpp) - : PGBackend{whoami.shard, coll, shard_services, pg.get_store_index(), dpp}, + : PGBackend{whoami, coll, shard_services, pg.get_store_index(), dpp}, pgid{pgid}, - whoami{whoami}, pg(pg), pct_timer([this, &pg]() mutable { Ref pgref(&pg); diff --git a/src/crimson/osd/replicated_backend.h b/src/crimson/osd/replicated_backend.h index 6e33d6eacf8b..88110e5a54b7 100644 --- a/src/crimson/osd/replicated_backend.h +++ b/src/crimson/osd/replicated_backend.h @@ -47,7 +47,6 @@ private: epoch_t min_epoch, epoch_t max_epoch, std::vector&& log_entries) final; const pg_t pgid; - const pg_shard_t whoami; class pending_on_t : public seastar::weakly_referencable { public: pending_on_t(