From: Yingxin Cheng Date: Fri, 11 Feb 2022 06:27:54 +0000 (+0800) Subject: crimson/os/seastore/segment_cleaner: drop unnecessary future from get_segment() X-Git-Tag: v18.0.0~1337^2~5 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=65a294058fc1253d89479ed483f99357241a6771;p=ceph.git crimson/os/seastore/segment_cleaner: drop unnecessary future from get_segment() Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index c5331cf74b1ae..796c63ce932e4 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -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] { diff --git a/src/crimson/os/seastore/journal/segmented_journal.cc b/src/crimson/os/seastore/journal/segmented_journal.cc index 351ef6a2e1af7..2fbfa3560a282 100644 --- a/src/crimson/os/seastore/journal/segmented_journal.cc +++ b/src/crimson/os/seastore/journal/segmented_journal.cc @@ -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); diff --git a/src/crimson/os/seastore/segment_cleaner.cc b/src/crimson/os/seastore/segment_cleaner.cc index 2f6a418fa1ff2..ae7c0fd17a263 100644 --- a/src/crimson/os/seastore/segment_cleaner.cc +++ b/src/crimson/os/seastore/segment_cleaner.cc @@ -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) diff --git a/src/crimson/os/seastore/segment_cleaner.h b/src/crimson/os/seastore/segment_cleaner.h index e170071f6f325..a4d47407f5b60 100644 --- a/src/crimson/os/seastore/segment_cleaner.h +++ b/src/crimson/os/seastore/segment_cleaner.h @@ -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; - 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& 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; diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 58ac9393535b7..a92e2926656f2 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -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{}; } diff --git a/src/test/crimson/seastore/test_seastore_journal.cc b/src/test/crimson/seastore/test_seastore_journal.cc index 1a25392974c71..65ff64c5216af 100644 --- a/src/test/crimson/seastore/test_seastore_journal.cc +++ b/src/test/crimson/seastore/test_seastore_journal.cc @@ -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{}; }