]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: forward input data when forwarding set_bucket_version to master 10077/head
authorYehuda Sadeh <yehuda@redhat.com>
Fri, 1 Jul 2016 00:36:16 +0000 (17:36 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 1 Jul 2016 01:29:51 +0000 (18:29 -0700)
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>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_s3.cc

index f198ea6c3093896c542b9f9f6cb03be8995d2cce..210ba621abbbe5b8396b8e2a92c69183a73b56be 100644 (file)
@@ -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;
index 03f857dadc1325dd460b5f02ce9abe2033ea4a8e..49018f457c78f2048a5148b41b957c6d49f4ae41 100644 (file)
@@ -446,6 +446,7 @@ public:
 class RGWSetBucketVersioning : public RGWOp {
 protected:
   bool enable_versioning;
+  bufferlist in_data;
 public:
   RGWSetBucketVersioning() : enable_versioning(false) {}
 
index 27cc257738ca656c39ab7396a6d95c59b3796d81..31cbca000eb7252b0633022f5077ba9142794f64 100644 (file)
@@ -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;