From 1eec00bef1e5540bf3e31d1f8fb1645eb64b1e62 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 30 Jun 2016 17:36:16 -0700 Subject: [PATCH] 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 --- src/rgw/rgw_op.cc | 13 +++++-------- src/rgw/rgw_op.h | 1 + src/rgw/rgw_rest_s3.cc | 5 +++++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index f198ea6c30938..210ba621abbbe 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1651,20 +1651,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 03f857dadc132..49018f457c78f 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -446,6 +446,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 27cc257738ca6..31cbca000eb72 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() return r; } + 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); return r; -- 2.39.5