]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.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, 27 Jan 2026 14:37:36 +0000 (14:37 +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 4600296795382b29856128e872633482db1dce57..9342a61b5f12638e8ae48c88250ac8c11485f228 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,
                      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}
index 0b5e14439105a579b91f400d17dc3a2711c1fc0b..d162fdc65310881e180403dadcc95fc8059bd820 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,
            const ec_profile_t& ec_profile,
index ca2b0aed06d4c99b7efc51683134d3cb6ec975c6..b4f65a3e84e6019c29143a31f63e5591fc6f7b0e 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,
+    return std::make_unique<ECBackend>(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>{
         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<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(
     store->list_objects(coll, gstart, gend, limit));
 
index 52b416e36ba69f7e89914833919aaa819a91b84a..4c5956e3e7ed9ad8cb40bbf4caddd671d60fc919 100644 (file)
@@ -63,12 +63,12 @@ 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,
             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,
@@ -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;
index af5df2d4ab6376ed5620f96bd50506304a272386..4122439cda0d3c83e1bcb0d7b8d91cde11e6c4b9 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, dpp},
+  : PGBackend{whoami, coll, shard_services, 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(