From ef6d3ad964d34bc526dc4435486bd5c8cdc3b230 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 5 Nov 2014 13:40:55 -0800 Subject: [PATCH] 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 --- src/rgw/rgw_op.cc | 50 ----------------------------------------------- src/rgw/rgw_op.h | 2 -- 2 files changed, 52 deletions(-) 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(); -- 2.47.3