From: Samuel Just Date: Thu, 18 Mar 2021 05:45:46 +0000 (-0700) Subject: crimson/os/seastore/transaction_manager: update journal_tail in submit_transaction X-Git-Tag: v17.1.0~2478^2~18 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=17588eb9f5f718d75c7e8ef70a3cd08237198125;p=ceph.git crimson/os/seastore/transaction_manager: update journal_tail in submit_transaction Rather than relying on rewrite_dirty, wait until the transaction actually clears and update directly in TransactionManager. Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index d441940cca265..08b71f315cc71 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -482,6 +482,20 @@ public: get_next_dirty_extents_ret get_next_dirty_extents( journal_seq_t seq); + /// returns std::nullopt if no dirty extents or dirty_from for oldest + std::optional get_oldest_dirty_from() const { + if (dirty.empty()) { + return std::nullopt; + } else { + auto oldest = dirty.begin()->dirty_from; + if (oldest == journal_seq_t()) { + return std::nullopt; + } else { + return oldest; + } + } + } + private: SegmentManager &segment_manager; ///< ref to segment_manager RootBlockRef root; ///< ref to current root diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index cb89d28faaedb..d1b97d913c10c 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -225,6 +225,8 @@ TransactionManager::submit_transaction_direct( segment_cleaner->set_journal_head(journal_seq); cache->complete_commit(tref, addr, journal_seq, segment_cleaner.get()); lba_manager->complete_transaction(tref); + segment_cleaner->update_journal_tail_target( + cache->get_oldest_dirty_from().value_or(journal_seq)); auto to_release = tref.get_segment_to_release(); if (to_release != NULL_SEG_ID) { return segment_manager.release(to_release