]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: rgw::sal::RGWBucket initializes creation_time 40043/head
authorCasey Bodley <cbodley@redhat.com>
Thu, 11 Mar 2021 20:12:08 +0000 (15:12 -0500)
committerCasey Bodley <cbodley@redhat.com>
Thu, 11 Mar 2021 20:12:11 +0000 (15:12 -0500)
rgw::sal::RGWUser::list_buckets() uses the RGWBucketEnt constructor.
RGWBucketEnt::creation_time is initialized, but get_creation_time()
returns the uninitialized info.creation_time

Fixes: https://tracker.ceph.com/issues/49741
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_sal.h

index 646f2937fd3d2c4b96e27394a5c2eb45664bdd83..3db877a8999322f4447df645f4923a003406a8d3 100644 (file)
@@ -311,7 +311,7 @@ class RGWBucket {
   protected:
     RGWBucketEnt ent;
     RGWBucketInfo info;
-    RGWUser* owner;
+    RGWUser* owner = nullptr;
     RGWAttrs attrs;
     obj_version bucket_version;
     ceph::real_time mtime;
@@ -337,21 +337,32 @@ class RGWBucket {
       rgw_obj_key next_marker;
     };
 
-    RGWBucket() : ent(), info(), owner(nullptr), attrs(), bucket_version() {}
+    RGWBucket() = default;
     RGWBucket(RGWUser* _u) :
-      ent(), info(), owner(_u), attrs(), bucket_version() { }
-    RGWBucket(const rgw_bucket& _b) :
-      ent(), info(), owner(nullptr), attrs(), bucket_version() { ent.bucket = _b; info.bucket = _b; }
-    RGWBucket(const RGWBucketEnt& _e) :
-      ent(_e), info(), owner(nullptr), attrs(), bucket_version() { info.bucket = ent.bucket; info.placement_rule = ent.placement_rule; }
-    RGWBucket(const RGWBucketInfo& _i) :
-      ent(), info(_i), owner(nullptr), attrs(), bucket_version() {ent.bucket = info.bucket; ent.placement_rule = info.placement_rule; }
+      owner(_u) { }
+    RGWBucket(const rgw_bucket& _b) { ent.bucket = _b; info.bucket = _b; }
+    RGWBucket(const RGWBucketEnt& _e) : ent(_e) {
+      info.bucket = ent.bucket;
+      info.placement_rule = ent.placement_rule;
+      info.creation_time = ent.creation_time;
+    }
+    RGWBucket(const RGWBucketInfo& _i) : info(_i) {
+      ent.bucket = info.bucket;
+      ent.placement_rule = info.placement_rule;
+      ent.creation_time = info.creation_time;
+    }
     RGWBucket(const rgw_bucket& _b, RGWUser* _u) :
-      ent(), info(), owner(_u), attrs(), bucket_version() { ent.bucket = _b; info.bucket = _b; }
-    RGWBucket(const RGWBucketEnt& _e, RGWUser* _u) :
-      ent(_e), info(), owner(_u), attrs(), bucket_version() { info.bucket = ent.bucket; info.placement_rule = ent.placement_rule; }
-    RGWBucket(const RGWBucketInfo& _i, RGWUser* _u) :
-      ent(), info(_i), owner(_u), attrs(), bucket_version() { ent.bucket = info.bucket;  ent.placement_rule = info.placement_rule;}
+      owner(_u) { ent.bucket = _b; info.bucket = _b; }
+    RGWBucket(const RGWBucketEnt& _e, RGWUser* _u) : ent(_e), owner(_u) {
+      info.bucket = ent.bucket;
+      info.placement_rule = ent.placement_rule;
+      info.creation_time = ent.creation_time;
+    }
+    RGWBucket(const RGWBucketInfo& _i, RGWUser* _u) : info(_i), owner(_u) {
+      ent.bucket = info.bucket;
+      ent.placement_rule = info.placement_rule;
+      ent.creation_time = info.creation_time;
+    }
     virtual ~RGWBucket() = default;
 
     virtual std::unique_ptr<RGWObject> get_object(const rgw_obj_key& key) = 0;