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>
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
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