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-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=04f9baae6adce24e31fbdb4c1bf2762762bb84a5;p=ceph-ci.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 46002967953..9342a61b5f1 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, const ec_profile_t&, @@ -20,7 +20,7 @@ ECBackend::ECBackend(shard_id_t shard, 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} diff --git a/src/crimson/osd/ec_backend.h b/src/crimson/osd/ec_backend.h index 0b5e1443910..d162fdc6531 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, const ec_profile_t& ec_profile, diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index ca2b0aed06d..b4f65a3e84e 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, + return std::make_unique(whoami, coll, shard_services, std::move(ec_profile), pool.stripe_width, pool.fast_read, @@ -73,11 +73,11 @@ PGBackend::create(pg_t pgid, } } -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}, @@ -90,7 +90,7 @@ PGBackend::load_metadata(const hobject_t& oid) { 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 ret(new loaded_object_md_t()); if (auto oiiter = attrs.find(OI_ATTR); oiiter != attrs.end()) { @@ -789,7 +789,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}, @@ -965,7 +965,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; @@ -996,7 +996,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); @@ -1024,7 +1024,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(); } @@ -1046,8 +1046,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( store->list_objects(coll, gstart, gend, limit)); diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 52b416e36ba..4c5956e3e7e 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -63,12 +63,12 @@ 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, 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, @@ -435,7 +435,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 @@ -443,6 +443,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 af5df2d4ab6..4122439cda0 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, dpp}, + : PGBackend{whoami, coll, shard_services, 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 6e33d6eacf8..88110e5a54b 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(