]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/segment_cleaner: drop unnecessary future from get_segment()
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 11 Feb 2022 06:27:54 +0000 (14:27 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 24 Feb 2022 12:24:26 +0000 (20:24 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/journal/segmented_journal.cc
src/crimson/os/seastore/segment_cleaner.cc
src/crimson/os/seastore/segment_cleaner.h
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_seastore_journal.cc

index c5331cf74b1aeb1ca5bc9d9a632e1aa5806d5dd3..796c63ce932e46bf9bb6828ef88da326a567a601 100644 (file)
@@ -251,11 +251,10 @@ SegmentedAllocator::Writer::roll_segment(bool set_rolling) {
     });
   }
 
-  return segment_provider.get_segment(
-    segment_manager.get_device_id(), OOL_SEG_SEQ
-  ).safe_then([this](auto segment) {
-    return segment_manager.open(segment);
-  }).safe_then([this](auto segref) {
+  auto new_segment_id = segment_provider.get_segment(
+      segment_manager.get_device_id(), OOL_SEG_SEQ);
+  return segment_manager.open(new_segment_id
+  ).safe_then([this](auto segref) {
     LOG_PREFIX(SegmentedAllocator::Writer::roll_segment);
     DEBUG("opened new segment: {}", segref->get_segment_id());
     return init_segment(*segref).safe_then([segref=std::move(segref), this] {
index 351ef6a2e1af73729ce86651e7c5681c36dfbd75..2fbfa3560a28239011f6353083f346e3d7e9cc3f 100644 (file)
@@ -434,10 +434,9 @@ SegmentedJournal::JournalSegmentManager::roll()
     current_journal_segment->close() :
     Segment::close_ertr::now()
   ).safe_then([this] {
-    return segment_provider.get_segment(
+    auto new_segment_id = segment_provider->get_segment(
         get_device_id(), next_journal_segment_seq);
-  }).safe_then([this](auto segment) {
-    return segment_manager.open(segment);
+    return segment_manager.open(new_segment_id);
   }).safe_then([this](auto sref) {
     current_journal_segment = sref;
     return initialize_segment(*current_journal_segment);
index 2f6a418fa1ff2faaa1cef0c9e1a3667e0cbb6ca9..ae7c0fd17a263947afa3a7696769b8a0cd04f7bb 100644 (file)
@@ -207,28 +207,26 @@ void SegmentCleaner::register_metrics()
   });
 }
 
-SegmentCleaner::get_segment_ret SegmentCleaner::get_segment(
-    device_id_t id, segment_seq_t seq)
+segment_id_t SegmentCleaner::get_segment(
+    device_id_t device_id, segment_seq_t seq)
 {
+  LOG_PREFIX(SegmentCleaner::get_segment);
   assert(segment_seq_to_type(seq) != segment_type_t::NULL_SEG);
-  for (auto it = segments.device_begin(id);
-       it != segments.device_end(id);
+  for (auto it = segments.device_begin(device_id);
+       it != segments.device_end(device_id);
        ++it) {
-    auto id = it->first;
+    auto seg_id = it->first;
     auto& segment_info = it->second;
     if (segment_info.is_empty()) {
-      logger().debug("{}: returning segment {} {}",
-                     __func__, id, segment_seq_printer_t{seq});
-      mark_open(id, seq);
-      return get_segment_ret(
-       get_segment_ertr::ready_future_marker{},
-       id);
+      DEBUG("returning segment {} {}", seg_id, segment_seq_printer_t{seq});
+      mark_open(seg_id, seq);
+      return seg_id;
     }
   }
-  assert(0 == "out of space handling todo");
-  return get_segment_ret(
-    get_segment_ertr::ready_future_marker{},
-    NULL_SEG_ID);
+  ERROR("(TODO) handle out of space from device {} with segment_seq={}",
+        device_id, segment_seq_printer_t{seq});
+  ceph_abort();
+  return NULL_SEG_ID;
 }
 
 void SegmentCleaner::update_journal_tail_target(journal_seq_t target)
index e170071f6f32597ef7be9d947493fe2fae4e2e9f..a4d47407f5b605d083821967746b2699c96aa8bd 100644 (file)
@@ -272,10 +272,7 @@ private:
  */
 class SegmentProvider {
 public:
-  using get_segment_ertr = crimson::errorator<
-    crimson::ct_error::input_output_error>;
-  using get_segment_ret = get_segment_ertr::future<segment_id_t>;
-  virtual get_segment_ret get_segment(
+  virtual segment_id_t get_segment(
       device_id_t id, segment_seq_t seq) = 0;
 
   virtual void close_segment(segment_id_t) {}
@@ -681,7 +678,7 @@ public:
   using mount_ret = mount_ertr::future<>;
   mount_ret mount(device_id_t pdevice_id, std::vector<SegmentManager*>& sms);
 
-  get_segment_ret get_segment(
+  segment_id_t get_segment(
       device_id_t id, segment_seq_t seq) final;
 
   void close_segment(segment_id_t segment) final;
index 58ac9393535b7ed19aa4bcc5fb03a5df8f364484..a92e2926656f209c2b06e9f82a9d4055f95dd5d0 100644 (file)
@@ -43,14 +43,12 @@ struct btree_test_base :
 
   void update_segment_avail_bytes(paddr_t offset) final {}
 
-  get_segment_ret get_segment(device_id_t id, segment_seq_t seq) final {
+  segment_id_t get_segment(device_id_t id, segment_seq_t seq) final {
     auto ret = next;
     next = segment_id_t{
       next.device_id(),
       next.device_segment_id() + 1};
-    return get_segment_ret(
-      get_segment_ertr::ready_future_marker{},
-      ret);
+    return ret;
   }
 
   journal_seq_t get_journal_tail_target() const final { return journal_seq_t{}; }
index 1a25392974c71f1b422236bb2fdf46c163bf93f5..65ff64c5216af35e9028615278cffdbb1d0a3c6f 100644 (file)
@@ -84,14 +84,12 @@ struct journal_test_t : seastar_test_suite_t, SegmentProvider {
 
   void update_segment_avail_bytes(paddr_t offset) final {}
 
-  get_segment_ret get_segment(device_id_t id, segment_seq_t seq) final {
+  segment_id_t get_segment(device_id_t id, segment_seq_t seq) final {
     auto ret = next;
     next = segment_id_t{
       next.device_id(),
       next.device_segment_id() + 1};
-    return get_segment_ret(
-      get_segment_ertr::ready_future_marker{},
-      ret);
+    return ret;
   }
 
   journal_seq_t get_journal_tail_target() const final { return journal_seq_t{}; }