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: v14.2.12~47^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d5a3421bf78441252d26becffc2ab32143141d7d;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) Conflicts: src/rgw/services/svc_sys_obj_cache.cc - in nautilus, the functions do not take an optional_yield argument --- diff --git a/src/rgw/services/svc_sys_obj_cache.cc b/src/rgw/services/svc_sys_obj_cache.cc index 7c2817fed91..40cb771ff87 100644 --- a/src/rgw/services/svc_sys_obj_cache.cc +++ b/src/rgw/services/svc_sys_obj_cache.cc @@ -226,13 +226,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); 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); if (r < 0) @@ -260,10 +260,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, @@ -271,6 +267,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); @@ -310,13 +310,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); 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); if (r < 0)