]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: bug in versioning concurrent, list and get have consistency issue 26548/head
authorwanghao72 <wanghao72@baidu.com>
Wed, 30 Jan 2019 07:18:06 +0000 (15:18 +0800)
committerCasey Bodley <cbodley@redhat.com>
Wed, 20 Feb 2019 18:49:13 +0000 (13:49 -0500)
Fixes: https://tracker.ceph.com/issues/38060
Signed-off-by: Wang Hao <wanghao72@baidu.com>
(cherry picked from commit cc2a96a47fd71dc8399e31f1a9e87d8a13ea3419)

src/rgw/rgw_rados.cc

index ff4ac695954fe38658e0e555b03b67575d767145..6278c13f103166dac531897a08d073a0a1be37ce 100644 (file)
@@ -11493,6 +11493,11 @@ int RGWRados::apply_olh_log(RGWObjectCtx& obj_ctx, RGWObjState& state, const RGW
   op.cmpxattr(RGW_ATTR_OLH_ID_TAG, CEPH_OSD_CMPXATTR_OP_EQ, olh_tag);
   op.cmpxattr(RGW_ATTR_OLH_VER, CEPH_OSD_CMPXATTR_OP_GT, last_ver);
 
+  bufferlist ver_bl;
+  string last_ver_s = to_string(last_ver);
+  ver_bl.append(last_ver_s.c_str(), last_ver_s.size());
+  op.setxattr(RGW_ATTR_OLH_VER, ver_bl);
+
   struct timespec mtime_ts = real_clock::to_timespec(state.mtime);
   op.mtime2(&mtime_ts);
 
@@ -11584,7 +11589,7 @@ int RGWRados::apply_olh_log(RGWObjectCtx& obj_ctx, RGWObjState& state, const RGW
     ObjectWriteOperation rm_op;
 
     rm_op.cmpxattr(RGW_ATTR_OLH_ID_TAG, CEPH_OSD_CMPXATTR_OP_EQ, olh_tag);
-    rm_op.cmpxattr(RGW_ATTR_OLH_VER, CEPH_OSD_CMPXATTR_OP_GT, last_ver);
+    rm_op.cmpxattr(RGW_ATTR_OLH_VER, CEPH_OSD_CMPXATTR_OP_EQ, last_ver);
     cls_obj_check_prefix_exist(rm_op, RGW_ATTR_OLH_PENDING_PREFIX, true); /* fail if found one of these, pending modification */
     rm_op.remove();