From 6767397d0b12c68f17bcd8364592f66a85285d45 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 30 Aug 2020 23:11:40 +0800 Subject: [PATCH] crimson/osd: return EAGAIN if !can_serve_replica_read() it's necessary for serving balanced read. Signed-off-by: Kefu Chai --- src/crimson/osd/osd_operations/client_request.cc | 6 ++++++ 1 file changed, 6 insertions(+) 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, -- 2.47.3