]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/journal: propogate segment headers with replay segments
authorSamuel Just <sjust@redhat.com>
Thu, 5 Nov 2020 23:29:15 +0000 (15:29 -0800)
committerSamuel Just <sjust@redhat.com>
Fri, 11 Dec 2020 21:31:39 +0000 (13:31 -0800)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/journal.cc
src/crimson/os/seastore/journal.h

index 0b1d420b794fcbc524cc86846fb31d4013b6babf..b5bbe1d7d73492c67f2f66153e8d8678a9ecfd74 100644 (file)
@@ -315,7 +315,7 @@ Journal::find_replay_segments_fut Journal::find_replay_segments()
          } else {
            replay_from = paddr_t{from->first, (segment_off_t)block_size};
          }
-         auto ret = std::vector<journal_seq_t>(segments.end() - from);
+         auto ret = replay_segments_t(segments.end() - from);
          std::transform(
            from, segments.end(), ret.begin(),
            [this](const auto &p) {
@@ -325,9 +325,9 @@ Journal::find_replay_segments_fut Journal::find_replay_segments()
              logger().debug(
                "Journal::find_replay_segments: replaying from  {}",
                ret);
-             return ret;
+             return std::make_pair(ret, p.second);
            });
-         ret[0].offset = replay_from;
+         ret[0].first.offset = replay_from;
          return find_replay_segments_fut(
            find_replay_segments_ertr::ready_future_marker{},
            std::move(ret));
@@ -460,14 +460,14 @@ Journal::replay_segment(
 Journal::replay_ret Journal::replay(delta_handler_t &&delta_handler)
 {
   return seastar::do_with(
-    std::move(delta_handler), std::vector<journal_seq_t>(),
+    std::move(delta_handler), replay_segments_t(),
     [this](auto &handler, auto &segments) mutable -> replay_ret {
       return find_replay_segments().safe_then(
         [this, &handler, &segments](auto replay_segs) mutable {
           logger().debug("replay: found {} segments", replay_segs.size());
           segments = std::move(replay_segs);
           return crimson::do_for_each(segments, [this, &handler](auto i) mutable {
-            return replay_segment(i, handler);
+            return replay_segment(i.first, handler);
           });
         });
     });
index ee7bf9e9ea87fc20f0ea85dd4839e73646a8ef65..c925233b08f28817b6fc6706e1ffd5e8cdf29fff 100644 (file)
@@ -284,11 +284,13 @@ private:
   bool needs_roll(segment_off_t length) const;
 
   /// return ordered vector of segments to replay
+  using replay_segments_t = std::vector<
+    std::pair<journal_seq_t, segment_header_t>>;
   using find_replay_segments_ertr = crimson::errorator<
     crimson::ct_error::input_output_error
     >;
   using find_replay_segments_fut = find_replay_segments_ertr::future<
-    std::vector<journal_seq_t>>;
+    replay_segments_t>;
   find_replay_segments_fut find_replay_segments();
 
   /// read record metadata for record starting at start