]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: remove original object in put_obj, instead of truncate
authorYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 10 Aug 2011 19:13:16 +0000 (12:13 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 10 Aug 2011 19:14:35 +0000 (12:14 -0700)
src/rgw/rgw_rados.cc

index 4adee9b442f6d8759d36894158ed711305035783..c0fed5833b6ee1d1423b86cbba12ceb77ac9c929 100644 (file)
@@ -1120,13 +1120,16 @@ int RGWRados::clone_objs(void *ctx, rgw_obj& dst_obj,
   io_ctx.locator_set_key(dst_obj.key);
   ObjectWriteOperation op;
 
+  if (truncate_dest) {
+    op.remove();
+    op.set_op_flags(OP_FAILOK); // don't fail if object didn't exist
+  }
+
   if (category.size())
     op.create(false, category);
   else
     op.create(false);
 
-  if (truncate_dest)
-    op.truncate(0);
 
   map<string, bufferlist>::iterator iter;
   for (iter = attrs.begin(); iter != attrs.end(); ++iter) {