SnapTrimObjSubEvent::snap_trim_obj_subevent_ret_t
SnapTrimObjSubEvent::start()
{
- return enter_stage<interruptor>(
+ auto exit_handle = seastar::defer([this] {
+ logger().debug("{}: exit", *this);
+ handle.exit();
+ });
+
+ co_await enter_stage<interruptor>(
client_pp().wait_for_active
- ).then_interruptible([this] {
- return with_blocking_event<PGActivationBlocker::BlockingEvent,
- interruptor>([this] (auto&& trigger) {
+ );
+
+ co_await with_blocking_event<PGActivationBlocker::BlockingEvent, interruptor>(
+ [this] (auto&& trigger) {
return pg->wait_for_active_blocker.wait(std::move(trigger));
});
- }).then_interruptible([this] {
- return enter_stage<interruptor>(
- client_pp().recover_missing);
- }).then_interruptible([] {
- //return do_recover_missing(pg, get_target_oid());
- return seastar::now();
- }).then_interruptible([this] {
- return enter_stage<interruptor>(
- client_pp().get_obc);
- }).then_interruptible([this] {
- logger().debug("{}: getting obc for {}", *this, coid);
- // end of commonality
- // lock both clone's and head's obcs
- return pg->obc_loader.with_obc<RWState::RWWRITE>(
- coid,
- [this](auto head_obc, auto clone_obc) {
+
+ co_await enter_stage<interruptor>(
+ client_pp().recover_missing);
+
+ // co_await do_recover_missing(pg, get_target_oid());
+
+ co_await enter_stage<interruptor>(
+ client_pp().get_obc);
+
+ logger().debug("{}: getting obc for {}", *this, coid);
+ // end of commonality
+ // lock both clone's and head's obcs
+ co_await pg->obc_loader.with_obc<RWState::RWWRITE>(
+ coid,
+ [this](auto head_obc, auto clone_obc) {
logger().debug("{}: got clone_obc={}", *this, clone_obc->get_oid());
return enter_stage<interruptor>(
client_pp().process
).then_interruptible(
[this,clone_obc=std::move(clone_obc), head_obc=std::move(head_obc)]() mutable {
- logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid());
- return remove_or_update(
- clone_obc, head_obc
- ).safe_then_interruptible([clone_obc, this](auto&& txn) mutable {
- auto [submitted, all_completed] = pg->submit_transaction(
- std::move(clone_obc),
- std::move(txn),
- std::move(osd_op_p),
- std::move(log_entries));
- return submitted.then_interruptible(
- [all_completed=std::move(all_completed), this] () mutable {
- return enter_stage<interruptor>(
- wait_repop
- ).then_interruptible([all_completed=std::move(all_completed)] () mutable {
- return std::move(all_completed);
- });
- });
- });
- });
+ logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid());
+ return remove_or_update(
+ clone_obc, head_obc
+ ).safe_then_interruptible([clone_obc, this](auto&& txn) mutable {
+ auto [submitted, all_completed] = pg->submit_transaction(
+ std::move(clone_obc),
+ std::move(txn),
+ std::move(osd_op_p),
+ std::move(log_entries));
+ return submitted.then_interruptible(
+ [all_completed=std::move(all_completed), this] () mutable {
+ return enter_stage<interruptor>(
+ wait_repop
+ ).then_interruptible([all_completed=std::move(all_completed)] () mutable {
+ return std::move(all_completed);
+ });
+ });
+ });
+ });
},
- false).si_then([this] {
- logger().debug("{}: completed", *this);
- return handle.complete();
- }).handle_error_interruptible(
- remove_or_update_iertr::pass_further{},
- crimson::ct_error::assert_all{"unexpected error in SnapTrimObjSubEvent"}
- );
- }).finally([this] {
- logger().debug("{}: exit", *this);
- handle.exit();
- });
+ false
+ ).handle_error_interruptible(
+ remove_or_update_iertr::pass_further{},
+ crimson::ct_error::assert_all{"unexpected error in SnapTrimObjSubEvent"}
+ );
+
+ logger().debug("{}: completed", *this);
+ co_await interruptor::make_interruptible(handle.complete());
}
void SnapTrimObjSubEvent::print(std::ostream &lhs) const