]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: bucket sync: don't allow replication api on legacy config
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 23 Jan 2020 02:45:26 +0000 (18:45 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Tue, 28 Jan 2020 18:20:40 +0000 (10:20 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_bucket_sync.cc
src/rgw/rgw_bucket_sync.h
src/rgw/rgw_rest_s3.cc

index 2c7efc22920e255484fee261ca3d6292badc35cd..377bd8f0566809f3181db1bba832103b3b4f27c3 100644 (file)
@@ -675,6 +675,7 @@ RGWBucketSyncPolicyHandler::RGWBucketSyncPolicyHandler(RGWSI_Zone *_zone_svc,
 
   if (sync_policy.empty()) {
     RGWSyncPolicyCompat::convert_old_sync_config(zone_svc, sync_modules_svc, &sync_policy);
+    legacy_config = true;
   }
 }
 
@@ -695,6 +696,7 @@ RGWBucketSyncPolicyHandler::RGWBucketSyncPolicyHandler(const RGWBucketSyncPolicy
       }
     }
   }
+  legacy_config = parent->legacy_config;
   bucket = _bucket_info.bucket;
   zone_svc = parent->zone_svc;
   bucket_sync_svc = parent->bucket_sync_svc;
@@ -710,6 +712,7 @@ RGWBucketSyncPolicyHandler::RGWBucketSyncPolicyHandler(const RGWBucketSyncPolicy
   if (_sync_policy) {
     sync_policy = *_sync_policy;
   }
+  legacy_config = parent->legacy_config;
   bucket = _bucket;
   zone_svc = parent->zone_svc;
   bucket_sync_svc = parent->bucket_sync_svc;
index 8ded9d6237953a58c858bce98849f79a51e700eb..488060b7a60acb929da0d67bddeddc18d7889928 100644 (file)
@@ -279,6 +279,7 @@ static inline ostream& operator<<(ostream& os, const RGWBucketSyncFlowManager::e
 }
 
 class RGWBucketSyncPolicyHandler {
+  bool legacy_config{false};
   const RGWBucketSyncPolicyHandler *parent{nullptr};
   RGWSI_Zone *zone_svc;
   RGWSI_Bucket_Sync *bucket_sync_svc;
@@ -403,5 +404,9 @@ public:
   const rgw_sync_policy_info& get_sync_policy() const {
     return sync_policy;
   }
+
+  bool is_legacy_config() const {
+    return legacy_config;
+  }
 };
 
index def86793e02d717e8e0e08f5cf33be5038be022d..8b63fa80ef4203d8328fca9a17fe4be9e8d35ff7 100644 (file)
@@ -48,6 +48,7 @@
 #include "rgw_crypt_sanitize.h"
 #include "rgw_rest_user_policy.h"
 #include "rgw_zone.h"
+#include "rgw_bucket_sync.h"
 
 #include "services/svc_zone.h"
 #include "services/svc_cls.h"
@@ -4321,6 +4322,12 @@ RGWOp *RGWHandler_REST_Bucket_S3::op_put()
   } else if (is_notification_op()) {
     return RGWHandler_REST_PSNotifs_S3::create_put_op();
   } else if (is_replication_op()) {
+    auto sync_policy_handler = store->svc()->zone->get_sync_policy_handler(nullopt);
+    if (!sync_policy_handler ||
+        sync_policy_handler->is_legacy_config()) {
+      return nullptr;
+    }
+
     return new RGWPutBucketReplication_ObjStore_S3;
   }
   return new RGWCreateBucket_ObjStore_S3;