From: Sage Weil Date: Thu, 17 Mar 2016 17:28:40 +0000 (-0400) Subject: osd/ReplicatedPG: do not proxy read *and* process op locally X-Git-Tag: v0.94.7~16^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=7eae05e14231cb3476d14bf74b15bf9646849d09;p=ceph.git osd/ReplicatedPG: do not proxy read *and* process op locally If we proxy the read, we cannot return false, even if we fail to also trigger a promotion. Fixes: #15171 Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 3c6511f66bb2a..6fa35d542b5af 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1805,6 +1805,7 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op, bool can_proxy_read = get_osdmap()->get_up_osd_features() & CEPH_FEATURE_OSD_PROXY_FEATURES; OpRequestRef promote_op; + bool did_proxy_read = false; switch (pool.info.cache_mode) { case pg_pool_t::CACHEMODE_WRITEBACK: @@ -1832,10 +1833,12 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op, return true; } - if (can_proxy_read) + if (can_proxy_read) { do_proxy_read(op); - else + did_proxy_read = true; + } else { promote_op = op; // for non-proxy case promote_object needs this + } // Avoid duplicate promotion if (obc.get() && obc->is_blocked()) { @@ -1877,7 +1880,7 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op, promote_object(obc, missing_oid, oloc, promote_op); } else { // not promoting - return false; + return did_proxy_read; } break; }