void drop_read() {
return put_lock_type(RWState::RWREAD);
}
- seastar::future<bool> get_recovery_read(bool can_wait = false) {
- if (bool acquired = rwstate.get_recovery_read();
- acquired || !can_wait) {
- return seastar::make_ready_future<bool>(acquired);
+ bool get_recovery_read() {
+ return rwstate.get_recovery_read();
+ }
+ seastar::future<> wait_recovery_read() {
+ if (rwstate.get_recovery_read()) {
+ return seastar::make_ready_future<>();
}
return with_queue([this] {
return rwstate.get_recovery_read();
- }).then([] {return seastar::make_ready_future<bool>(true); });
+ });
}
void drop_recovery_read() {
ceph_assert(rwstate.recovery_read_marker);
obc->obs.oi = recovery_info.oi;
// obc is loaded the excl lock
obc->put_lock_type(RWState::RWEXCL);
- ceph_assert_always(obc->get_recovery_read().get0());
+ ceph_assert_always(obc->get_recovery_read());
}
if (!pg->is_unreadable_object(soid)) {
pg->get_recovery_backend()->get_recovering(soid).set_readable();
// obc is loaded with excl lock
recovery_waiter.obc->put_lock_type(RWState::RWEXCL);
}
- bool got = recovery_waiter.obc->get_recovery_read().get0();
- ceph_assert_always(pulled ? got : 1);
- if (got) {
- return seastar::make_ready_future<>();
- }
- return recovery_waiter.obc->get_recovery_read(true).then([](bool) {
- return seastar::now();
- });
+ return recovery_waiter.obc->wait_recovery_read();
}, crimson::osd::PG::load_obc_ertr::all_same_way(
[this, &recovery_waiter, soid](const std::error_code& e) {
auto [obc, existed] =
recovery_waiter.obc = obc;
// obc is loaded with excl lock
recovery_waiter.obc->put_lock_type(RWState::RWEXCL);
- ceph_assert_always(recovery_waiter.obc->get_recovery_read().get0());
+ ceph_assert_always(recovery_waiter.obc->get_recovery_read());
return seastar::make_ready_future<>();
})
);