crimson/osd: extract with_sequencer() method out

because we should only ensure the ordering of the requests touching
the objects, the other requests like pgls should not be ordered along
with them, so as the first step, let's extract with_sequencer() method
out, so we can differentiate these two cases with minimal repeatings.

Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
Kefu Chai 2021-06-16 17:46:06 +08:00
parent 57aefd9250
commit 1a44046339
2 changed files with 11 additions and 8 deletions

View File

@ -87,12 +87,8 @@ seastar::future<> ClientRequest::start()
return interruptor::with_interruption([this, pgref]() mutable {
epoch_t same_interval_since = pgref->get_interval_start_epoch();
logger().debug("{} same_interval_since: {}", *this, same_interval_since);
may_set_prev_op();
return sequencer.start_op(
*this,
handle,
interruptor::wrap_function(
[this, pgref]() mutable -> interruptible_future<> {
return with_sequencer(
interruptor::wrap_function([this, pgref]() -> interruptible_future<> {
PG &pg = *pgref;
if (pg.can_discard_op(*m)) {
return osd.send_incremental_map(conn, m->get_map_epoch());
@ -119,8 +115,7 @@ seastar::future<> ClientRequest::start()
}
});
})
).then_interruptible([this, pgref]() {
sequencer.finish_op(*this);
).then_interruptible([pgref]() {
return seastar::stop_iteration::yes;
});
}, [this, pgref](std::exception_ptr eptr) {

View File

@ -63,6 +63,14 @@ public:
}
private:
template <typename FuncT>
interruptible_future<> with_sequencer(FuncT&& func) {
may_set_prev_op();
return sequencer.start_op(*this, handle, std::forward<FuncT>(func))
.then_interruptible([this] {
sequencer.finish_op(*this);
});
}
interruptible_future<> do_process(
Ref<PG>& pg,
crimson::osd::ObjectContextRef obc);