From: Yehuda Sadeh Date: Wed, 5 Nov 2014 21:40:55 +0000 (-0800) Subject: rgw: remove swift user manifest (DLO) hash calculation X-Git-Tag: v0.89~59^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ef6d3ad964d34bc526dc4435486bd5c8cdc3b230;p=ceph.git rgw: remove swift user manifest (DLO) hash calculation Fixes: #9973 Backport: firefly, giant Previously we were iterating through the parts, creating hash of the parts etags (as S3 does for multipart uploads). However, swift just calculates the etag for the empty manifest object. Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 7522fc52a532..5952e797b93e 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1533,45 +1533,6 @@ void RGWPutObj::pre_exec() rgw_bucket_object_pre_exec(s); } -static int put_obj_user_manifest_iterate_cb(rgw_bucket& bucket, RGWObjEnt& ent, RGWAccessControlPolicy *bucket_policy, off_t start_ofs, off_t end_ofs, - void *param) -{ - RGWPutObj *op = static_cast(param); - return op->user_manifest_iterate_cb(bucket, ent, bucket_policy, start_ofs, end_ofs); -} - -int RGWPutObj::user_manifest_iterate_cb(rgw_bucket& bucket, RGWObjEnt& ent, RGWAccessControlPolicy *bucket_policy, off_t start_ofs, off_t end_ofs) -{ - rgw_obj part(bucket, ent.name); - - map attrs; - - int ret = get_obj_attrs(store, s, part, attrs, NULL, NULL); - if (ret < 0) { - return ret; - } - map::iterator iter = attrs.find(RGW_ATTR_ETAG); - if (iter == attrs.end()) { - return 0; - } - bufferlist& bl = iter->second; - const char *buf = bl.c_str(); - int len = bl.length(); - while (len > 0 && buf[len - 1] == '\0') { - len--; - } - if (len > 0) { - user_manifest_parts_hash->Update((const byte *)bl.c_str(), len); - } - - if (s->cct->_conf->subsys.should_gather(ceph_subsys_rgw, 20)) { - string e(bl.c_str(), bl.length()); - ldout(s->cct, 20) << __func__ << ": appending user manifest etag: " << e << dendl; - } - - return 0; -} - static int put_data_and_throttle(RGWPutObjProcessor *processor, bufferlist& data, off_t ofs, MD5 *hash, bool need_to_wait) { @@ -1740,7 +1701,6 @@ void RGWPutObj::execute() bufferlist manifest_bl; string manifest_obj_prefix; string manifest_bucket; - RGWBucketInfo bucket_info; char etag_buf[CEPH_CRYPTO_MD5_DIGESTSIZE]; char etag_buf_str[CEPH_CRYPTO_MD5_DIGESTSIZE * 2 + 16]; @@ -1758,16 +1718,6 @@ void RGWPutObj::execute() manifest_bucket = prefix_str.substr(0, pos); manifest_obj_prefix = prefix_str.substr(pos + 1); - ret = store->get_bucket_info(NULL, manifest_bucket, bucket_info, NULL, NULL); - if (ret < 0) { - ldout(s->cct, 0) << "could not get bucket info for bucket=" << manifest_bucket << dendl; - } - ret = iterate_user_manifest_parts(s->cct, store, 0, -1, bucket_info.bucket, manifest_obj_prefix, - NULL, NULL, put_obj_user_manifest_iterate_cb, (void *)this); - if (ret < 0) { - goto done; - } - hash.Final((byte *)etag_buf); buf_to_hex((const unsigned char *)etag_buf, CEPH_CRYPTO_MD5_DIGESTSIZE, etag_buf_str); diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index 44994f37dff4..40761f6a7439 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -358,8 +358,6 @@ public: RGWPutObjProcessor *select_processor(bool *is_multipart); void dispose_processor(RGWPutObjProcessor *processor); - int user_manifest_iterate_cb(rgw_bucket& bucket, RGWObjEnt& ent, RGWAccessControlPolicy *bucket_policy, off_t start_ofs, off_t end_ofs); - int verify_permission(); void pre_exec(); void execute();