From: Casey Bodley Date: Thu, 6 Aug 2020 16:57:13 +0000 (-0400) Subject: rgw: system object cache tracks version over increments X-Git-Tag: v15.2.9~122^2~46^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=98166c71cf6d837a7e1a2fa03efa742eddb9014a;p=ceph.git rgw: system object cache tracks version over increments instead of checking write_version before the write (which doesn't take cls_version_inc() into account), check read_version after apply_write() has been called. only cache the result if we got a read_version != 0 Signed-off-by: Casey Bodley (cherry picked from commit ad326ffc3fba865d8c426de4be0193172b7688b7) --- diff --git a/src/rgw/services/svc_sys_obj_cache.cc b/src/rgw/services/svc_sys_obj_cache.cc index 04a958cd051a..6943542b2a87 100644 --- a/src/rgw/services/svc_sys_obj_cache.cc +++ b/src/rgw/services/svc_sys_obj_cache.cc @@ -253,13 +253,13 @@ int RGWSI_SysObj_Cache::set_attrs(const rgw_raw_obj& obj, } info.status = 0; info.flags = CACHE_FLAG_MODIFY_XATTRS; - if (objv_tracker) { - info.version = objv_tracker->write_version; - info.flags |= CACHE_FLAG_OBJV; - } int ret = RGWSI_SysObj_Core::set_attrs(obj, attrs, rmattrs, objv_tracker, y); string name = normal_name(pool, oid); if (ret >= 0) { + if (objv_tracker && objv_tracker->read_version.ver) { + info.version = objv_tracker->read_version; + info.flags |= CACHE_FLAG_OBJV; + } cache.put(name, info, NULL); int r = distribute_cache(name, obj, info, UPDATE_OBJ, y); if (r < 0) @@ -288,10 +288,6 @@ int RGWSI_SysObj_Cache::write(const rgw_raw_obj& obj, info.status = 0; info.data = data; info.flags = CACHE_FLAG_XATTRS | CACHE_FLAG_DATA | CACHE_FLAG_META; - if (objv_tracker) { - info.version = objv_tracker->write_version; - info.flags |= CACHE_FLAG_OBJV; - } ceph::real_time result_mtime; int ret = RGWSI_SysObj_Core::write(obj, &result_mtime, attrs, exclusive, data, @@ -299,6 +295,10 @@ int RGWSI_SysObj_Cache::write(const rgw_raw_obj& obj, if (pmtime) { *pmtime = result_mtime; } + if (objv_tracker && objv_tracker->read_version.ver) { + info.version = objv_tracker->read_version; + info.flags |= CACHE_FLAG_OBJV; + } info.meta.mtime = result_mtime; info.meta.size = data.length(); string name = normal_name(pool, oid); @@ -339,13 +339,13 @@ int RGWSI_SysObj_Cache::write_data(const rgw_raw_obj& obj, info.status = 0; info.flags = CACHE_FLAG_DATA; - if (objv_tracker) { - info.version = objv_tracker->write_version; - info.flags |= CACHE_FLAG_OBJV; - } int ret = RGWSI_SysObj_Core::write_data(obj, data, exclusive, objv_tracker, y); string name = normal_name(pool, oid); if (ret >= 0) { + if (objv_tracker && objv_tracker->read_version.ver) { + info.version = objv_tracker->read_version; + info.flags |= CACHE_FLAG_OBJV; + } cache.put(name, info, NULL); int r = distribute_cache(name, obj, info, UPDATE_OBJ, y); if (r < 0)