]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: reset objv tracker on bucket recreation 1519/head
authorYehuda Sadeh <yehuda@inktank.com>
Wed, 19 Feb 2014 16:11:56 +0000 (08:11 -0800)
committerDanny Al-Gaaf <danny.al-gaaf@bisect.de>
Wed, 19 Mar 2014 13:15:45 +0000 (14:15 +0100)
Fixes: #6951
If we cannot create a new bucket (as it already existed), we need to
read the old bucket's info. However, this was failing as we were holding
the objv tracker that we created for the bucket creation. We need to
clear it, as subsequent read using it will fail.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
(cherry picked from commit 859ed33ed7f9a96f4783dfb3e130d5eb60c622dd)

src/rgw/rgw_common.h
src/rgw/rgw_rados.cc

index cc64356b7f9bf74707be6352cbeb6e9eda4685f9..a281d6b4c9fc33940be314fc6adb4e5c646261b5 100644 (file)
@@ -643,6 +643,11 @@ struct RGWObjVersionTracker {
     write_version = obj_version();
   }
 
+  void clear() {
+    read_version = obj_version();
+    write_version = obj_version();
+  }
+
   void generate_new_write_ver(CephContext *cct);
 };
 
index 098325b36db4775ec4c103f06eb9d801e086e957..dcc3a435345b5cfa761fcee17f01984713ad6cf0 100644 (file)
@@ -1885,6 +1885,7 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
     ret = put_linked_bucket_info(info, exclusive, 0, pep_objv, &attrs, true);
     if (ret == -EEXIST) {
        /* we need to reread the info and return it, caller will have a use for it */
+      info.objv_tracker.clear();
       r = get_bucket_info(NULL, bucket.name, info, NULL, NULL);
       if (r < 0) {
         if (r == -ENOENT) {