From a5389c09aa1ac0ab1759513cb694a8e9e32a415c Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Sun, 11 Dec 2022 13:44:17 +0000 Subject: [PATCH] crimson/osd/osd_operations/client_request: Skip do_recover_missing() on replica * assert internal_client_request is on primary since do_recover_missing is also called by internal requests. Signed-off-by: Matan Breizman (cherry picked from commit 7fd0b34521d14423e3bdaf260895cd005dbf918a) --- src/crimson/osd/osd_operations/client_request.cc | 8 +++++++- src/crimson/osd/osd_operations/client_request_common.cc | 1 + src/crimson/osd/osd_operations/internal_client_request.cc | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index 79808e82233..df2ea1523b6 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -211,7 +211,13 @@ ClientRequest::process_op(instance_handle_t &ihref, Ref &pg) *this ).then_interruptible( [this, pg]() mutable { - return do_recover_missing(pg, m->get_hobj()); + if (pg->is_primary()) { + return do_recover_missing(pg, m->get_hobj()); + } else { + logger().debug("process_op: Skipping do_recover_missing" + "on non primary pg"); + return interruptor::now(); + } }).then_interruptible([this, pg, &ihref]() mutable { return pg->already_complete(m->get_reqid()).then_interruptible( [this, pg, &ihref](auto completed) mutable diff --git a/src/crimson/osd/osd_operations/client_request_common.cc b/src/crimson/osd/osd_operations/client_request_common.cc index e383d24e03b..cfd22c774e0 100644 --- a/src/crimson/osd/osd_operations/client_request_common.cc +++ b/src/crimson/osd/osd_operations/client_request_common.cc @@ -18,6 +18,7 @@ CommonClientRequest::do_recover_missing( Ref& pg, const hobject_t& soid) { eversion_t ver; + assert(pg->is_primary()); logger().debug("{} check for recovery, {}", __func__, soid); if (!pg->is_unreadable_object(soid, &ver) && !pg->is_degraded_or_backfilling_object(soid)) { diff --git a/src/crimson/osd/osd_operations/internal_client_request.cc b/src/crimson/osd/osd_operations/internal_client_request.cc index f15e434f8fd..e71804d88ea 100644 --- a/src/crimson/osd/osd_operations/internal_client_request.cc +++ b/src/crimson/osd/osd_operations/internal_client_request.cc @@ -27,6 +27,7 @@ InternalClientRequest::InternalClientRequest(Ref pg) : pg(std::move(pg)) { assert(bool(this->pg)); + assert(this->pg->is_primary()); } InternalClientRequest::~InternalClientRequest() -- 2.39.5