]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: extract with_sequencer() method out
authorKefu Chai <kchai@redhat.com>
Wed, 16 Jun 2021 09:46:06 +0000 (17:46 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 16 Jun 2021 10:29:10 +0000 (18:29 +0800)
because we should only ensure the ordering of the requests touching
the objects, the other requests like pgls should not be ordered along
with them, so as the first step, let's extract with_sequencer() method
out, so we can differentiate these two cases with minimal repeatings.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/osd_operations/client_request.h

index 90f52a7306dca3b21f356ed64982fec31b2ad9fb..b52c49288379246829ce7b834df37d402d0bafa8 100644 (file)
@@ -87,12 +87,8 @@ seastar::future<> ClientRequest::start()
        return interruptor::with_interruption([this, pgref]() mutable {
           epoch_t same_interval_since = pgref->get_interval_start_epoch();
           logger().debug("{} same_interval_since: {}", *this, same_interval_since);
-          may_set_prev_op();
-          return sequencer.start_op(
-            *this,
-            handle,
-            interruptor::wrap_function(
-              [this, pgref]() mutable -> interruptible_future<> {
+          return with_sequencer(
+            interruptor::wrap_function([this, pgref]() -> interruptible_future<> {
               PG &pg = *pgref;
               if (pg.can_discard_op(*m)) {
                 return osd.send_incremental_map(conn, m->get_map_epoch());
@@ -119,8 +115,7 @@ seastar::future<> ClientRequest::start()
                 }
               });
             })
-          ).then_interruptible([this, pgref]() {
-            sequencer.finish_op(*this);
+          ).then_interruptible([pgref]() {
             return seastar::stop_iteration::yes;
           });
        }, [this, pgref](std::exception_ptr eptr) {
index 5e40d6684bc0da0fa21286aa3af581d3b28d10ff..05a75515c4dfbe1ec057a93fdb856ba02110b501 100644 (file)
@@ -63,6 +63,14 @@ public:
   }
 
 private:
+  template <typename FuncT>
+  interruptible_future<> with_sequencer(FuncT&& func) {
+    may_set_prev_op();
+    return sequencer.start_op(*this, handle, std::forward<FuncT>(func))
+    .then_interruptible([this] {
+      sequencer.finish_op(*this);
+    });
+  }
   interruptible_future<> do_process(
     Ref<PG>& pg,
     crimson::osd::ObjectContextRef obc);