]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: PGBackend stores pg_shard_t instead of just shard_id_t
authorRadosław Zarzyński <rzarzyns@redhat.com>
Fri, 4 Aug 2023 13:07:06 +0000 (15:07 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 24 Mar 2026 16:06:23 +0000 (16:06 +0000)
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 <rzarzyns@redhat.com>
src/crimson/osd/ec_backend.cc
src/crimson/osd/ec_backend.h
src/crimson/osd/pg_backend.cc
src/crimson/osd/pg_backend.h
src/crimson/osd/replicated_backend.cc
src/crimson/osd/replicated_backend.h

index 673dd1482e8078635c7ba9b854aedf7428cc88cf..379e01f8eced78cc9cf79356809475e3789213d9 100644 (file)
@@ -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}
index 0c14c109011d5c47fdf4a1d7fed8691589b21d97..4bbcd4ef87713a1076ed21cb9f7189b41c2b4bf5 100644 (file)
@@ -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,
index baa5dffa37b817a3b658dbf4930ec2df457c3809..0864c06b2e248a291462634eff0179b01bc12fff 100644 (file)
@@ -47,7 +47,7 @@ namespace crimson::osd {
 
 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,
@@ -57,11 +57,11 @@ PGBackend::create(pg_t pgid,
 {
   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, pg.get_store_index(),
+    return std::make_unique<ECBackend>(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>{
         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<std::tuple<std::vector<hobject_t>, 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));
index 5613b8839cb6bc159ba464555985bc60d0d2bfdb..ca82ebec8c5f2f15db7e1e80e6026eb21ff865bb 100644 (file)
@@ -63,13 +63,13 @@ public:
     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,
             store_index_t store_index,
             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,
@@ -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;
index ef062d14be7cda4ca0a4f330842d830d2e1a1e5f..af99b8ca3568ceed5ff19c71a49181c7c03de118 100644 (file)
@@ -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<crimson::osd::PG> pgref(&pg);
index 6e33d6eacf8bc96c7d411d52600767622278ce27..88110e5a54b7890af71a7aebaeba8adb009f2d0c 100644 (file)
@@ -47,7 +47,6 @@ private:
     epoch_t min_epoch, epoch_t max_epoch,
     std::vector<pg_log_entry_t>&& log_entries) final;
   const pg_t pgid;
-  const pg_shard_t whoami;
   class pending_on_t : public seastar::weakly_referencable<pending_on_t> {
   public:
     pending_on_t(