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 <sage@redhat.com>
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:
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()) {
promote_object(obc, missing_oid, oloc, promote_op);
} else {
// not promoting
- return false;
+ return did_proxy_read;
}
break;
}