From: Josh Durgin Date: Wed, 7 Jan 2015 21:23:44 +0000 (-0800) Subject: Merge pull request #3167 from ceph/wip-10307 X-Git-Tag: v0.92~58 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f31020dac2d80d839e784c7624764104c3980ee5;p=ceph.git Merge pull request #3167 from ceph/wip-10307 rgw: use s->bucket_attrs instead of trying to read obj attrs Reviewed-by: Josh Durgin Reviewed-by: Sage Weil --- f31020dac2d80d839e784c7624764104c3980ee5 diff --cc src/rgw/rgw_op.cc index 0319a56982da,97d64f5e494c..80008dc7a08a --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@@ -1911,18 -1897,15 +1911,22 @@@ void RGWPutMetadata::execute( /* no need to track object versioning, need it for bucket's data only */ RGWObjVersionTracker *ptracker = (s->object ? NULL : &s->bucket_info.objv_tracker); - /* check if obj exists, read orig attrs */ - ret = get_obj_attrs(store, s, obj, orig_attrs, NULL, ptracker); - if (ret < 0) - return; + if (s->object) { + /* check if obj exists, read orig attrs */ + ret = get_obj_attrs(store, s, obj, orig_attrs, NULL, ptracker); + if (ret < 0) + return; + } else { + orig_attrs = s->bucket_attrs; + } + if (!s->object && !placement_rule.empty()) { + if (placement_rule != s->bucket_info.placement_rule) { + ret = -EEXIST; + return; + } + } + /* only remove meta attrs */ for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) { const string& name = iter->first;