From: Casey Bodley Date: Sun, 18 Feb 2024 15:29:13 +0000 (-0500) Subject: rgw: RGWSI_SysObj_Cache::remove() invalidates after successful delete X-Git-Tag: v18.2.4~172^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2aced14a331d1f52ca4a39a4e55d72167681bd5;p=ceph.git rgw: RGWSI_SysObj_Cache::remove() invalidates after successful delete invalidating the cache before the librados delete means that a racing call to `RGWSI_SysObj_Cache::read()` may succeed and repopulate the cache. in that case, subsequent reads will continue to return cached data even after the librados delete succeeds Fixes: https://tracker.ceph.com/issues/64480 Signed-off-by: Casey Bodley (cherry picked from commit 0eebbc3f02ad153d41d23de227bd989da50e54cf) --- diff --git a/src/rgw/services/svc_sys_obj_cache.cc b/src/rgw/services/svc_sys_obj_cache.cc index d1b7a3dbb3e7..4c3603d1cde8 100644 --- a/src/rgw/services/svc_sys_obj_cache.cc +++ b/src/rgw/services/svc_sys_obj_cache.cc @@ -90,6 +90,11 @@ int RGWSI_SysObj_Cache::remove(const DoutPrefixProvider *dpp, optional_yield y) { + int r = RGWSI_SysObj_Core::remove(dpp, objv_tracker, obj, y); + if (r < 0) { + return r; + } + rgw_pool pool; string oid; normalize_pool_and_obj(obj.pool, obj.oid, pool, oid); @@ -98,12 +103,12 @@ int RGWSI_SysObj_Cache::remove(const DoutPrefixProvider *dpp, cache.invalidate_remove(dpp, name); ObjectCacheInfo info; - int r = distribute_cache(dpp, name, obj, info, INVALIDATE_OBJ, y); + r = distribute_cache(dpp, name, obj, info, INVALIDATE_OBJ, y); if (r < 0) { ldpp_dout(dpp, 0) << "ERROR: " << __func__ << "(): failed to distribute cache: r=" << r << dendl; - } + } // not fatal - return RGWSI_SysObj_Core::remove(dpp, objv_tracker, obj, y); + return 0; } int RGWSI_SysObj_Cache::read(const DoutPrefixProvider *dpp,