Otherwise, it parks on Process until the repop completes blocking any
other repops, including client IO. Since we don't actually care about
ordering, simply calling handle.complete() would also be viable, but
this is a valid usage of the stage and does provide information to an
operator.
Signed-off-by: Samuel Just <sjust@redhat.com>
struct AwaitMap : OrderedExclusivePhaseT<AwaitMap> {
static constexpr auto type_name = "ClientRequest::PGPipeline::await_map";
} await_map;
- struct WaitRepop : OrderedConcurrentPhaseT<WaitRepop> {
- static constexpr auto type_name = "ClientRequest::PGPipeline::wait_repop";
- } wait_repop;
struct SendReply : OrderedExclusivePhaseT<SendReply> {
static constexpr auto type_name = "ClientRequest::PGPipeline::send_reply";
} send_reply;
struct Process : OrderedExclusivePhaseT<Process> {
static constexpr auto type_name = "CommonPGPipeline::process";
} process;
+ struct WaitRepop : OrderedConcurrentPhaseT<WaitRepop> {
+ static constexpr auto type_name = "ClientRequest::PGPipeline::wait_repop";
+ } wait_repop;
};
} // namespace crimson::osd
std::move(osd_op_p),
std::move(log_entries));
return submitted.then_interruptible(
- [all_completed=std::move(all_completed), this] () mutable {
- return std::move(all_completed);
+ [this, all_completed=std::move(all_completed)]() mutable {
+ return enter_stage<interruptor>(
+ client_pp().wait_repop
+ ).then_interruptible([all_completed=std::move(all_completed)]() mutable{
+ return std::move(all_completed);
+ });
});
});
});
StartEvent,
CommonPGPipeline::GetOBC::BlockingEvent,
CommonPGPipeline::Process::BlockingEvent,
+ CommonPGPipeline::WaitRepop::BlockingEvent,
CompletionEvent
> tracking_events;
};