From: Kefu Chai Date: Sun, 30 Aug 2020 15:11:40 +0000 (+0800) Subject: crimson/osd: return EAGAIN if !can_serve_replica_read() X-Git-Tag: v16.1.0~1270^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F36892%2Fhead;p=ceph.git crimson/osd: return EAGAIN if !can_serve_replica_read() it's necessary for serving balanced read. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index 0ead1626873a..0bdc6da05d0c 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -142,6 +142,12 @@ seastar::future<> ClientRequest::process_op( } else if (is_misdirected(pg)) { logger().trace("process_op: dropping misdirected op"); return seastar::now(); + } else if (!pg.get_peering_state().can_serve_replica_read(m->get_hobj())) { + auto reply = make_message( + m.get(), -EAGAIN, pg.get_osdmap_epoch(), + m->get_flags() & (CEPH_OSD_FLAG_ACK|CEPH_OSD_FLAG_ONDISK), + !m->has_flag(CEPH_OSD_FLAG_RETURNVEC)); + return conn->send(reply); } return pg.with_locked_obc( m,