ShardServices &shard_services, Ref<PG> pg)
{
logger().debug("{}: RepRequest::with_pg", *this);
-
IRef ref = this;
return interruptor::with_interruption([this, pg] {
- return pg->handle_rep_op(req);
- }, [ref](std::exception_ptr) { return seastar::now(); }, pg);
+ logger().debug("{}: pg present", *this);
+ return this->template enter_stage<interruptor>(pp(*pg).await_map
+ ).then_interruptible([this, pg] {
+ return this->template with_blocking_event<
+ PG_OSDMapGate::OSDMapBlocker::BlockingEvent
+ >([this, pg](auto &&trigger) {
+ return pg->osdmap_gate.wait_for_map(
+ std::move(trigger), req->min_epoch);
+ });
+ }).then_interruptible([this, pg] (auto) {
+ return pg->handle_rep_op(req);
+ });
+ }, [ref](std::exception_ptr) {
+ return seastar::now();
+ }, pg);
}
}
ConnectionPipeline::AwaitActive::BlockingEvent,
ConnectionPipeline::AwaitMap::BlockingEvent,
ConnectionPipeline::GetPG::BlockingEvent,
+ ClientRequest::PGPipeline::AwaitMap::BlockingEvent,
+ PG_OSDMapGate::OSDMapBlocker::BlockingEvent,
PGMap::PGCreationBlockingEvent,
OSD_OSDMapGate::OSDMapBlocker::BlockingEvent
> tracking_events;