]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: decouple client and recovery reads in ECBackend, part 2
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 29 Jun 2023 19:20:30 +0000 (19:20 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 9 Jan 2024 15:09:53 +0000 (15:09 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/osd/ECBackend.cc
src/osd/ECBackend.h

index 5f91d85ce904e1e59061ea8eca88992358c118ff..378f77e4fd406451e9cab38d2b0c71811cf38976 100644 (file)
@@ -233,10 +233,8 @@ PGBackend::RecoveryHandle *ECBackend::open_recovery_op()
   return new ECRecoveryHandle;
 }
 
-void ECBackend::_failed_push(const hobject_t &hoid,
-  pair<RecoveryMessages *, ECBackend::read_result_t &> &in)
+void ECBackend::_failed_push(const hobject_t &hoid, ECBackend::read_result_t &res)
 {
-  ECBackend::read_result_t &res = in.second;
   dout(10) << __func__ << ": Read error " << hoid << " r="
           << res.r << " errors=" << res.errors << dendl;
   dout(10) << __func__ << ": canceling recovery op for obj " << hoid
@@ -253,17 +251,16 @@ void ECBackend::_failed_push(const hobject_t &hoid,
 }
 
 struct OnRecoveryReadComplete :
-  public GenContext<pair<RecoveryMessages*, ECBackend::read_result_t& > &> {
+  public GenContext<ECBackend::read_result_t&> {
   struct RecoveryMessages* rm;
   ECBackend *backend;
   hobject_t hoid;
 
   OnRecoveryReadComplete(RecoveryMessages* rm, ECBackend *backend, const hobject_t &hoid)
     : rm(rm), backend(backend), hoid(hoid) {}
-  void finish(pair<RecoveryMessages *, ECBackend::read_result_t &> &in) override {
-    ECBackend::read_result_t &res = in.second;
+  void finish(ECBackend::read_result_t &res) override {
     if (!(res.r == 0 && res.errors.empty())) {
-        backend->_failed_push(hoid, in);
+        backend->_failed_push(hoid, res);
         return;
     }
     ceph_assert(res.returned.size() == 1);
@@ -1360,9 +1357,7 @@ void ECBackend::complete_read_op(ReadOp &rop)
   ceph_assert(rop.to_read.size() == rop.complete.size());
   for (; reqiter != rop.to_read.end(); ++reqiter, ++resiter) {
     if (reqiter->second.cb) {
-      pair<RecoveryMessages *, read_result_t &> arg(
-       m, resiter->second);
-      reqiter->second.cb->complete(arg);
+      reqiter->second.cb->complete(resiter->second);
       reqiter->second.cb = nullptr;
     }
   }
@@ -2407,7 +2402,7 @@ void ECBackend::objects_read_async(
 }
 
 struct CallClientContexts :
-  public GenContext<pair<RecoveryMessages*, ECBackend::read_result_t& > &> {
+  public GenContext<ECBackend::read_result_t&> {
   hobject_t hoid;
   ECBackend *ec;
   ECBackend::ClientAsyncReadStatus *status;
@@ -2418,8 +2413,7 @@ struct CallClientContexts :
     ECBackend::ClientAsyncReadStatus *status,
     const list<boost::tuple<uint64_t, uint64_t, uint32_t> > &to_read)
     : hoid(hoid), ec(ec), status(status), to_read(to_read) {}
-  void finish(pair<RecoveryMessages *, ECBackend::read_result_t &> &in) override {
-    ECBackend::read_result_t &res = in.second;
+  void finish(ECBackend::read_result_t &res) override {
     extent_map result;
     if (res.r != 0)
       goto out;
@@ -2536,8 +2530,7 @@ int ECBackend::send_all_remaining_reads(
 
   list<boost::tuple<uint64_t, uint64_t, uint32_t> > offsets =
     rop.to_read.find(hoid)->second.to_read;
-  GenContext<pair<RecoveryMessages *, read_result_t& > &> *c =
-    rop.to_read.find(hoid)->second.cb;
+  GenContext<read_result_t&> *c = rop.to_read.find(hoid)->second.cb;
 
   // (Note cuixf) If we need to read attrs and we read failed, try to read again.
   bool want_attrs =
index 0483fa191294ac7ad0937a0e9a0fb14e90d06b8d..d604a176ac7d62efe5f176ae739dbf201c198e9b 100644 (file)
@@ -334,12 +334,12 @@ public:
     const std::list<boost::tuple<uint64_t, uint64_t, uint32_t> > to_read;
     std::map<pg_shard_t, std::vector<std::pair<int, int>>> need;
     bool want_attrs;
-    GenContext<std::pair<RecoveryMessages *, read_result_t& > &> *cb;
+    GenContext<read_result_t&> *cb;
     read_request_t(
       const std::list<boost::tuple<uint64_t, uint64_t, uint32_t> > &to_read,
       const std::map<pg_shard_t, std::vector<std::pair<int, int>>> &need,
       bool want_attrs,
-      GenContext<std::pair<RecoveryMessages *, read_result_t& > &> *cb)
+      GenContext<read_result_t&> *cb)
       : to_read(to_read), need(need), want_attrs(want_attrs),
        cb(cb) {}
   };
@@ -749,8 +749,7 @@ public:
   uint64_t be_get_ondisk_size(uint64_t logical_size) const final {
     return sinfo.logical_to_next_chunk_offset(logical_size);
   }
-  void _failed_push(const hobject_t &hoid,
-    std::pair<RecoveryMessages *, ECBackend::read_result_t &> &in);
+  void _failed_push(const hobject_t &hoid, ECBackend::read_result_t &res);
 };
 ostream &operator<<(ostream &lhs, const ECBackend::RMWPipeline::pipeline_state_t &rhs);