From 4f731219623df2aff28a1f35848432c973e4edc1 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 8 Jul 2011 15:33:41 -0700 Subject: [PATCH] rgw: fix put of zero sized objects --- src/rgw/rgw_op.cc | 11 ++++++++--- src/rgw/rgw_rados.cc | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index d9502de2b114c..d45e28a51b994 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -519,6 +519,7 @@ void RGWPutObj::execute() string part_num; list 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) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index a507e186d1c87..efad3f80ba0fb 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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; -- 2.39.5