]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/crimson/os/seastore/segment_manager_group.h
update ceph source to reef 18.2.1
[ceph.git] / ceph / src / crimson / os / seastore / segment_manager_group.h
index bd5af9601a5673657fcbc7d84f10f72d751868a9..f193b5eed17201584ea2dd3c0000f6190870751f 100644 (file)
@@ -8,10 +8,11 @@
 #include "crimson/common/errorator.h"
 #include "crimson/os/seastore/seastore_types.h"
 #include "crimson/os/seastore/segment_manager.h"
+#include "crimson/os/seastore/record_scanner.h"
 
 namespace crimson::os::seastore {
 
-class SegmentManagerGroup {
+class SegmentManagerGroup : public RecordScanner {
 public:
   SegmentManagerGroup() {
     segment_managers.resize(DEVICE_ID_MAX, nullptr);
@@ -96,24 +97,6 @@ public:
     segment_tail_t>;
   read_segment_tail_ret  read_segment_tail(segment_id_t segment);
 
-  using read_ertr = SegmentManager::read_ertr;
-  using scan_valid_records_ertr = read_ertr;
-  using scan_valid_records_ret = scan_valid_records_ertr::future<
-    size_t>;
-  using found_record_handler_t = std::function<
-    scan_valid_records_ertr::future<>(
-      record_locator_t record_locator,
-      // callee may assume header and bl will remain valid until
-      // returned future resolves
-      const record_group_header_t &header,
-      const bufferlist &mdbuf)>;
-  scan_valid_records_ret scan_valid_records(
-    scan_valid_records_cursor &cursor, ///< [in, out] cursor, updated during call
-    segment_nonce_t nonce,             ///< [in] nonce for segment
-    size_t budget,                     ///< [in] max budget to use
-    found_record_handler_t &handler    ///< [in] handler for records
-  ); ///< @return used budget
-
   /*
    * read journal segment headers
    */
@@ -143,30 +126,20 @@ private:
     return device_ids.count(id) >= 1;
   }
 
-  /// read record metadata for record starting at start
-  using read_validate_record_metadata_ertr = read_ertr;
-  using read_validate_record_metadata_ret =
-    read_validate_record_metadata_ertr::future<
-      std::optional<std::pair<record_group_header_t, bufferlist>>
-    >;
-  read_validate_record_metadata_ret read_validate_record_metadata(
-    paddr_t start,
-    segment_nonce_t nonce);
-
-  /// read and validate data
-  using read_validate_data_ertr = read_ertr;
-  using read_validate_data_ret = read_validate_data_ertr::future<bool>;
-  read_validate_data_ret read_validate_data(
-    paddr_t record_base,
-    const record_group_header_t &header  ///< caller must ensure lifetime through
-                                         ///  future resolution
-  );
-
-  using consume_record_group_ertr = scan_valid_records_ertr;
-  consume_record_group_ertr::future<> consume_next_records(
-      scan_valid_records_cursor& cursor,
-      found_record_handler_t& handler,
-      std::size_t& budget_used);
+  void initialize_cursor(scan_valid_records_cursor &cursor) final;
+
+  read_ret read(paddr_t start, size_t len) final;
+
+  bool is_record_segment_seq_invalid(scan_valid_records_cursor &cursor,
+    record_group_header_t &header) final {
+    return false;
+  }
+
+  int64_t get_segment_end_offset(paddr_t addr) final {
+    auto& seg_addr = addr.as_seg_paddr();
+    auto& segment_manager = *segment_managers[seg_addr.get_segment_id().device_id()];
+    return static_cast<int64_t>(segment_manager.get_segment_size());
+  }
 
   std::vector<SegmentManager*> segment_managers;
   std::set<device_id_t> device_ids;