]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: apply errorator to do_op_call() path.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 17 Sep 2019 18:33:00 +0000 (20:33 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 20 Nov 2019 19:37:41 +0000 (20:37 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/ops_executer.cc
src/crimson/osd/ops_executer.h

index 864d0e2f1a2f4a576d2b3cd4b3b6ea39c7a9b7b0..3646989462ada0ef33aba79c749bf2b68bbf2c71 100644 (file)
@@ -26,7 +26,7 @@ namespace {
 
 namespace crimson::osd {
 
-seastar::future<> OpsExecuter::do_op_call(OSDOp& osd_op)
+OpsExecuter::call_errorator::future<> OpsExecuter::do_op_call(OSDOp& osd_op)
 {
   std::string cname, mname;
   ceph::bufferlist indata;
@@ -96,9 +96,13 @@ seastar::future<> OpsExecuter::do_op_call(OSDOp& osd_op)
       osd_op.op.extent.length = outdata.length();
       osd_op.outdata.claim_append(outdata);
     }
+    return ret;
+  }).then([] (const int ret) {
     if (ret < 0) {
-      throw crimson::osd::make_error(ret);
+      return call_errorator::make_plain_exception_future<>(
+        ceph::stateful_errint{ ret });
     }
+    return seastar::now();
   });
 }
 
@@ -407,7 +411,12 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op)
       return backend.remove(os, txn);
     });
   case CEPH_OSD_OP_CALL:
-    return this->do_op_call(osd_op);
+    return this->do_op_call(osd_op).safe_then(
+      [] {
+        return seastar::now();
+      }, ceph::stateful_errint::handle([] (int err) {
+        // TODO: implement the handler. NOP for now.
+      }));
   case CEPH_OSD_OP_STAT:
     // note: stat does not require RD
     return do_const_op([&osd_op] (/* const */auto& backend, const auto& os) {
index 4c4fa9415b291d433a386eeaa2367df3eda9fce8..f644520be4372707bc61da0f33da3f14778dfd56 100644 (file)
@@ -19,6 +19,7 @@
 #include "osd/osd_types.h"
 #include "osd/osd_internal_types.h"
 
+#include "crimson/common/errorator.h"
 #include "crimson/common/type_helpers.h"
 #include "crimson/osd/osd_operations/client_request.h"
 #include "crimson/osd/osd_operations/peering_event.h"
@@ -64,7 +65,8 @@ class OpsExecuter {
   template <class Context, class MainFunc, class EffectFunc>
   auto with_effect(Context&& ctx, MainFunc&& main_func, EffectFunc&& effect_func);
 
-  seastar::future<> do_op_call(class OSDOp& osd_op);
+  using call_errorator = ceph::errorator<ceph::stateful_errint>;
+  call_errorator::future<> do_op_call(class OSDOp& osd_op);
 
   template <class Func>
   auto do_const_op(Func&& f) {