From: Kefu Chai Date: Mon, 14 Sep 2020 06:22:40 +0000 (+0800) Subject: crimson/osd: add ObjectContext::wait_recovery_read() X-Git-Tag: v16.1.0~1089^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=111a145371bc503bd8384f937010fe533c865f4a;p=ceph.git crimson/osd: add ObjectContext::wait_recovery_read() instead of reusing ObjectContext::get_recovery_read() for both sync call and async call. just add a new method for the async call for better readability Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/object_context.h b/src/crimson/osd/object_context.h index 40bda6592e84a..80b64cd553595 100644 --- a/src/crimson/osd/object_context.h +++ b/src/crimson/osd/object_context.h @@ -203,14 +203,16 @@ public: void drop_read() { return put_lock_type(RWState::RWREAD); } - seastar::future get_recovery_read(bool can_wait = false) { - if (bool acquired = rwstate.get_recovery_read(); - acquired || !can_wait) { - return seastar::make_ready_future(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(true); }); + }); } void drop_recovery_read() { ceph_assert(rwstate.recovery_read_marker); diff --git a/src/crimson/osd/pg_recovery.cc b/src/crimson/osd/pg_recovery.cc index 473be5f974760..95121f292f693 100644 --- a/src/crimson/osd/pg_recovery.cc +++ b/src/crimson/osd/pg_recovery.cc @@ -322,7 +322,7 @@ void PGRecovery::on_local_recover( 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(); diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index e888d4e9142b6..57f64652af7e6 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -133,14 +133,7 @@ seastar::future<> ReplicatedRecoveryBackend::load_obc_for_recovery( // 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] = @@ -150,7 +143,7 @@ seastar::future<> ReplicatedRecoveryBackend::load_obc_for_recovery( 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<>(); }) );