]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix put of zero sized objects
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 8 Jul 2011 22:33:41 +0000 (15:33 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 8 Jul 2011 22:34:23 +0000 (15:34 -0700)
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc

index d9502de2b114c9c31e642a9ccd6691c3200dc699..d45e28a51b994968549a614c4fc374346edacb16 100644 (file)
@@ -519,6 +519,7 @@ void RGWPutObj::execute()
   string part_num;
   list<struct put_obj_aio_info> pending;
   size_t max_chunks = RGW_MAX_PENDING_CHUNKS;
+  bool created_obj = false;
 
   ret = -EINVAL;
   if (!s->object) {
@@ -597,6 +598,8 @@ void RGWPutObj::execute()
         if (ret < 0)
           goto done;
 
+        created_obj = true;
+
         hash.Update((unsigned char *)data, len);
         info.handle = handle;
         info.data = data;
@@ -656,9 +659,11 @@ void RGWPutObj::execute()
       ret = rgwstore->clone_obj(dst_obj, 0, obj, 0, s->obj_size, attrs);
       if (ret < 0)
         goto done;
-      ret = rgwstore->delete_obj(s->user.user_id, obj);
-      if (ret < 0)
-        goto done;
+      if (created_obj) {
+        ret = rgwstore->delete_obj(s->user.user_id, obj);
+        if (ret < 0)
+          goto done;
+      }
     } else {
       ret = rgwstore->put_obj_meta(s->user.user_id, obj, NULL, attrs, false);
       if (ret < 0)
index a507e186d1c87ff6cacedd1963e9a3f1212df29b..efad3f80ba0fb3dd7001fb905735d7697316b7e5 100644 (file)
@@ -918,8 +918,10 @@ int RGWRados::clone_objs(rgw_obj& dst_obj,
       range_iter++;
       range.len += next.len;
     }
-    RGW_LOG(20) << "calling op.clone_range(dst_ofs=" << range.dst_ofs << ", src.object=" <<  range.src.object << " range.src_ofs=" << range.src_ofs << " range.len=" << range.len << dendl;
-    op.clone_range(range.dst_ofs, range.src.object, range.src_ofs, range.len);
+    if (range.len) {
+      RGW_LOG(20) << "calling op.clone_range(dst_ofs=" << range.dst_ofs << ", src.object=" <<  range.src.object << " range.src_ofs=" << range.src_ofs << " range.len=" << range.len << dendl;
+      op.clone_range(range.dst_ofs, range.src.object, range.src_ofs, range.len);
+    }
   }
 
   bufferlist outbl;