From: Yingxin Cheng Date: Sun, 7 Aug 2022 13:34:24 +0000 (+0800) Subject: crimson/os/seastore/cache: decouple prepare_record() from segment_provider X-Git-Tag: v18.0.0~287^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d6d9018272955486899be44be3979224acf2a110;p=ceph.git crimson/os/seastore/cache: decouple prepare_record() from segment_provider Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 107574cb7d1c8..c119260e45efa 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1018,7 +1018,8 @@ CachedExtentRef Cache::duplicate_for_write( record_t Cache::prepare_record( Transaction &t, - SegmentProvider *cleaner) + const journal_seq_t &journal_head, + const journal_seq_t &journal_dirty_tail) { LOG_PREFIX(Cache::prepare_record); SUBTRACET(seastore_t, "enter", t); @@ -1251,15 +1252,16 @@ record_t Cache::prepare_record( } if (is_cleaner_transaction(trans_src)) { - assert(cleaner != nullptr); + assert(journal_head != JOURNAL_SEQ_NULL); + assert(journal_dirty_tail != JOURNAL_SEQ_NULL); journal_seq_t dirty_tail; auto maybe_dirty_tail = get_oldest_dirty_from(); if (!maybe_dirty_tail.has_value()) { - dirty_tail = cleaner->get_journal_head(); + dirty_tail = journal_head; SUBINFOT(seastore_t, "dirty_tail all trimmed, set to head {}, src={}", t, dirty_tail, trans_src); } else if (*maybe_dirty_tail == JOURNAL_SEQ_NULL) { - dirty_tail = cleaner->get_dirty_tail(); + dirty_tail = journal_dirty_tail; SUBINFOT(seastore_t, "dirty_tail is pending, set to {}, src={}", t, dirty_tail, trans_src); } else { @@ -1272,7 +1274,7 @@ record_t Cache::prepare_record( // FIXME: the replay point of the allocations requires to be accurate. // Setting the alloc_tail to get_journal_head() cannot skip replaying the // last unnecessary record. - alloc_tail = cleaner->get_journal_head(); + alloc_tail = journal_head; SUBINFOT(seastore_t, "alloc_tail all trimmed, set to head {}, src={}", t, alloc_tail, trans_src); } else if (*maybe_alloc_tail == JOURNAL_SEQ_NULL) { diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index c57a0b8e96c34..126012d78c91c 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -699,7 +699,8 @@ public: */ record_t prepare_record( Transaction &t, ///< [in, out] current transaction - SegmentProvider *cleaner + const journal_seq_t &journal_head, + const journal_seq_t &journal_dirty_tail ); /** diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index d97c30a453951..52623def9ed36 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -335,7 +335,10 @@ TransactionManager::submit_transaction_direct( cache->trim_backref_bufs(*trim_alloc_to); } - auto record = cache->prepare_record(tref, async_cleaner.get()); + auto record = cache->prepare_record( + tref, + async_cleaner->get_journal_head(), + async_cleaner->get_dirty_tail()); tref.get_handle().maybe_release_collection_lock(); diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 441f0d1135356..92719d83aa272 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -94,7 +94,7 @@ struct btree_test_base : virtual void complete_commit(Transaction &t) {} seastar::future<> submit_transaction(TransactionRef t) { - auto record = cache->prepare_record(*t, this); + auto record = cache->prepare_record(*t, JOURNAL_SEQ_NULL, JOURNAL_SEQ_NULL); return journal->submit_record(std::move(record), t->get_handle()).safe_then( [this, t=std::move(t)](auto submit_result) mutable { cache->complete_commit( diff --git a/src/test/crimson/seastore/test_seastore_cache.cc b/src/test/crimson/seastore/test_seastore_cache.cc index b9af8b2ccd91c..1785b551111b0 100644 --- a/src/test/crimson/seastore/test_seastore_cache.cc +++ b/src/test/crimson/seastore/test_seastore_cache.cc @@ -30,7 +30,7 @@ struct cache_test_t : public seastar_test_suite_t { seastar::future submit_transaction( TransactionRef t) { - auto record = cache->prepare_record(*t, nullptr); + auto record = cache->prepare_record(*t, JOURNAL_SEQ_NULL, JOURNAL_SEQ_NULL); bufferlist bl; for (auto &&block : record.extents) {