]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: fixes after crimson::os::with_store<>()
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 18 Mar 2026 19:34:50 +0000 (19:34 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 24 Mar 2026 16:06:25 +0000 (16:06 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/ec_backend.cc
src/crimson/osd/ec_recovery_backend.cc
src/crimson/osd/pg_backend.cc
src/crimson/osd/replicated_backend.cc
src/crimson/osd/replicated_recovery_backend.cc
src/crimson/osd/replicated_recovery_backend.h

index 6543aa8ae9cb2c314c2fdb1437d38839658b6a64..0eba7099844790bdd58690267d860974ad278cb6 100644 (file)
@@ -392,7 +392,8 @@ ECBackend::handle_sub_write(
     pg.op_applied(op.at_version);
   }
   logger().debug("{}:{}", __func__, __LINE__);
-  return store->do_transaction(coll, std::move(txn)).then([FNAME] {
+  return crimson::os::with_store_do_transaction(
+      store, coll, std::move(txn)).then([FNAME] {
     DEBUG("transaction commited!");
     return write_iertr::now();
   });
@@ -494,7 +495,8 @@ ECBackend::maybe_chunked_read(
   DEBUG("obj {} off {} size {} flags {}", obj, off, size, flags);
   DEBUG("oid is: {}", ghobject_t{obj, ghobject_t::NO_GEN, get_shard()});
   if (is_single_chunk(obj, op)) {
-    return store->read(
+    return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::read>(
+      store,
       coll, ghobject_t{obj, ghobject_t::NO_GEN, get_shard()}, off, size, flags);
   } else {
     return seastar::do_with(ceph::bufferlist{}, [=, this] (auto&& result_bl) {
@@ -510,7 +512,8 @@ ECBackend::maybe_chunked_read(
             std::end(sub_spec),
             [&obj, off, flags, subchunk_size, m, &result_bl, this] (const auto& subchunk) {
               const auto [sub_off_count, sub_size_count] = subchunk;
-              return store->read(
+              return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::read>(
+                store,
                 coll,
                 ghobject_t{obj, ghobject_t::NO_GEN, get_shard()},
                 off + m*sinfo.get_chunk_size() + sub_off_count*subchunk_size,
@@ -598,8 +601,8 @@ ECBackend::handle_rep_read_op(ECSubRead& op)
        if (reply.errors.count(obj_attr)) {
           return read_ertr::now();
        }
-        return store->get_attrs(
-          coll, ghobject_t{obj_attr, ghobject_t::NO_GEN, get_shard()}
+        return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::get_attrs>(
+          store, coll, ghobject_t{obj_attr, ghobject_t::NO_GEN, get_shard()}, 0
        ).safe_then([&reply, obj_attr] (auto&& attrs) {
          reply.attrs_read[obj_attr] = std::move(attrs);
           return read_ertr::now();
index 0aab51a970aef5d563287da7ed1c2a44aaffc666..7b317f03f14d95d610e2a91b2c5f862bbc2c1e21 100644 (file)
@@ -28,7 +28,7 @@ ECRecoveryBackend::ECRecoveryBackend(
   crimson::osd::ShardServices& shard_services,
   crimson::os::CollectionRef coll,
   ECBackend* backend)
-: ::crimson::osd::RecoveryBackend(pg, shard_services, coll, backend),
+: ::crimson::osd::RecoveryBackend(pg, shard_services, coll, pg.get_store_index(), backend),
   ::ECCommon::RecoveryBackend(
     shard_services.get_cct(),
     coll->get_cid(),
@@ -74,8 +74,10 @@ void ECRecoveryBackend::commit_txn_send_replies(
   ceph::os::Transaction&& txn,
   std::map<int, MOSDPGPushReply*> replies)
 {
-  std::ignore = shard_services.get_store().do_transaction(
-    crimson::osd::RecoveryBackend::coll, std::move(txn)
+  std::ignore = crimson::os::with_store_do_transaction(
+    shard_services.get_store(pg.get_store_index()),
+    crimson::osd::RecoveryBackend::coll,
+    std::move(txn)
   ).then([replies=std::move(replies), this]() mutable {
     if (auto msgit = replies.find(get_parent()->whoami_shard().osd);
         msgit != std::end(replies)) {
index 8047b17c15c024b931f7b0f328390c03c3148f77..fe7b9fdc2d1c3219c4fc49bab2fedb4762fc4a8b 100644 (file)
@@ -87,9 +87,8 @@ PGBackend::PGBackend(pg_shard_t whoami,
     coll{coll},
     shard_services{shard_services},
     dpp{dpp},
-    store{&shard_services.get_store(store_index)}
+    store{shard_services.get_store(store_index)}
 {
-  logger().info("initialized PGBackend::store with {}", (void*)this->store);
 }
 
 tl::expected<PGBackend::loaded_object_md_t::ref, std::error_code>
@@ -1120,7 +1119,7 @@ PGBackend::setxattr_ierrorator::future<> PGBackend::setxattr(
   }
   return crimson::os::with_store<
     &crimson::os::FuturizedStore::Shard::get_max_attr_name_length
-  >(store).then([this, &os, &osd_op, &txn, &delta_stats](unsigned store_max_name_len) {
+  >(store).then([this, &os, &osd_op, &txn, &delta_stats, &attr_cache](unsigned store_max_name_len) {
     const auto max_name_len = std::min<uint64_t>(
       store_max_name_len, local_conf()->osd_max_attr_name_len);
     if (osd_op.op.xattr.name_len > max_name_len) {
@@ -1190,7 +1189,8 @@ PGBackend::get_attr_ierrorator::future<> PGBackend::get_xattrs(
     [&] () {
     if (!is_erasure()) {
       logger().debug("getxattrx on obj={} goes into objstore", os.oi.soid);
-      return store->get_attrs(coll, ghobject_t{os.oi.soid});
+      return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::get_attrs>(
+        store, coll, ghobject_t{os.oi.soid}, 0);
     }
     return crimson::os::FuturizedStore::Shard::get_attrs_ertr::make_ready_future<
       crimson::os::FuturizedStore::Shard::attrs_t>(attr_cache);
index a3dbfd52b52271155f6d18bca9ad30b8539f65f6..89feb1e9136c821d133d3b87ace4d97830a41d0d 100644 (file)
@@ -370,7 +370,8 @@ ReplicatedBackend::getxattr(
   std::string&& key) const
 {
   return seastar::do_with(key, [this, &soid](auto &key) {
-    return store->get_attr(coll, ghobject_t{soid}, key);
+    return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::get_attr>(
+      store, coll, ghobject_t{soid}, key, 0);
   });
 }
 
index e11f73af257d7332d751f8d6b4dc9d3cafed226a..0711ec430ed99d981d969c65143518434ea345e6 100644 (file)
@@ -21,6 +21,14 @@ using std::string;
 
 namespace crimson::osd {
 
+ReplicatedRecoveryBackend::ReplicatedRecoveryBackend(
+  crimson::osd::PG& pg,
+  crimson::osd::ShardServices& shard_services,
+  crimson::os::CollectionRef coll,
+  PGBackend* backend)
+    : RecoveryBackend(pg, shard_services, coll, pg.get_store_index(), backend)
+{}
+
 RecoveryBackend::interruptible_future<>
 ReplicatedRecoveryBackend::recover_object(
   const hobject_t& soid,
index 15ce671629f40d0e0158b10f65e81c1e8a3673e3..2b144a08b1ba7b14a6f22699666e054b4847f608 100644 (file)
@@ -22,9 +22,7 @@ public:
   ReplicatedRecoveryBackend(crimson::osd::PG& pg,
                            crimson::osd::ShardServices& shard_services,
                            crimson::os::CollectionRef coll,
-                           PGBackend* backend)
-    : RecoveryBackend(pg, shard_services, coll, pg.get_store_index(), backend)
-  {}
+                           PGBackend* backend);
   interruptible_future<> handle_recovery_op(
     Ref<MOSDFastDispatchOp> m,
     crimson::net::ConnectionXcoreRef conn) final;