]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: set bucket versioninig do not change versioning status if missing "Status" in xml 17662/head
authorlu.shasha <lu.shasha@eisoo.com>
Tue, 12 Sep 2017 03:04:23 +0000 (11:04 +0800)
committerlu.shasha <lu.shasha@eisoo.com>
Thu, 14 Sep 2017 02:15:52 +0000 (10:15 +0800)
Fixes: http://tracker.ceph.com/issues/21364
Signed-off-by: Shasha Lu <lu.shasha@eisoo.com>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_s3.cc

index 64bee32ec97cc9c43719ee319f30a91a6949ddec..43e25ceab8be0f4b38dc4ac7ca982ce9d0b1240e 100644 (file)
@@ -2034,11 +2034,13 @@ void RGWSetBucketVersioning::execute()
     }
   }
 
-  if (enable_versioning) {
+  if (versioning_status == VersioningEnabled) {
     s->bucket_info.flags |= BUCKET_VERSIONED;
     s->bucket_info.flags &= ~BUCKET_VERSIONS_SUSPENDED;
-  } else {
+  } else if (versioning_status == VersioningSuspended) {
     s->bucket_info.flags |= (BUCKET_VERSIONED | BUCKET_VERSIONS_SUSPENDED);
+  } else {
+    return;
   }
 
   op_ret = store->put_bucket_instance_info(s->bucket_info, false, real_time(),
index b8fe07d3a73c49c28db76579226f0f16a49e9397..cd9b7064e2b4995e3d725ab29814c21dd207cd38 100644 (file)
@@ -760,12 +760,18 @@ public:
   uint32_t op_mask() override { return RGW_OP_TYPE_READ; }
 };
 
+enum BucketVersionStatus {
+  VersioningNotChanged = 0,
+  VersioningEnabled = 1,
+  VersioningSuspended =2,
+};
+
 class RGWSetBucketVersioning : public RGWOp {
 protected:
-  bool enable_versioning;
+  int versioning_status;
   bufferlist in_data;
 public:
-  RGWSetBucketVersioning() : enable_versioning(false) {}
+  RGWSetBucketVersioning() : versioning_status(VersioningNotChanged) {}
 
   int verify_permission() override;
   void pre_exec() override;
index 024ac4a0229f5379928fac36ec15ddfd7dc0f03d..5d91ec83965308859029558eb6700369fecda033 100644 (file)
@@ -893,21 +893,22 @@ public:
   RGWSetBucketVersioningParser() {}
   ~RGWSetBucketVersioningParser() override {}
 
-  int get_versioning_status(bool *status) {
+  int get_versioning_status(int *status) {
     XMLObj *config = find_first("VersioningConfiguration");
     if (!config)
       return -EINVAL;
 
-    *status = false;
+    *status = VersioningNotChanged;
 
     XMLObj *field = config->find_first("Status");
     if (!field)
       return 0;
 
+    *status = VersioningSuspended;
     string& s = field->get_data();
 
     if (stringcasecmp(s, "Enabled") == 0) {
-      *status = true;
+      *status = VersioningEnabled;
     } else if (stringcasecmp(s, "Suspended") != 0) {
       return -EINVAL;
     }
@@ -952,7 +953,7 @@ int RGWSetBucketVersioning_ObjStore_S3::get_params()
     in_data.append(data, len);
   }
 
-  r = parser.get_versioning_status(&enable_versioning);
+  r = parser.get_versioning_status(&versioning_status);
   
   return r;
 }