]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/transaction_manager: update journal_tail in submit_transaction
authorSamuel Just <sjust@redhat.com>
Thu, 18 Mar 2021 05:45:46 +0000 (22:45 -0700)
committerSamuel Just <sjust@redhat.com>
Wed, 24 Mar 2021 05:41:11 +0000 (22:41 -0700)
Rather than relying on rewrite_dirty, wait until the transaction actually
clears and update directly in TransactionManager.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/transaction_manager.cc

index d441940cca265b178fdf47c3a361df5664126b32..08b71f315cc718bcbc3779ef8465d106640d5578 100644 (file)
@@ -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<journal_seq_t> 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
index cb89d28faaedb590381f790200a457289ba35792..d1b97d913c10ca6e95950e2da3f9a37b9a26e609 100644 (file)
@@ -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