]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: forward input data when forwarding set_bucket_version to master 11367/head
authorYehuda Sadeh <yehuda@redhat.com>
Fri, 1 Jul 2016 00:36:16 +0000 (17:36 -0700)
committerMatt Benjamin <mbenjamin@redhat.com>
Fri, 7 Oct 2016 13:48:54 +0000 (09:48 -0400)
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 <yehuda@redhat.com>
(cherry picked from commit 1eec00bef1e5540bf3e31d1f8fb1645eb64b1e62)

src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_s3.cc

index 1e2e0526dfff26e6ae4b9aa420b29f9f8ffdb8a2..206a484d6010d6723442f3b468f92ba74b378c54 100644 (file)
@@ -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;
index f66d87700c9108fd4e645ec7f095eb1d9341b9a0..ee933c428b80c590194570b2604c5b14d9d7d876 100644 (file)
@@ -449,6 +449,7 @@ public:
 class RGWSetBucketVersioning : public RGWOp {
 protected:
   bool enable_versioning;
+  bufferlist in_data;
 public:
   RGWSetBucketVersioning() : enable_versioning(false) {}
 
index 03ce3a7b99f6f8fb4b1f5f7145aca46a1bc9a86f..ba60ffd11c512f402e572128805c0965621d739e 100644 (file)
@@ -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: