return seastar::repeat([this, opref=IRef{this}]() mutable {
logger().debug("{}: in repeat", *this);
return enter_stage(cp().await_map).then([this]() {
- return with_blocking_future(
- osd.osdmap_gate.wait_for_map(
- m->get_min_epoch()));
+ return with_blocking_event<OSD_OSDMapGate::OSDMapBlocker::BlockingEvent>(
+ [this](auto&& trigger) {
+ return osd.osdmap_gate.wait_for_map(std::move(trigger),
+ m->get_min_epoch());
+ });
}).then([this](epoch_t epoch) {
return with_blocking_future(handle.enter(cp().get_pg));
}).then([this] {
#include "osd/osd_op_util.h"
#include "crimson/net/Connection.h"
#include "crimson/osd/object_context.h"
+#include "crimson/osd/osdmap_gate.h"
#include "crimson/osd/osd_operation.h"
#include "crimson/osd/osd_operations/client_request_common.h"
#include "crimson/osd/osd_operations/common/pg_pipeline.h"
public:
std::tuple<
- ConnectionPipeline::AwaitMap::BlockingEvent
+ ConnectionPipeline::AwaitMap::BlockingEvent,
+ OSD_OSDMapGate::OSDMapBlocker::BlockingEvent
> tracking_events;
};
// wait for an osdmap whose epoch is greater or equal to given epoch
blocking_future<epoch_t>
wait_for_map(epoch_t epoch);
+ // TODO: define me!
seastar::future<epoch_t>
wait_for_map(typename OSDMapBlocker::BlockingEvent::TriggerI&& trigger,
epoch_t epoch);