From: Yehuda Sadeh Date: Fri, 1 Jul 2016 00:36:16 +0000 (-0700) Subject: rgw: forward input data when forwarding set_bucket_version to master X-Git-Tag: v10.2.4~85^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=83a91baff05f03f907fb80702ae1c68194b5308b;p=ceph.git rgw: forward input data when forwarding set_bucket_version to master Fixes: http://tracker.ceph.com/issues/16494 Needed to keep input data around to be forwarded correctly. Also, master does not send any data back, so don't try to parse anything. Signed-off-by: Yehuda Sadeh (cherry picked from commit 1eec00bef1e5540bf3e31d1f8fb1645eb64b1e62) --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 1e2e0526dff..206a484d601 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1552,20 +1552,17 @@ void RGWSetBucketVersioning::pre_exec() void RGWSetBucketVersioning::execute() { + op_ret = get_params(); + if (op_ret < 0) + return; + if (!store->is_meta_master()) { - bufferlist in_data; - JSONParser jp; - op_ret = forward_request_to_master(s, NULL, store, in_data, &jp); + op_ret = forward_request_to_master(s, NULL, store, in_data, nullptr); if (op_ret < 0) { ldout(s->cct, 20) << __func__ << "forward_request_to_master returned ret=" << op_ret << dendl; } return; } - - op_ret = get_params(); - - if (op_ret < 0) - return; if (enable_versioning) { s->bucket_info.flags |= BUCKET_VERSIONED; diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index f66d87700c9..ee933c428b8 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -449,6 +449,7 @@ public: class RGWSetBucketVersioning : public RGWOp { protected: bool enable_versioning; + bufferlist in_data; public: RGWSetBucketVersioning() : enable_versioning(false) {} diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 03ce3a7b99f..ba60ffd11c5 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -746,6 +746,11 @@ int RGWSetBucketVersioning_ObjStore_S3::get_params() goto done; } + if (!store->is_meta_master()) { + /* only need to keep this data around if we're not meta master */ + in_data.append(data, len); + } + r = parser.get_versioning_status(&enable_versioning); done: