]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/rados: pass obj_lock_enabled into RGWRados::create_bucket
authorCasey Bodley <cbodley@redhat.com>
Tue, 26 Jul 2022 21:25:32 +0000 (17:25 -0400)
committerCasey Bodley <cbodley@redhat.com>
Mon, 6 Nov 2023 16:07:23 +0000 (11:07 -0500)
there's a retry loop here that may end up overwriting RGWBucketInfo, so
pass obj_lock_enabled and use it to update info.flags on each iteration

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/driver/rados/rgw_rados.cc
src/rgw/driver/rados/rgw_rados.h
src/rgw/driver/rados/rgw_sal_rados.cc

index 2df4f77b673eb726e185c0a0d35f514a537abdb0..e2754eead727ae6178cc5750428696a7c9c0f972 100644 (file)
@@ -2276,6 +2276,7 @@ int RGWRados::create_bucket(const RGWUserInfo& owner, rgw_bucket& bucket,
                             const string& zonegroup_id,
                             const rgw_placement_rule& placement_rule,
                             const string& swift_ver_location,
+                            bool obj_lock_enabled,
                             const RGWQuotaInfo * pquota_info,
                            map<std::string, bufferlist>& attrs,
                             RGWBucketInfo& info,
@@ -2322,6 +2323,9 @@ int RGWRados::create_bucket(const RGWUserInfo& owner, rgw_bucket& bucket,
     info.placement_rule = selected_placement_rule;
     info.swift_ver_location = swift_ver_location;
     info.swift_versioning = (!swift_ver_location.empty());
+    if (obj_lock_enabled) {
+      info.flags |= BUCKET_VERSIONED | BUCKET_OBJ_LOCK_ENABLED;
+    }
 
     init_default_bucket_layout(cct, info.layout, svc.zone->get_zone(),
                               rule_info.index_type);
index d312e7355e227704fc30105d5134490c560995b7..1727bd84758fcfa98c24b805416329a10bb51434 100644 (file)
@@ -632,6 +632,7 @@ public:
                    const std::string& zonegroup_id,
                    const rgw_placement_rule& placement_rule,
                    const std::string& swift_ver_location,
+                   bool obj_lock_enabled,
                    const RGWQuotaInfo * pquota_info,
                    std::map<std::string,bufferlist>& attrs,
                    RGWBucketInfo& bucket_info,
index b7a7732388bf47fb5d66e50d701fe629b6a11d0d..bc6efa461968123f01d2bf1a77b00a4d88770159 100644 (file)
@@ -140,7 +140,7 @@ int RadosUser::create_bucket(const DoutPrefixProvider* dpp,
   int ret;
   bufferlist in_data;
   RGWBucketInfo master_info;
-  rgw_bucket* pmaster_bucket;
+  rgw_bucket* pmaster_bucket = nullptr;
   real_time creation_time;
   std::unique_ptr<Bucket> bucket;
   obj_version objv,* pobjv = NULL;
@@ -174,13 +174,7 @@ int RadosUser::create_bucket(const DoutPrefixProvider* dpp,
     pmaster_bucket= &master_info.bucket;
     creation_time = master_info.creation_time;
     pobjv = &objv;
-    if (master_info.obj_lock_enabled()) {
-      info.flags = BUCKET_VERSIONED | BUCKET_OBJ_LOCK_ENABLED;
-    }
-  } else {
-    pmaster_bucket = NULL;
-    if (obj_lock_enabled)
-      info.flags = BUCKET_VERSIONED | BUCKET_OBJ_LOCK_ENABLED;
+    obj_lock_enabled = master_info.obj_lock_enabled();
   }
 
   std::string zid = zonegroup_id;
@@ -201,7 +195,8 @@ int RadosUser::create_bucket(const DoutPrefixProvider* dpp,
   } else {
 
     ret = store->getRados()->create_bucket(this->get_info(), bucket->get_key(),
-                                   zid, placement_rule, swift_ver_location, pquota_info,
+                                   zid, placement_rule, swift_ver_location,
+                                   obj_lock_enabled, pquota_info,
                                    attrs, info, pobjv, &ep_objv, creation_time,
                                    pmaster_bucket, y, dpp, exclusive);
     if (ret == -EEXIST) {