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;
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();
});
}
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) {
#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"
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) {