]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore: add debug logs to print transaction name
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 22 Nov 2021 08:55:02 +0000 (16:55 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 9 Dec 2021 01:41:37 +0000 (09:41 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h
src/crimson/os/seastore/segment_cleaner.cc
src/crimson/os/seastore/segment_cleaner.h
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h
src/crimson/tools/store_nbd/tm_driver.cc
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_seastore_cache.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index 81908a42f9fd1dd40bdac6e3eb7ef97faf4e2b2b..a1a442fa25d53c07bb47080e0180e4f77b56e27f 100644 (file)
@@ -95,41 +95,24 @@ public:
 
   /// Creates empty transaction by source
   TransactionRef create_transaction(
-      Transaction::src_t src) {
+      Transaction::src_t src,
+      const char* name,
+      bool is_weak) {
     LOG_PREFIX(Cache::create_transaction);
 
     ++(get_by_src(stats.trans_created_by_src, src));
 
     auto ret = std::make_unique<Transaction>(
       get_dummy_ordering_handle(),
-      false,
-      src,
-      last_commit,
-      [this](Transaction& t) {
-        return on_transaction_destruct(t);
-      }
-    );
-    DEBUGT("created source={}", *ret, src);
-    return ret;
-  }
-
-  /// Creates empty weak transaction by source
-  TransactionRef create_weak_transaction(
-      Transaction::src_t src) {
-    LOG_PREFIX(Cache::create_weak_transaction);
-
-    ++(get_by_src(stats.trans_created_by_src, src));
-
-    auto ret = std::make_unique<Transaction>(
-      get_dummy_ordering_handle(),
-      true,
+      is_weak,
       src,
       last_commit,
       [this](Transaction& t) {
         return on_transaction_destruct(t);
       }
     );
-    DEBUGT("created source={}", *ret, src);
+    DEBUGT("created name={}, source={}, is_weak={}",
+           *ret, name, src, is_weak);
     return ret;
   }
 
index 8bfb705d1d54fa79450cf73cca91bc1bad31175b..600ba4b58f77aa8e12b7377d1bffe4922d36ec59 100644 (file)
@@ -299,7 +299,10 @@ SeaStore::mkfs_ertr::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
       }).safe_then([this] {
         return repeat_eagain([this] {
           return transaction_manager->with_transaction_intr(
-            Transaction::src_t::MUTATE, [this](auto& t) {
+            Transaction::src_t::MUTATE,
+            "mkfs_seastore",
+            [this](auto& t)
+          {
             return onode_manager->mkfs(t
             ).si_then([this, &t] {
               return collection_manager->mkfs(t);
@@ -359,8 +362,10 @@ SeaStore::list_objects(CollectionRef ch,
       [this, start, end, limit] (auto& ret) {
     return repeat_eagain([this, start, end, limit, &ret] {
       return transaction_manager->with_transaction_intr(
-          Transaction::src_t::READ,
-          [this, start, end, limit](auto &t) {
+        Transaction::src_t::READ,
+        "list_objects",
+        [this, start, end, limit](auto &t)
+      {
         return onode_manager->list_onodes(t, start, end, limit);
       }).safe_then([&ret](auto&& _ret) {
         ret = std::move(_ret);
@@ -403,8 +408,10 @@ seastar::future<std::vector<coll_t>> SeaStore::list_collections()
     [this](auto &ret) {
       return repeat_eagain([this, &ret] {
         return transaction_manager->with_transaction_intr(
-            Transaction::src_t::READ,
-            [this, &ret](auto& t) {
+          Transaction::src_t::READ,
+          "list_collections",
+          [this, &ret](auto& t)
+        {
           return transaction_manager->read_collection_root(t
           ).si_then([this, &t](auto coll_root) {
             return collection_manager->list(coll_root, t);
@@ -439,6 +446,7 @@ SeaStore::read_errorator::future<ceph::bufferlist> SeaStore::read(
     ch,
     oid,
     Transaction::src_t::READ,
+    "read_obj",
     op_type_t::READ,
     [=](auto &t, auto &onode) -> ObjectDataHandler::read_ret {
       size_t size = onode.get_layout().size;
@@ -485,6 +493,7 @@ SeaStore::get_attr_errorator::future<ceph::bufferlist> SeaStore::get_attr(
     c,
     oid,
     Transaction::src_t::READ,
+    "get_attr",
     op_type_t::GET_ATTR,
     [=](auto &t, auto& onode) -> _omap_get_value_ret {
       auto& layout = onode.get_layout();
@@ -520,6 +529,7 @@ SeaStore::get_attrs_ertr::future<SeaStore::attrs_t> SeaStore::get_attrs(
     c,
     oid,
     Transaction::src_t::READ,
+    "get_addrs",
     op_type_t::GET_ATTRS,
     [=](auto &t, auto& onode) {
       auto& layout = onode.get_layout();
@@ -555,6 +565,7 @@ seastar::future<struct stat> SeaStore::stat(
     c,
     oid,
     Transaction::src_t::READ,
+    "stat",
     op_type_t::STAT,
     [=, &oid](auto &t, auto &onode) {
       struct stat st;
@@ -593,6 +604,7 @@ SeaStore::omap_get_values(
     c,
     oid,
     Transaction::src_t::READ,
+    "omap_get_values",
     op_type_t::OMAP_GET_VALUES,
     [this, keys](auto &t, auto &onode) {
       omap_root_t omap_root = onode.get_layout().omap_root.get(onode.get_hint());
@@ -702,6 +714,7 @@ SeaStore::omap_get_values_ret_t SeaStore::omap_list(
     c,
     oid,
     Transaction::src_t::READ,
+    "omap_list",
     op_type_t::OMAP_LIST,
     [this, config, &start](auto &t, auto &onode) {
       return _omap_list(
@@ -860,6 +873,7 @@ seastar::future<> SeaStore::do_transaction(
     _ch,
     std::move(_t),
     Transaction::src_t::MUTATE,
+    "do_transaction",
     op_type_t::TRANSACTION,
     [this](auto &ctx) {
       return with_trans_intr(*ctx.transaction, [&, this](auto &t) {
@@ -1322,14 +1336,16 @@ seastar::future<> SeaStore::write_meta(const std::string& key,
        return repeat_eagain([this, FNAME, &key, &value] {
          return transaction_manager->with_transaction_intr(
            Transaction::src_t::MUTATE,
-           [this, FNAME, &key, &value](auto& t) {
-             DEBUGT("Have transaction, key: {}; value: {}", t, key, value);
-             return transaction_manager->update_root_meta(
-               t, key, value
-             ).si_then([this, &t] {
-               return transaction_manager->submit_transaction(t);
-             });
-           });
+            "write_meta",
+           [this, FNAME, &key, &value](auto& t)
+          {
+            DEBUGT("Have transaction, key: {}; value: {}", t, key, value);
+            return transaction_manager->update_root_meta(
+              t, key, value
+            ).si_then([this, &t] {
+              return transaction_manager->submit_transaction(t);
+            });
+          });
        }).safe_then([this, &key, &value] {
          return mdstore->write_meta(key, value);
        });
index 8e508c6a3f274b75af1c84f726e648039cff6b6c..b205872141d790083494bc0ed9b788540a803b8f 100644 (file)
@@ -201,12 +201,13 @@ private:
     CollectionRef ch,
     ceph::os::Transaction &&t,
     Transaction::src_t src,
+    const char* tname,
     op_type_t op_type,
     F &&f) {
     return seastar::do_with(
       internal_context_t(
        ch, std::move(t),
-       transaction_manager->create_transaction(src)),
+       transaction_manager->create_transaction(src, tname)),
       std::forward<F>(f),
       [this, op_type](auto &ctx, auto &f) {
        return ctx.transaction->get_handle().take_collection_lock(
@@ -234,15 +235,21 @@ private:
     CollectionRef ch,
     const ghobject_t &oid,
     Transaction::src_t src,
+    const char* tname,
     op_type_t op_type,
     F &&f) const {
     auto begin_time = std::chrono::steady_clock::now();
     return seastar::do_with(
-        oid, Ret{}, OnodeRef(), std::forward<F>(f),
-        [this, src, op_type, begin_time](auto &oid, auto &ret, auto &onode, auto &f) {
-      return repeat_eagain([&, this, src] {
+      oid, Ret{}, OnodeRef(), std::forward<F>(f),
+      [this, src, op_type, begin_time, tname
+      ](auto &oid, auto &ret, auto &onode, auto &f)
+    {
+      return repeat_eagain([&, this, src, tname] {
         return transaction_manager->with_transaction_intr(
-            src, [&, this](auto& t) {
+          src,
+          tname,
+          [&, this](auto& t)
+        {
           return onode_manager->get_onode(t, oid
           ).si_then([&](auto onode_ret) {
             onode = std::move(onode_ret);
index af3fdefcf1edc4b9798303c2115a7bd6e9170fd3..615040e94d32e1310d2824ec601dca60effa09f0 100644 (file)
@@ -309,7 +309,10 @@ SegmentCleaner::gc_trim_journal_ret SegmentCleaner::gc_trim_journal()
 {
   return repeat_eagain([this] {
     return ecb->with_transaction_intr(
-        Transaction::src_t::CLEANER_TRIM, [this](auto& t) {
+      Transaction::src_t::CLEANER_TRIM,
+      "trim_journal",
+      [this](auto& t)
+    {
       return rewrite_dirty(t, get_dirty_tail()
       ).si_then([this, &t] {
         return ecb->submit_transaction_direct(t);
@@ -349,8 +352,10 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
           "SegmentCleaner::gc_reclaim_space: processing {} extents",
           extents.size());
         return ecb->with_transaction_intr(
-            Transaction::src_t::CLEANER_RECLAIM,
-            [this, &extents](auto& t) {
+          Transaction::src_t::CLEANER_RECLAIM,
+          "reclaim_space",
+          [this, &extents](auto& t)
+        {
           return trans_intr::do_for_each(
               extents,
               [this, &t](auto &extent) {
index ef7fb731d7ef04ee8750a379cb08a1867531f398..b9bf9d9cb336cf3143a318ac39df7c12cf51c443 100644 (file)
@@ -472,13 +472,17 @@ public:
   public:
     virtual ~ExtentCallbackInterface() = default;
 
-    virtual TransactionRef create_transaction(Transaction::src_t) = 0;
+    virtual TransactionRef create_transaction(
+        Transaction::src_t, const char*) = 0;
 
     /// Creates empty transaction with interruptible context
     template <typename Func>
-    auto with_transaction_intr(Transaction::src_t src, Func &&f) {
+    auto with_transaction_intr(
+        Transaction::src_t src,
+        const char* name,
+        Func &&f) {
       return seastar::do_with(
-        create_transaction(src),
+        create_transaction(src, name),
         [f=std::forward<Func>(f)](auto &ref_t) mutable {
           return with_trans_intr(
             *ref_t,
index 08527ff8ec3bb6c4182bb481232b0542f4bbe73e..011bd1766490ba7b4cee9a3d482cdbc219fd2dcd 100644 (file)
@@ -42,7 +42,10 @@ TransactionManager::mkfs_ertr::future<> TransactionManager::mkfs()
     DEBUG("about to do_with");
     segment_cleaner->init_mkfs(addr);
     return with_transaction_intr(
-        Transaction::src_t::MUTATE, [this, FNAME](auto& t) {
+      Transaction::src_t::MUTATE,
+      "mkfs_tm",
+      [this, FNAME](auto& t)
+    {
       DEBUGT("about to cache->mkfs", t);
       cache->init();
       return cache->mkfs(t
@@ -89,7 +92,8 @@ TransactionManager::mount_ertr::future<> TransactionManager::mount()
   }).safe_then([this, FNAME](auto addr) {
     segment_cleaner->set_journal_head(addr);
     return seastar::do_with(
-      create_weak_transaction(Transaction::src_t::READ),
+      create_weak_transaction(
+        Transaction::src_t::READ, "mount"),
       [this, FNAME](auto &tref) {
        return with_trans_intr(
          *tref,
index eede86737a62934ddfc0feeea34adbadfd5f0073..e3f04b3b38d433761ec7f8da3cea54ea9aa00c50 100644 (file)
@@ -88,14 +88,16 @@ public:
 
   /// Creates empty transaction
   TransactionRef create_transaction(
-      Transaction::src_t src) final {
-    return cache->create_transaction(src);
+      Transaction::src_t src,
+      const char* name) final {
+    return cache->create_transaction(src, name, false);
   }
 
   /// Creates empty weak transaction
   TransactionRef create_weak_transaction(
-      Transaction::src_t src) {
-    return cache->create_weak_transaction(src);
+      Transaction::src_t src,
+      const char* name) {
+    return cache->create_transaction(src, name, true);
   }
 
   /// Resets transaction
index dad672044289f539eeade0f652ff51ad9f1506ae..19cbd56e5e62962d3566e4eab3d7c5beeaac4868 100644 (file)
@@ -24,8 +24,10 @@ seastar::future<> TMDriver::write(
   return seastar::do_with(ptr, [this, offset](auto& ptr) {
     return repeat_eagain([this, offset, &ptr] {
       return tm->with_transaction_intr(
-          Transaction::src_t::MUTATE,
-          [this, offset, &ptr](auto& t) {
+        Transaction::src_t::MUTATE,
+        "write",
+        [this, offset, &ptr](auto& t)
+      {
         return tm->dec_ref(t, offset
         ).si_then([](auto){}).handle_error_interruptible(
           crimson::ct_error::enoent::handle([](auto) { return seastar::now(); }),
@@ -97,8 +99,10 @@ seastar::future<bufferlist> TMDriver::read(
   auto &blret = *blptrret;
   return repeat_eagain([=, &blret] {
     return tm->with_transaction_intr(
-        Transaction::src_t::READ,
-        [=, &blret](auto& t) {
+      Transaction::src_t::READ,
+      "read",
+      [=, &blret](auto& t)
+    {
       return read_extents(t, offset, size
       ).si_then([=, &blret](auto ext_list) {
         size_t cur = offset;
index 9bfa40e4f39555106aa4e589e9883828224c6fc8..f54bac24506da9336b4f6df19c89502601b6a79d 100644 (file)
@@ -85,7 +85,8 @@ struct btree_test_base :
       return journal->open_for_write();
     }).safe_then([this](auto addr) {
       return seastar::do_with(
-       cache->create_transaction(Transaction::src_t::MUTATE),
+       cache->create_transaction(
+            Transaction::src_t::MUTATE, "test_set_up_fut", false),
        [this](auto &ref_t) {
          return with_trans_intr(*ref_t, [&](auto &t) {
            cache->init();
@@ -152,7 +153,8 @@ struct lba_btree_test : btree_test_base {
 
   template <typename F>
   auto lba_btree_update(F &&f) {
-    auto tref = cache->create_transaction(Transaction::src_t::MUTATE);
+    auto tref = cache->create_transaction(
+        Transaction::src_t::MUTATE, "test_btree_update", false);
     auto &t = *tref;
     with_trans_intr(
       t,
@@ -178,7 +180,8 @@ struct lba_btree_test : btree_test_base {
 
   template <typename F>
   auto lba_btree_read(F &&f) {
-    auto t = cache->create_transaction(Transaction::src_t::READ);
+    auto t = cache->create_transaction(
+        Transaction::src_t::READ, "test_btree_read", false);
     return with_trans_intr(
       *t,
       [this, f=std::forward<F>(f)](auto &t) mutable {
@@ -303,7 +306,8 @@ struct btree_lba_manager_test : btree_test_base {
 
   auto create_transaction(bool create_fake_extent=true) {
     auto t = test_transaction_t{
-      cache->create_transaction(Transaction::src_t::MUTATE),
+      cache->create_transaction(
+          Transaction::src_t::MUTATE, "test_mutate_lba", false),
       test_lba_mappings
     };
     if (create_fake_extent) {
@@ -314,7 +318,8 @@ struct btree_lba_manager_test : btree_test_base {
 
   auto create_weak_transaction() {
     auto t = test_transaction_t{
-      cache->create_weak_transaction(Transaction::src_t::READ),
+      cache->create_transaction(
+          Transaction::src_t::READ, "test_read_weak", true),
       test_lba_mappings
     };
     return t;
index a55bb4287b5a34068d5f197af65288e19799abfd..0bb8213786baa6bf92a99a09d51e514e316ec001 100644 (file)
@@ -67,7 +67,8 @@ struct cache_test_t : public seastar_test_suite_t {
   }
 
   auto get_transaction() {
-    return cache->create_transaction(Transaction::src_t::MUTATE);
+    return cache->create_transaction(
+        Transaction::src_t::MUTATE, "test_cache", false);
   }
 
   template <typename T, typename... Args>
index 003966e13d4276add8e52b7357410c5ffec6997c..6323f72729efc54e9a208f94fa9a43e02616b939 100644 (file)
@@ -167,15 +167,18 @@ protected:
   }
 
   auto create_mutate_transaction() {
-    return tm->create_transaction(Transaction::src_t::MUTATE);
+    return tm->create_transaction(
+        Transaction::src_t::MUTATE, "test_mutate");
   }
 
   auto create_read_transaction() {
-    return tm->create_transaction(Transaction::src_t::READ);
+    return tm->create_transaction(
+        Transaction::src_t::READ, "test_read");
   }
 
   auto create_weak_transaction() {
-    return tm->create_weak_transaction(Transaction::src_t::READ);
+    return tm->create_weak_transaction(
+        Transaction::src_t::READ, "test_read_weak");
   }
 
   auto submit_transaction_fut2(Transaction& t) {