]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/sal: pass in ACLOwner for object writes
authorCasey Bodley <cbodley@redhat.com>
Thu, 7 Dec 2023 03:38:27 +0000 (22:38 -0500)
committerCasey Bodley <cbodley@redhat.com>
Fri, 12 Apr 2024 19:34:26 +0000 (15:34 -0400)
`ACLOwner` contains both the user id and display name. the bucket index
needs both values for:
```
struct rgw_bucket_dir_entry_meta {
  ...
  std::string owner;
  std::string owner_display_name;
```
`RGWRados::Bucket::UpdateIndex::complete()` relied on the parsing of
`RGW_ATTR_ACL` to get those values. but object write operations already
had that information earlier in the call stack, so we might as well pass
them in directly

for other operations like the copy/rewrite/transition of existing objects,
we decode the owner from the source object's `RGW_ATTR_ACL`

the existing `owner` param was confusing, as it represented the bucket
owner for quota stats updates. this get renamed to `bucket_owner` inside
of `RGWRados`, and hidden from the outside. bucket stats are attributed to
`RGWBucketInfo::owner`, not the `ACLOwner`, so we use that instead of
`s->bucket_owner`

Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 1d29b7056983825e7095c518edc7b3d4dcdf0b05)

Conflicts:
src/test/rgw/test_d4n_filter.cc removed on main

23 files changed:
src/rgw/driver/d4n/rgw_sal_d4n.cc
src/rgw/driver/d4n/rgw_sal_d4n.h
src/rgw/driver/daos/rgw_sal_daos.cc
src/rgw/driver/daos/rgw_sal_daos.h
src/rgw/driver/motr/rgw_sal_motr.cc
src/rgw/driver/motr/rgw_sal_motr.h
src/rgw/driver/posix/rgw_sal_posix.cc
src/rgw/driver/posix/rgw_sal_posix.h
src/rgw/driver/rados/rgw_putobj_processor.cc
src/rgw/driver/rados/rgw_putobj_processor.h
src/rgw/driver/rados/rgw_rados.cc
src/rgw/driver/rados/rgw_rados.h
src/rgw/driver/rados/rgw_sal_rados.cc
src/rgw/driver/rados/rgw_sal_rados.h
src/rgw/rgw_data_access.cc
src/rgw/rgw_file.cc
src/rgw/rgw_op.cc
src/rgw/rgw_sal.h
src/rgw/rgw_sal_dbstore.cc
src/rgw/rgw_sal_dbstore.h
src/rgw/rgw_sal_filter.cc
src/rgw/rgw_sal_filter.h
src/test/rgw/test_d4n_filter.cc

index e2624690ebdd6d3977a73b151ac979f3884112c1..71a18c62c5b744fa36ffb2797ecbe5942be49a65 100644 (file)
@@ -66,7 +66,7 @@ int D4NFilterBucket::create(const DoutPrefixProvider* dpp,
   return next->create(dpp, params, y);
 }
 
-int D4NFilterObject::copy_object(User* user,
+int D4NFilterObject::copy_object(const ACLOwner& owner,
                               req_info* info,
                               const rgw_zone_id& source_zone,
                               rgw::sal::Object* dest_object,
@@ -138,7 +138,7 @@ int D4NFilterObject::copy_object(User* user,
     ldpp_dout(dpp, 20) << "D4N Filter: Cache copy object operation succeeded." << dendl;
   }
 
-  return next->copy_object(user, info, source_zone,
+  return next->copy_object(owner, info, source_zone,
                            nextObject(dest_object),
                            nextBucket(dest_bucket),
                            nextBucket(src_bucket),
@@ -280,7 +280,7 @@ std::unique_ptr<Object> D4NFilterDriver::get_object(const rgw_obj_key& k)
 std::unique_ptr<Writer> D4NFilterDriver::get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag)
index 840eb99f6048f3dee56cdbd016e6fbab941d53b4..7caf7e067d2c1ad53902a0c25d828cf40a56a570 100644 (file)
@@ -53,7 +53,7 @@ class D4NFilterDriver : public FilterDriver {
     virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag) override;
@@ -122,7 +122,7 @@ class D4NFilterObject : public FilterObject {
                                                                    filter(_filter) {}
     virtual ~D4NFilterObject() = default;
 
-    virtual int copy_object(User* user,
+    virtual int copy_object(const ACLOwner& owner,
                req_info* info, const rgw_zone_id& source_zone,
                rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
                rgw::sal::Bucket* src_bucket,
index a6136d9059988b88d99a35f09ef717bf83a7e5b0..98e708d645eb7e4b54a1d3d3c129ac5400e74232 100644 (file)
@@ -1207,7 +1207,7 @@ int DaosObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y,
 }
 
 int DaosObject::copy_object(
-    User* user, req_info* info, const rgw_zone_id& source_zone,
+    const ACLOwner& owner, req_info* info, const rgw_zone_id& source_zone,
     rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
     rgw::sal::Bucket* src_bucket, const rgw_placement_rule& dest_placement,
     ceph::real_time* src_mtime, ceph::real_time* mtime,
@@ -1221,12 +1221,12 @@ int DaosObject::copy_object(
   return DAOS_NOT_IMPLEMENTED_LOG(dpp);
 }
 
-int DaosObject::swift_versioning_restore(bool& restored,
+int DaosObject::swift_versioning_restore(const ACLOwner& owner, bool& restored,
                                          const DoutPrefixProvider* dpp) {
   return DAOS_NOT_IMPLEMENTED_LOG(dpp);
 }
 
-int DaosObject::swift_versioning_copy(const DoutPrefixProvider* dpp,
+int DaosObject::swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                       optional_yield y) {
   return DAOS_NOT_IMPLEMENTED_LOG(dpp);
 }
@@ -1976,7 +1976,7 @@ int DaosMultipartUpload::get_info(const DoutPrefixProvider* dpp,
 
 std::unique_ptr<Writer> DaosMultipartUpload::get_writer(
     const DoutPrefixProvider* dpp, optional_yield y,
-    rgw::sal::Object* obj, const rgw_user& owner,
+    rgw::sal::Object* obj, const ACLOwner& owner,
     const rgw_placement_rule* ptail_placement_rule, uint64_t part_num,
     const std::string& part_num_str) {
   ldpp_dout(dpp, 20) << "DaosMultipartUpload::get_writer(): enter part="
@@ -2120,7 +2120,7 @@ std::unique_ptr<MultipartUpload> DaosBucket::get_multipart_upload(
 
 std::unique_ptr<Writer> DaosStore::get_append_writer(
     const DoutPrefixProvider* dpp, optional_yield y,
-    rgw::sal::Object* obj, const rgw_user& owner,
+    rgw::sal::Object* obj, const ACLOwner& owner,
     const rgw_placement_rule* ptail_placement_rule,
     const std::string& unique_tag, uint64_t position,
     uint64_t* cur_accounted_size) {
@@ -2130,7 +2130,7 @@ std::unique_ptr<Writer> DaosStore::get_append_writer(
 
 std::unique_ptr<Writer> DaosStore::get_atomic_writer(
     const DoutPrefixProvider* dpp, optional_yield y,
-    rgw::sal::Object* obj, const rgw_user& owner,
+    rgw::sal::Object* obj, const ACLOwner& owner,
     const rgw_placement_rule* ptail_placement_rule, uint64_t olh_epoch,
     const std::string& unique_tag) {
   ldpp_dout(dpp, 20) << "get_atomic_writer" << dendl;
index 2d74f9c17cc718d5c022fa8d7cc240d729538564..a01c2c2d0c327f3a2e2fc3f9aa4d36caeba9a262 100644 (file)
@@ -602,7 +602,7 @@ class DaosObject : public StoreObject {
   virtual int delete_object(const DoutPrefixProvider* dpp, optional_yield y,
                             uint32_t flags) override;
   virtual int copy_object(
-      User* user, req_info* info, const rgw_zone_id& source_zone,
+      const ACLOwner& owner, req_info* info, const rgw_zone_id& source_zone,
       rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
       rgw::sal::Bucket* src_bucket, const rgw_placement_rule& dest_placement,
       ceph::real_time* src_mtime, ceph::real_time* mtime,
@@ -657,9 +657,9 @@ class DaosObject : public StoreObject {
                               Formatter* f) override;
 
   /* Swift versioning */
-  virtual int swift_versioning_restore(bool& restored,
+  virtual int swift_versioning_restore(const ACLOwner& owner, bool& restored,
                                        const DoutPrefixProvider* dpp) override;
-  virtual int swift_versioning_copy(const DoutPrefixProvider* dpp,
+  virtual int swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                     optional_yield y) override;
 
   /* OPs */
@@ -720,7 +720,7 @@ class MPDaosSerializer : public StoreMPSerializer {
 class DaosAtomicWriter : public StoreWriter {
  protected:
   rgw::sal::DaosStore* store;
-  const rgw_user& owner;
+  const ACLOwner& owner;
   const rgw_placement_rule* ptail_placement_rule;
   uint64_t olh_epoch;
   const std::string& unique_tag;
@@ -770,7 +770,7 @@ class DaosMultipartWriter : public StoreWriter {
   DaosMultipartWriter(const DoutPrefixProvider* dpp, optional_yield y,
                       MultipartUpload* _upload,
                       rgw::sal::Object* obj,
-                      DaosStore* _store, const rgw_user& owner,
+                      DaosStore* _store, const ACLOwner& owner,
                       const rgw_placement_rule* ptail_placement_rule,
                       uint64_t _part_num, const std::string& part_num_str)
       : StoreWriter(dpp, y),
@@ -864,7 +864,7 @@ class DaosMultipartUpload : public StoreMultipartUpload {
                        rgw::sal::Attrs* attrs = nullptr) override;
   virtual std::unique_ptr<Writer> get_writer(
       const DoutPrefixProvider* dpp, optional_yield y,
-      rgw::sal::Object* obj, const rgw_user& owner,
+      rgw::sal::Object* obj, const ACLOwner& owner,
       const rgw_placement_rule* ptail_placement_rule, uint64_t part_num,
       const std::string& part_num_str) override;
   const std::string& get_bucket_name() { return bucket->get_name(); }
@@ -1006,13 +1006,13 @@ class DaosStore : public StoreDriver {
       std::vector<std::unique_ptr<RGWOIDCProvider>>& providers) override;
   virtual std::unique_ptr<Writer> get_append_writer(
       const DoutPrefixProvider* dpp, optional_yield y,
-      rgw::sal::Object* obj, const rgw_user& owner,
+      rgw::sal::Object* obj, const ACLOwner& owner,
       const rgw_placement_rule* ptail_placement_rule,
       const std::string& unique_tag, uint64_t position,
       uint64_t* cur_accounted_size) override;
   virtual std::unique_ptr<Writer> get_atomic_writer(
       const DoutPrefixProvider* dpp, optional_yield y,
-      rgw::sal::Object* obj, const rgw_user& owner,
+      rgw::sal::Object* obj, const ACLOwner& owner,
       const rgw_placement_rule* ptail_placement_rule, uint64_t olh_epoch,
       const std::string& unique_tag) override;
   virtual const std::string& get_compression_type(
index 3ee60c9c4d5dbecff03b4466fda634b15a74b495..92c07ff95e48a80c221c7c9016e1895425c152db 100644 (file)
@@ -1510,7 +1510,7 @@ int MotrObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, u
   return del_op.delete_obj(dpp, y, flags);
 }
 
-int MotrObject::copy_object(User* user,
+int MotrObject::copy_object(const ACLOwner& owner,
     req_info* info,
     const rgw_zone_id& source_zone,
     rgw::sal::Object* dest_object,
@@ -1541,13 +1541,13 @@ int MotrObject::copy_object(User* user,
       return 0;
 }
 
-int MotrObject::swift_versioning_restore(bool& restored,
+int MotrObject::swift_versioning_restore(const ACLOwner& owner, bool& restored,
     const DoutPrefixProvider* dpp)
 {
   return 0;
 }
 
-int MotrObject::swift_versioning_copy(const DoutPrefixProvider* dpp,
+int MotrObject::swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
     optional_yield y)
 {
   return 0;
@@ -1557,7 +1557,7 @@ MotrAtomicWriter::MotrAtomicWriter(const DoutPrefixProvider *dpp,
           optional_yield y,
           rgw::sal::Object* obj,
           MotrStore* _store,
-          const rgw_user& _owner,
+          const ACLOwner& _owner,
           const rgw_placement_rule *_ptail_placement_rule,
           uint64_t _olh_epoch,
           const std::string& _unique_tag) :
@@ -2935,7 +2935,7 @@ std::unique_ptr<Writer> MotrMultipartUpload::get_writer(
                                  const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t part_num,
                                  const std::string& part_num_str)
@@ -3080,7 +3080,7 @@ std::unique_ptr<MultipartUpload> MotrBucket::get_multipart_upload(const std::str
 std::unique_ptr<Writer> MotrStore::get_append_writer(const DoutPrefixProvider *dpp,
         optional_yield y,
         rgw::sal::Object* obj,
-        const rgw_user& owner,
+        const ACLOwner& owner,
         const rgw_placement_rule *ptail_placement_rule,
         const std::string& unique_tag,
         uint64_t position,
@@ -3091,7 +3091,7 @@ std::unique_ptr<Writer> MotrStore::get_append_writer(const DoutPrefixProvider *d
 std::unique_ptr<Writer> MotrStore::get_atomic_writer(const DoutPrefixProvider *dpp,
         optional_yield y,
         rgw::sal::Object* obj,
-        const rgw_user& owner,
+        const ACLOwner& owner,
         const rgw_placement_rule *ptail_placement_rule,
         uint64_t olh_epoch,
         const std::string& unique_tag) {
index 63c2b9d9dc801def45f42d7e12374e46fa6a82c6..9f7cbd9059dc26f94e5a54f25b8e6bfc62be8de7 100644 (file)
@@ -679,7 +679,7 @@ class MotrObject : public StoreObject {
     virtual int delete_object(const DoutPrefixProvider* dpp,
         optional_yield y,
         uint32_t flags) override;
-    virtual int copy_object(User* user,
+    virtual int copy_object(const ACLOwner& owner,
         req_info* info, const rgw_zone_id& source_zone,
         rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
         rgw::sal::Bucket* src_bucket,
@@ -718,9 +718,9 @@ class MotrObject : public StoreObject {
     virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override;
 
     /* Swift versioning */
-    virtual int swift_versioning_restore(bool& restored,
+    virtual int swift_versioning_restore(const ACLOwner& owner, bool& restored,
         const DoutPrefixProvider* dpp) override;
-    virtual int swift_versioning_copy(const DoutPrefixProvider* dpp,
+    virtual int swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
         optional_yield y) override;
 
     /* OPs */
@@ -774,7 +774,7 @@ class MPMotrSerializer : public StoreMPSerializer {
 class MotrAtomicWriter : public StoreWriter {
   protected:
   rgw::sal::MotrStore* store;
-  const rgw_user& owner;
+  const ACLOwner& owner;
   const rgw_placement_rule *ptail_placement_rule;
   uint64_t olh_epoch;
   const std::string& unique_tag;
@@ -793,7 +793,7 @@ class MotrAtomicWriter : public StoreWriter {
           optional_yield y,
           rgw::sal::Object* obj,
           MotrStore* _store,
-          const rgw_user& _owner,
+          const ACLOwner& _owner,
           const rgw_placement_rule *_ptail_placement_rule,
           uint64_t _olh_epoch,
           const std::string& _unique_tag);
@@ -840,7 +840,7 @@ public:
                       optional_yield y, MultipartUpload* upload,
                       rgw::sal::Object* obj,
                       MotrStore* _store,
-                      const rgw_user& owner,
+                      const ACLOwner& owner,
                       const rgw_placement_rule *ptail_placement_rule,
                       uint64_t _part_num, const std::string& part_num_str) :
                                  StoreWriter(dpp, y), store(_store), head_obj(obj),
@@ -953,7 +953,7 @@ public:
   virtual std::unique_ptr<Writer> get_writer(const DoutPrefixProvider *dpp,
                          optional_yield y,
                          rgw::sal::Object* obj,
-                         const rgw_user& owner,
+                         const ACLOwner& owner,
                          const rgw_placement_rule *ptail_placement_rule,
                          uint64_t part_num,
                          const std::string& part_num_str) override;
@@ -1073,7 +1073,7 @@ class MotrStore : public StoreDriver {
     virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
         optional_yield y,
         rgw::sal::Object* obj,
-        const rgw_user& owner,
+        const ACLOwner& owner,
         const rgw_placement_rule *ptail_placement_rule,
         const std::string& unique_tag,
         uint64_t position,
@@ -1081,7 +1081,7 @@ class MotrStore : public StoreDriver {
     virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
         optional_yield y,
         rgw::sal::Object* obj,
-        const rgw_user& owner,
+        const ACLOwner& owner,
         const rgw_placement_rule *ptail_placement_rule,
         uint64_t olh_epoch,
         const std::string& unique_tag) override;
index a8b3fe2f3e34287f37f18acca2d7183dab3a3be4..c4e753bb3a1699ddd3b984928154ed51ad72c801 100644 (file)
@@ -373,7 +373,7 @@ std::string POSIXDriver::zone_unique_trans_id(const uint64_t unique_num)
 std::unique_ptr<Writer> POSIXDriver::get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* _head_obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -390,7 +390,7 @@ std::unique_ptr<Writer> POSIXDriver::get_append_writer(const DoutPrefixProvider
 std::unique_ptr<Writer> POSIXDriver::get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* _head_obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag)
@@ -1487,7 +1487,7 @@ int POSIXObject::delete_object(const DoutPrefixProvider* dpp,
   return 0;
 }
 
-int POSIXObject::copy_object(User* user,
+int POSIXObject::copy_object(const ACLOwner& owner,
                               req_info* info,
                               const rgw_zone_id& source_zone,
                               rgw::sal::Object* dest_object,
@@ -1690,13 +1690,13 @@ int POSIXObject::dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y
     return 0;
 }
 
-int POSIXObject::swift_versioning_restore(bool& restored,
+int POSIXObject::swift_versioning_restore(const ACLOwner& owner, bool& restored,
                                       const DoutPrefixProvider* dpp, optional_yield y)
 {
   return 0;
 }
 
-int POSIXObject::swift_versioning_copy(const DoutPrefixProvider* dpp,
+int POSIXObject::swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                    optional_yield y)
 {
   return 0;
@@ -2783,7 +2783,7 @@ std::unique_ptr<Writer> POSIXMultipartUpload::get_writer(
                                  const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* _head_obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t part_num,
                                  const std::string& part_num_str)
index ed7630a7d65a2b013dbb30e4f768d04fde2bdd1a..e00f6e74c92c738e5934f2b4afe50a4dbf164309 100644 (file)
@@ -60,7 +60,7 @@ public:
   virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* _head_obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -68,7 +68,7 @@ public:
   virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* _head_obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag) override;
@@ -320,7 +320,7 @@ public:
   virtual int delete_object(const DoutPrefixProvider* dpp,
                            optional_yield y,
                            uint32_t flags) override;
-  virtual int copy_object(User* user,
+  virtual int copy_object(const ACLOwner& owner,
                req_info* info, const rgw_zone_id& source_zone,
                rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
                rgw::sal::Bucket* src_bucket,
@@ -367,9 +367,9 @@ public:
                         optional_yield y) override;
   virtual bool placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2) override;
   virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override;
-  virtual int swift_versioning_restore(bool& restored,
+  virtual int swift_versioning_restore(const ACLOwner& owner, bool& restored,
                                       const DoutPrefixProvider* dpp, optional_yield y) override;
-  virtual int swift_versioning_copy(const DoutPrefixProvider* dpp,
+  virtual int swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                    optional_yield y) override;
   virtual std::unique_ptr<ReadOp> get_read_op() override;
   virtual std::unique_ptr<DeleteOp> get_delete_op() override;
@@ -561,7 +561,7 @@ public:
   virtual std::unique_ptr<Writer> get_writer(const DoutPrefixProvider *dpp,
                          optional_yield y,
                          rgw::sal::Object* _head_obj,
-                         const rgw_user& owner,
+                         const ACLOwner& owner,
                          const rgw_placement_rule *ptail_placement_rule,
                          uint64_t part_num,
                          const std::string& part_num_str) override;
@@ -574,7 +574,7 @@ private:
 class POSIXAtomicWriter : public StoreWriter {
 private:
   POSIXDriver* driver;
-  const rgw_user& owner;
+  const ACLOwner& owner;
   const rgw_placement_rule *ptail_placement_rule;
   uint64_t olh_epoch;
   const std::string& unique_tag;
@@ -585,7 +585,7 @@ public:
                     optional_yield y,
                    rgw::sal::Object* _head_obj,
                     POSIXDriver* _driver,
-                    const rgw_user& _owner,
+                    const ACLOwner& _owner,
                     const rgw_placement_rule *_ptail_placement_rule,
                     uint64_t _olh_epoch,
                     const std::string& _unique_tag) :
@@ -614,7 +614,7 @@ public:
 class POSIXMultipartWriter : public StoreWriter {
 private:
   POSIXDriver* driver;
-  const rgw_user& owner;
+  const ACLOwner& owner;
   const rgw_placement_rule *ptail_placement_rule;
   uint64_t part_num;
   std::unique_ptr<Bucket> shadow_bucket;
@@ -626,7 +626,7 @@ public:
                    std::unique_ptr<Bucket> _shadow_bucket,
                     rgw_obj_key& _key,
                     POSIXDriver* _driver,
-                    const rgw_user& _owner,
+                    const ACLOwner& _owner,
                     const rgw_placement_rule *_ptail_placement_rule,
                     uint64_t _part_num) :
     StoreWriter(dpp, y),
index d1a4a53688bdf4e784cd63c816d6f794a550b9ca..d41678cdb06b816a94931974819a357c73eb13c4 100644 (file)
@@ -378,6 +378,7 @@ int AtomicObjectProcessor::complete(size_t accounted_size,
   obj_op.meta.mtime = mtime;
   obj_op.meta.set_mtime = set_mtime;
   obj_op.meta.owner = owner;
+  obj_op.meta.bucket_owner = bucket_info.owner;
   obj_op.meta.flags = PUT_OBJ_CREATE;
   obj_op.meta.olh_epoch = olh_epoch;
   obj_op.meta.delete_at = delete_at;
@@ -517,6 +518,7 @@ int MultipartObjectProcessor::complete(size_t accounted_size,
   obj_op.meta.set_mtime = set_mtime;
   obj_op.meta.mtime = mtime;
   obj_op.meta.owner = owner;
+  obj_op.meta.bucket_owner = bucket_info.owner;
   obj_op.meta.delete_at = delete_at;
   obj_op.meta.zones_trace = zones_trace;
   obj_op.meta.modify_tail = true;
@@ -728,6 +730,7 @@ int AppendObjectProcessor::complete(size_t accounted_size, const string &etag, c
   obj_op.meta.mtime = mtime;
   obj_op.meta.set_mtime = set_mtime;
   obj_op.meta.owner = owner;
+  obj_op.meta.bucket_owner = bucket_info.owner;
   obj_op.meta.flags = PUT_OBJ_CREATE;
   obj_op.meta.delete_at = delete_at;
   obj_op.meta.user_data = user_data;
index 35fc8c55105c4c970b5ef5c68aa40f4e70bd4769..655428f83e9bd959b8373a2cafb3bf77bd27ec61 100644 (file)
@@ -117,7 +117,7 @@ class ManifestObjectProcessor : public HeadObjectProcessor,
   RGWRados* const store;
   RGWBucketInfo& bucket_info;
   rgw_placement_rule tail_placement_rule;
-  rgw_user owner;
+  ACLOwner owner;
   RGWObjectCtx& obj_ctx;
   rgw_obj head_obj;
 
@@ -135,7 +135,7 @@ class ManifestObjectProcessor : public HeadObjectProcessor,
   ManifestObjectProcessor(Aio *aio, RGWRados* store,
                           RGWBucketInfo& bucket_info,
                           const rgw_placement_rule *ptail_placement_rule,
-                          const rgw_user& owner, RGWObjectCtx& _obj_ctx,
+                          const ACLOwner& owner, RGWObjectCtx& _obj_ctx,
                           const rgw_obj& _head_obj,
                           const DoutPrefixProvider* dpp,
                           optional_yield y,
@@ -151,7 +151,7 @@ class ManifestObjectProcessor : public HeadObjectProcessor,
         }
       }
 
-  void set_owner(const rgw_user& _owner) {
+  void set_owner(const ACLOwner& _owner) {
     owner = _owner;
   }
 
@@ -177,7 +177,7 @@ class AtomicObjectProcessor : public ManifestObjectProcessor {
   AtomicObjectProcessor(Aio *aio, RGWRados* store,
                         RGWBucketInfo& bucket_info,
                         const rgw_placement_rule *ptail_placement_rule,
-                        const rgw_user& owner,
+                        const ACLOwner& owner,
                         RGWObjectCtx& obj_ctx, const rgw_obj& _head_obj,
                         std::optional<uint64_t> olh_epoch,
                         const std::string& unique_tag,
@@ -222,7 +222,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor {
   MultipartObjectProcessor(Aio *aio, RGWRados* store,
                            RGWBucketInfo& bucket_info,
                            const rgw_placement_rule *ptail_placement_rule,
-                           const rgw_user& owner, RGWObjectCtx& obj_ctx,
+                           const ACLOwner& owner, RGWObjectCtx& obj_ctx,
                            const rgw_obj& _head_obj,
                            const std::string& upload_id, uint64_t part_num,
                            const std::string& part_num_str,
@@ -266,7 +266,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor {
     AppendObjectProcessor(Aio *aio, RGWRados* store,
                           RGWBucketInfo& bucket_info,
                           const rgw_placement_rule *ptail_placement_rule,
-                          const rgw_user& owner, RGWObjectCtx& obj_ctx,
+                          const ACLOwner& owner, RGWObjectCtx& obj_ctx,
                           const rgw_obj& _head_obj,
                           const std::string& unique_tag, uint64_t position,
                           uint64_t *cur_accounted_size,
index c9da60eff9edab73d4536dc27f25e3f58a15f702..0d20f50a7d9e208d26ab32c331cefc82133ed989 100644 (file)
@@ -2853,7 +2853,7 @@ bool RGWRados::swift_versioning_enabled(const RGWBucketInfo& bucket_info) const
 }
 
 int RGWRados::swift_versioning_copy(RGWObjectCtx& obj_ctx,
-                                    const rgw_user& user,
+                                    const ACLOwner& owner,
                                     RGWBucketInfo& bucket_info,
                                     const rgw_obj& obj,
                                     const DoutPrefixProvider *dpp,
@@ -2910,7 +2910,7 @@ int RGWRados::swift_versioning_copy(RGWObjectCtx& obj_ctx,
   jspan_context no_trace{false, false};
 
   r = copy_obj(obj_ctx,
-               user,
+               owner,
                NULL, /* req_info *info */
                no_zone,
                dest_obj,
@@ -2949,7 +2949,7 @@ int RGWRados::swift_versioning_copy(RGWObjectCtx& obj_ctx,
 }
 
 int RGWRados::swift_versioning_restore(RGWObjectCtx& obj_ctx,
-                                       const rgw_user& user,
+                                       const ACLOwner& owner,
                                        RGWBucketInfo& bucket_info,
                                        rgw_obj& obj,
                                        bool& restored,
@@ -3007,7 +3007,7 @@ int RGWRados::swift_versioning_restore(RGWObjectCtx& obj_ctx,
     jspan_context no_trace{false, false};
 
     int ret = copy_obj(obj_ctx,
-                       user,
+                       owner,
                        nullptr,       /* req_info *info */
                        no_zone,
                        obj,           /* dest obj */
@@ -3147,7 +3147,6 @@ int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_si
 
   string etag;
   string content_type;
-  bufferlist acl_bl;
   string storage_class;
 
   map<string, bufferlist>::iterator iter;
@@ -3184,8 +3183,6 @@ int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_si
       etag = rgw_bl_str(bl);
     } else if (name.compare(RGW_ATTR_CONTENT_TYPE) == 0) {
       content_type = rgw_bl_str(bl);
-    } else if (name.compare(RGW_ATTR_ACL) == 0) {
-      acl_bl = bl;
     }
   }
   if (attrs.find(RGW_ATTR_PG_VER) == attrs.end()) {
@@ -3263,7 +3260,7 @@ int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_si
   tracepoint(rgw_rados, complete_enter, req_id.c_str());
   r = index_op->complete(rctx.dpp, poolid, epoch, size, accounted_size,
                         meta.set_mtime, etag, content_type,
-                        storage_class, &acl_bl,
+                        storage_class, meta.owner,
                         meta.category, meta.remove_objs, rctx.y,
                         meta.user_data, meta.appendable, log_op);
   tracepoint(rgw_rados, complete_exit, req_id.c_str());
@@ -3301,11 +3298,11 @@ int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_si
 
   /* update quota cache */
   if (meta.completeMultipart){
-       store->quota_handler->update_stats(meta.owner, obj.bucket, (orig_exists ? 0 : 1),
+    store->quota_handler->update_stats(meta.bucket_owner, obj.bucket, (orig_exists ? 0 : 1),
                                      0, orig_size);
   }
   else {
-    store->quota_handler->update_stats(meta.owner, obj.bucket, (orig_exists ? 0 : 1),
+    store->quota_handler->update_stats(meta.bucket_owner, obj.bucket, (orig_exists ? 0 : 1),
                                      accounted_size, orig_size);
   }
   return 0;
@@ -3659,7 +3656,13 @@ int RGWRados::rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj, c
   attrset.erase(RGW_ATTR_TAIL_TAG);
   attrset.erase(RGW_ATTR_STORAGE_CLASS);
 
-  return copy_obj_data(octx, dest_bucket_info, dest_bucket_info.placement_rule,
+  ACLOwner owner;
+  if (auto i = attrset.find(RGW_ATTR_ACL); i != attrset.end()) {
+    (void) decode_policy(dpp, i->second, &owner);
+  }
+
+  return copy_obj_data(octx, owner, dest_bucket_info,
+                       dest_bucket_info.placement_rule,
                        read_op, obj_size - 1, obj, NULL, mtime,
                        attrset, 0, real_time(), NULL, dpp, y);
 }
@@ -3810,6 +3813,7 @@ int RGWRados::reindex_obj(rgw::sal::Driver* driver,
   std::string etag;
   std::string content_type;
   std::string storage_class;
+  bool found_acl = false;
   bufferlist acl_bl;
   bool found_olh_info { false };
   bufferlist olh_info_bl;
@@ -3820,7 +3824,7 @@ int RGWRados::reindex_obj(rgw::sal::Driver* driver,
   read_attr(attr_set, RGW_ATTR_ETAG, etag);
   read_attr(attr_set, RGW_ATTR_CONTENT_TYPE, content_type);
   read_attr(attr_set, RGW_ATTR_STORAGE_CLASS, storage_class);
-  read_attr(attr_set, RGW_ATTR_ACL, acl_bl);
+  read_attr(attr_set, RGW_ATTR_ACL, acl_bl, &found_acl);
   read_attr(attr_set, RGW_ATTR_OLH_INFO, olh_info_bl, &found_olh_info);
   read_attr(attr_set, RGW_ATTR_APPEND_PART_NUM, part_num_bl, &appendable);
 
@@ -3845,6 +3849,11 @@ int RGWRados::reindex_obj(rgw::sal::Driver* driver,
     }
   }
 
+  ACLOwner owner;
+  if (found_acl) {
+    (void) decode_policy(dpp, acl_bl, &owner);
+  }
+
   Bucket bkt(this, bucket_info);
   RGWRados::Bucket::UpdateIndex update_idx(&bkt, head_obj);
 
@@ -3859,7 +3868,7 @@ int RGWRados::reindex_obj(rgw::sal::Driver* driver,
                            etag,
                            content_type,
                            storage_class,
-                           &acl_bl,
+                           owner,
                            RGWObjCategory::Main, // RGWObjCategory category,
                            nullptr, // remove_objs list
                            y,
@@ -4181,11 +4190,15 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx,
   set_mtime_weight.high_precision = high_precision_time;
   int ret;
 
+  // use an empty owner until we decode RGW_ATTR_ACL
+  ACLOwner owner;
+  RGWAccessControlPolicy policy;
+
   rgw::BlockingAioThrottle aio(cct->_conf->rgw_put_obj_min_window_size);
   using namespace rgw::putobj;
   jspan_context no_trace{false, false};
   AtomicObjectProcessor processor(&aio, this, dest_bucket_info, nullptr,
-                                  user_id, obj_ctx, dest_obj, olh_epoch,
+                                  owner, obj_ctx, dest_obj, olh_epoch,
                                  tag, rctx.dpp, rctx.y, no_trace);
   RGWRESTConn *conn;
   auto& zone_conn_map = svc.zone->get_zone_conn_map();
@@ -4345,44 +4358,33 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx,
     }
   }
 
-  if (override_owner) {
-    processor.set_owner(*override_owner);
-
-    auto& obj_attrs = cb.get_attrs();
+  // decode the ACLOwner from RGW_ATTR_ACL for the bucket index
+  if (auto i = cb.get_attrs().find(RGW_ATTR_ACL); i != cb.get_attrs().end()) {
+    ret = decode_policy(rctx.dpp, i->second, &owner);
+    if (ret < 0) {
+      return ret;
+    }
+  }
 
+  if (override_owner) {
     RGWUserInfo owner_info;
     if (ctl.user->get_info_by_uid(rctx.dpp, *override_owner, &owner_info, rctx.y) < 0) {
       ldpp_dout(rctx.dpp, 10) << "owner info does not exist" << dendl;
       return -EINVAL;
     }
 
-    RGWAccessControlPolicy acl;
+    owner.id = *override_owner;
+    owner.display_name = owner_info.display_name;
 
-    auto aiter = obj_attrs.find(RGW_ATTR_ACL);
-    if (aiter == obj_attrs.end()) {
-      ldpp_dout(rctx.dpp, 0) << "WARNING: " << __func__ << "(): object doesn't have ACL attribute, setting default ACLs" << dendl;
-      acl.create_default(owner_info.user_id, owner_info.display_name);
-    } else {
-      auto iter = aiter->second.cbegin();
-      try {
-       acl.decode(iter);
-      } catch (buffer::error& err) {
-       ldpp_dout(rctx.dpp, 0) << "ERROR: " << __func__ << "(): could not decode policy, caught buffer::error" << dendl;
-       return -EIO;
-      }
-    }
-
-    ACLOwner new_owner;
-    new_owner.id = *override_owner;
-    new_owner.display_name = owner_info.display_name;
-
-    acl.set_owner(new_owner);
+    policy.create_default(owner_info.user_id, owner_info.display_name);
 
     bufferlist bl;
-    acl.encode(bl);
-    obj_attrs[RGW_ATTR_ACL] = std::move(bl);
+    policy.encode(bl);
+    cb.get_attrs()[RGW_ATTR_ACL] = std::move(bl);
   }
 
+  processor.set_owner(owner);
+
   if (source_zone.empty()) { /* need to preserve expiration if copy in the same zonegroup */
     cb.get_attrs().erase(RGW_ATTR_DELETE_AT);
   } else {
@@ -4599,7 +4601,7 @@ int RGWRados::copy_obj_to_remote_dest(const DoutPrefixProvider *dpp,
  * Returns: 0 on success, -ERR# otherwise.
  */
 int RGWRados::copy_obj(RGWObjectCtx& obj_ctx,
-               const rgw_user& user_id,
+               const ACLOwner& owner,
                req_info *info,
                const rgw_zone_id& source_zone,
                const rgw_obj& dest_obj,
@@ -4658,7 +4660,7 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx,
   if (remote_src || !source_zone.empty()) {
     rgw_zone_set_entry source_trace_entry{source_zone.id, std::nullopt};
     const req_context rctx{dpp, y, nullptr};
-    return fetch_remote_obj(obj_ctx, user_id, info, source_zone,
+    return fetch_remote_obj(obj_ctx, owner.id, info, source_zone,
                dest_obj, src_obj, dest_bucket_info, &src_bucket_info,
                dest_placement, src_mtime, mtime, mod_ptr,
                unmod_ptr, high_precision_time,
@@ -4735,7 +4737,7 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx,
 
   if (remote_dest) {
     /* dest is in a different zonegroup, copy it there */
-    return copy_obj_to_remote_dest(dpp, astate, attrs, read_op, user_id, dest_obj, mtime, y);
+    return copy_obj_to_remote_dest(dpp, astate, attrs, read_op, owner.id, dest_obj, mtime, y);
   }
   uint64_t max_chunk_size;
 
@@ -4802,7 +4804,7 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx,
 
   if (copy_data) { /* refcounting tail wouldn't work here, just copy the data */
     attrs.erase(RGW_ATTR_TAIL_TAG);
-    return copy_obj_data(obj_ctx, dest_bucket_info, dest_placement, read_op, obj_size - 1, dest_obj,
+    return copy_obj_data(obj_ctx, owner, dest_bucket_info, dest_placement, read_op, obj_size - 1, dest_obj,
                          mtime, real_time(), attrs, olh_epoch, delete_at, petag, dpp, y);
   }
 
@@ -4900,7 +4902,8 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx,
   write_op.meta.data = &first_chunk;
   write_op.meta.manifest = pmanifest;
   write_op.meta.ptag = &tag;
-  write_op.meta.owner = dest_bucket_info.owner;
+  write_op.meta.owner = owner;
+  write_op.meta.bucket_owner = dest_bucket_info.owner;
   write_op.meta.mtime = mtime;
   write_op.meta.flags = PUT_OBJ_CREATE;
   write_op.meta.category = category;
@@ -4959,6 +4962,7 @@ done_ret:
 
 
 int RGWRados::copy_obj_data(RGWObjectCtx& obj_ctx,
+               const ACLOwner& owner,
                RGWBucketInfo& dest_bucket_info,
                const rgw_placement_rule& dest_placement,
               RGWRados::Object::Read& read_op, off_t end,
@@ -4980,7 +4984,7 @@ int RGWRados::copy_obj_data(RGWObjectCtx& obj_ctx,
   using namespace rgw::putobj;
   jspan_context no_trace{false, false};
   AtomicObjectProcessor processor(aio.get(), this, dest_bucket_info,
-                                  &dest_placement, dest_bucket_info.owner,
+                                  &dest_placement, owner,
                                   obj_ctx, dest_obj, olh_epoch, tag, dpp, y, no_trace);
   int ret = processor.prepare(y);
   if (ret < 0)
@@ -5076,7 +5080,13 @@ int RGWRados::transition_obj(RGWObjectCtx& obj_ctx,
   attrs.erase(RGW_ATTR_ID_TAG);
   attrs.erase(RGW_ATTR_TAIL_TAG);
 
+  ACLOwner owner;
+  if (auto i = attrs.find(RGW_ATTR_ACL); i != attrs.end()) {
+    (void) decode_policy(dpp, i->second, &owner);
+  }
+
   ret = copy_obj_data(obj_ctx,
+                      owner,
                       bucket_info,
                       placement_rule,
                       read_op,
@@ -6556,9 +6566,9 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* octx, RGWBu
   r = rgw_rados_operate(dpp, ioctx, ref.obj.oid, &op, y);
   if (state) {
     if (r >= 0) {
-      bufferlist acl_bl;
+      ACLOwner owner;
       if (iter = attrs.find(RGW_ATTR_ACL); iter != attrs.end()) {
-        acl_bl = iter->second;
+        (void) decode_policy(dpp, iter->second, &owner);
       }
       std::string etag;
       if (iter = attrs.find(RGW_ATTR_ETAG); iter != attrs.end()) {
@@ -6575,7 +6585,7 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* octx, RGWBu
       uint64_t epoch = ioctx.get_last_version();
       int64_t poolid = ioctx.get_id();
       r = index_op.complete(dpp, poolid, epoch, state->size, state->accounted_size,
-                            mtime, etag, content_type, storage_class, &acl_bl,
+                            mtime, etag, content_type, storage_class, owner,
                             RGWObjCategory::Main, nullptr, y);
     } else {
       int ret = index_op.cancel(dpp, nullptr, y);
@@ -6942,7 +6952,7 @@ int RGWRados::Bucket::UpdateIndex::complete(const DoutPrefixProvider *dpp, int64
                                             uint64_t size, uint64_t accounted_size,
                                             const ceph::real_time& ut, const string& etag,
                                             const string& content_type, const string& storage_class,
-                                            bufferlist *acl_bl,
+                                            const ACLOwner& owner,
                                             RGWObjCategory category,
                                             list<rgw_obj_index_key> *remove_objs,
                                            optional_yield y,
@@ -6972,13 +6982,6 @@ int RGWRados::Bucket::UpdateIndex::complete(const DoutPrefixProvider *dpp, int64
   if (user_data)
     ent.meta.user_data = *user_data;
 
-  ACLOwner owner;
-  if (acl_bl && acl_bl->length()) {
-    int ret = store->decode_policy(dpp, *acl_bl, &owner);
-    if (ret < 0) {
-      ldpp_dout(dpp, 0) << "WARNING: could not decode policy ret=" << ret << dendl;
-    }
-  }
   ent.meta.owner = owner.id.to_str();
   ent.meta.owner_display_name = owner.display_name;
   ent.meta.content_type = content_type;
index f05b661b6fd22e39ac2ca65ddbe65fe0fa8944a2..dd471136a4281a02b2ae22890ffdfbd12d445177 100644 (file)
@@ -797,7 +797,8 @@ public:
         const std::string *ptag;
         std::list<rgw_obj_index_key> *remove_objs;
         ceph::real_time set_mtime;
-        rgw_user owner;
+        rgw_user bucket_owner; // for quota stats update
+        ACLOwner owner; // owner/owner_display_name for bucket index
         RGWObjCategory category;
         int flags;
         const char *if_match;
@@ -838,7 +839,7 @@ public:
       RGWRados::Object *target;
 
       struct DeleteParams {
-        rgw_user bucket_owner;
+        rgw_user bucket_owner; // for quota stats update
         int versioning_status; // versioning flags defined in enum RGWBucketFlags
         ACLOwner obj_owner;    // needed for creation of deletion marker
         uint64_t olh_epoch;
@@ -976,7 +977,7 @@ public:
                    uint64_t accounted_size, const ceph::real_time& ut,
                    const std::string& etag, const std::string& content_type,
                    const std::string& storage_class,
-                   bufferlist *acl_bl, RGWObjCategory category,
+                   const ACLOwner& owner, RGWObjCategory category,
                   std::list<rgw_obj_index_key> *remove_objs,
                   optional_yield y,
                   const std::string *user_data = nullptr,
@@ -1071,13 +1072,13 @@ public:
   bool swift_versioning_enabled(const RGWBucketInfo& bucket_info) const;
 
   int swift_versioning_copy(RGWObjectCtx& obj_ctx,              /* in/out */
-                            const rgw_user& user,               /* in */
+                            const ACLOwner& owner,              /* in */
                             RGWBucketInfo& bucket_info,         /* in */
                             const rgw_obj& obj,                 /* in */
                             const DoutPrefixProvider *dpp,      /* in */
                             optional_yield y);                  /* in */
   int swift_versioning_restore(RGWObjectCtx& obj_ctx,           /* in/out */
-                               const rgw_user& user,            /* in */
+                               const ACLOwner& owner,           /* in */
                                RGWBucketInfo& bucket_info,      /* in */
                                rgw_obj& obj,                    /* in/out */
                                bool& restored,                  /* out */
@@ -1173,7 +1174,7 @@ public:
    * Returns: 0 on success, -ERR# otherwise.
    */
   int copy_obj(RGWObjectCtx& obj_ctx,
-               const rgw_user& user_id,
+               const ACLOwner& owner,
                req_info *info,
                const rgw_zone_id& source_zone,
                const rgw_obj& dest_obj,
@@ -1204,6 +1205,7 @@ public:
                jspan_context& trace);
 
   int copy_obj_data(RGWObjectCtx& obj_ctx,
+               const ACLOwner& owner,
                RGWBucketInfo& dest_bucket_info,
                const rgw_placement_rule& dest_placement,
               RGWRados::Object::Read& read_op, off_t end,
index 80b5513d04107fad4ab1746b8e80539ce0e0369b..dfc7a608642e41cb65025f39f55b3e1a2ab6a89f 100644 (file)
@@ -1563,7 +1563,7 @@ int RadosStore::get_oidc_providers(const DoutPrefixProvider *dpp,
 std::unique_ptr<Writer> RadosStore::get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -1583,7 +1583,7 @@ std::unique_ptr<Writer> RadosStore::get_append_writer(const DoutPrefixProvider *
 std::unique_ptr<Writer> RadosStore::get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag)
@@ -2194,7 +2194,7 @@ int RadosObject::delete_object(const DoutPrefixProvider* dpp,
   return del_op.delete_obj(y, dpp, flags & FLAG_LOG_OP);
 }
 
-int RadosObject::copy_object(User* user,
+int RadosObject::copy_object(const ACLOwner& owner,
                                req_info* info,
                                const rgw_zone_id& source_zone,
                                rgw::sal::Object* dest_object,
@@ -2223,7 +2223,7 @@ int RadosObject::copy_object(User* user,
                                optional_yield y)
 {
   return store->getRados()->copy_obj(*rados_ctx,
-                                    user->get_id(),
+                                    owner,
                                     info,
                                     source_zone,
                                     dest_object->get_obj(),
@@ -2259,22 +2259,22 @@ int RadosObject::RadosReadOp::iterate(const DoutPrefixProvider* dpp, int64_t ofs
   return parent_op.iterate(dpp, ofs, end, cb, y);
 }
 
-int RadosObject::swift_versioning_restore(bool& restored,
+int RadosObject::swift_versioning_restore(const ACLOwner& owner, bool& restored,
                                          const DoutPrefixProvider* dpp, optional_yield y)
 {
   rgw_obj obj = get_obj();
   return store->getRados()->swift_versioning_restore(*rados_ctx,
-                                                    bucket->get_owner(),
+                                                    owner,
                                                     bucket->get_info(),
                                                     obj,
                                                     restored,
                                                     dpp, y);
 }
 
-int RadosObject::swift_versioning_copy(const DoutPrefixProvider* dpp, optional_yield y)
+int RadosObject::swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp, optional_yield y)
 {
   return store->getRados()->swift_versioning_copy(*rados_ctx,
-                                        bucket->get_info().owner,
+                                        owner,
                                         bucket->get_info(),
                                         get_obj(),
                                         dpp,
@@ -2437,13 +2437,16 @@ int RadosMultipartUpload::init(const DoutPrefixProvider *dpp, optional_yield y,
     obj->set_in_extra_data(true);
     obj->set_hash_source(oid);
 
-    RGWRados::Object op_target(store->getRados(),
-                              obj->get_bucket()->get_info(),
+
+    const RGWBucketInfo& bucket_info = obj->get_bucket()->get_info();
+
+    RGWRados::Object op_target(store->getRados(), bucket_info,
                               obj_ctx, obj->get_obj());
     RGWRados::Object::Write obj_op(&op_target);
 
     op_target.set_versioning_disabled(true); /* no versioning for multipart meta */
-    obj_op.meta.owner = owner.id;
+    obj_op.meta.owner = owner;
+    obj_op.meta.bucket_owner = bucket_info.owner;
     obj_op.meta.category = RGWObjCategory::MultiMeta;
     obj_op.meta.flags = PUT_OBJ_CREATE_EXCL;
     obj_op.meta.mtime = &mtime;
@@ -2747,8 +2750,8 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
 
   target_obj->set_atomic();
 
-  RGWRados::Object op_target(store->getRados(),
-                            target_obj->get_bucket()->get_info(),
+  const RGWBucketInfo& bucket_info = target_obj->get_bucket()->get_info();
+  RGWRados::Object op_target(store->getRados(), bucket_info,
                             dynamic_cast<RadosObject*>(target_obj)->get_ctx(),
                             target_obj->get_obj());
   RGWRados::Object::Write obj_op(&op_target);
@@ -2757,7 +2760,8 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
   obj_op.meta.remove_objs = &remove_objs;
 
   obj_op.meta.ptag = &tag; /* use req_id as operation tag */
-  obj_op.meta.owner = owner.id;
+  obj_op.meta.owner = owner;
+  obj_op.meta.bucket_owner = bucket_info.owner;
   obj_op.meta.flags = PUT_OBJ_CREATE;
   obj_op.meta.modify_tail = true;
   obj_op.meta.completeMultipart = true;
@@ -2852,7 +2856,7 @@ std::unique_ptr<Writer> RadosMultipartUpload::get_writer(
                                  const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t part_num,
                                  const std::string& part_num_str)
index 71f7a83a74cdecf0ec033f8b1800a0f3c1a0b65b..732898272ef9956218a524699602c34c8b49fc92 100644 (file)
@@ -256,7 +256,7 @@ class RadosStore : public StoreDriver {
     virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -264,7 +264,7 @@ class RadosStore : public StoreDriver {
     virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag) override;
@@ -413,7 +413,7 @@ class RadosObject : public StoreObject {
     }
     virtual int delete_object(const DoutPrefixProvider* dpp,
                              optional_yield y, uint32_t flags) override;
-    virtual int copy_object(User* user,
+    virtual int copy_object(const ACLOwner& owner,
                req_info* info, const rgw_zone_id& source_zone,
                rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
                rgw::sal::Bucket* src_bucket,
@@ -475,9 +475,9 @@ class RadosObject : public StoreObject {
     virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override;
 
     /* Swift versioning */
-    virtual int swift_versioning_restore(bool& restored,
+    virtual int swift_versioning_restore(const ACLOwner& owner, bool& restored,
                                         const DoutPrefixProvider* dpp, optional_yield y) override;
-    virtual int swift_versioning_copy(const DoutPrefixProvider* dpp,
+    virtual int swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                      optional_yield y) override;
 
     /* OPs */
@@ -673,7 +673,7 @@ public:
   virtual std::unique_ptr<Writer> get_writer(const DoutPrefixProvider *dpp,
                          optional_yield y,
                          rgw::sal::Object* obj,
-                         const rgw_user& owner,
+                         const ACLOwner& owner,
                          const rgw_placement_rule *ptail_placement_rule,
                          uint64_t part_num,
                          const std::string& part_num_str) override;
@@ -801,7 +801,7 @@ public:
                    RGWObjectCtx& obj_ctx,
                    const rgw_obj& obj,
                    RadosStore* _store, std::unique_ptr<Aio> _aio,
-                   const rgw_user& owner,
+                   const ACLOwner& owner,
                    const rgw_placement_rule *ptail_placement_rule,
                    uint64_t olh_epoch,
                    const std::string& unique_tag,
@@ -849,7 +849,7 @@ public:
                    RGWObjectCtx& obj_ctx,
                    const rgw_obj& obj,
                    RadosStore* _store, std::unique_ptr<Aio> _aio,
-                   const rgw_user& owner,
+                   const ACLOwner& owner,
                    const rgw_placement_rule *ptail_placement_rule,
                    const std::string& unique_tag,
                    uint64_t position,
@@ -898,7 +898,7 @@ public:
                       RGWObjectCtx& obj_ctx,
                       const rgw_obj& obj,
                       RadosStore* _store, std::unique_ptr<Aio> _aio,
-                      const rgw_user& owner,
+                      const ACLOwner& owner,
                       const rgw_placement_rule *ptail_placement_rule,
                       uint64_t part_num, const std::string& part_num_str, jspan_context& trace) :
                        StoreWriter(dpp, y),
index 76cadc9c8bfc0dcd1ec7509aa2775462027804fd..06e13c3890cfe97595512bda9c6291f5db677dbf 100644 (file)
@@ -125,7 +125,7 @@ int RGWDataAccess::Object::put(bufferlist& data,
   std::string req_id = driver->zone_unique_id(driver->get_new_req_id());
 
   std::unique_ptr<rgw::sal::Writer> processor;
-  processor = driver->get_atomic_writer(dpp, y, obj.get(), owner.id,
+  processor = driver->get_atomic_writer(dpp, y, obj.get(), owner,
                                       nullptr, olh_epoch, req_id);
 
   int ret = processor->prepare(y);
index 3424d4b04d7a04325be02e5e1c7b500cd4dc6d21..66e883e7257a787b4f4a91885aa7164f05ebfee7 100644 (file)
@@ -1872,7 +1872,7 @@ namespace rgw {
       }
     }
     processor = get_driver()->get_atomic_writer(this, state->yield, state->object.get(),
-                                        state->bucket_owner.id,
+                                        state->bucket_owner,
                                         &state->dest_placement, 0, state->req_id);
 
     op_ret = processor->prepare(state->yield);
index acfec133e836d2001aedbd8cde2ea79748c94e2c..5366681f63dc446ef33bdc2b4ec1a20d238896f8 100644 (file)
@@ -4191,7 +4191,7 @@ void RGWPutObj::execute(optional_yield y)
 
   /* Handle object versioning of Swift API. */
   if (! multipart) {
-    op_ret = s->object->swift_versioning_copy(this, s->yield);
+    op_ret = s->object->swift_versioning_copy(s->owner, this, s->yield);
     if (op_ret < 0) {
       return;
     }
@@ -4238,7 +4238,7 @@ void RGWPutObj::execute(optional_yield y)
     pdest_placement = &s->dest_placement;
     ldpp_dout(this, 20) << "dest_placement for part=" << *pdest_placement << dendl;
     processor = upload->get_writer(this, s->yield, s->object.get(),
-                                  s->user->get_id(), pdest_placement,
+                                  s->owner, pdest_placement,
                                   multipart_part_num, multipart_part_str);
   } else if(append) {
     if (s->bucket->versioned()) {
@@ -4246,7 +4246,7 @@ void RGWPutObj::execute(optional_yield y)
       return;
     }
     processor = driver->get_append_writer(this, s->yield, s->object.get(),
-                                        s->bucket_owner.id,
+                                        s->owner,
                                         pdest_placement, s->req_id, position,
                                         &cur_accounted_size);
   } else {
@@ -4259,7 +4259,7 @@ void RGWPutObj::execute(optional_yield y)
       }
     }
     processor = driver->get_atomic_writer(this, s->yield, s->object.get(),
-                                        s->bucket_owner.id,
+                                        s->owner,
                                         pdest_placement, olh_epoch, s->req_id);
   }
 
@@ -4672,7 +4672,7 @@ void RGWPostObj::execute(optional_yield y)
 
     std::unique_ptr<rgw::sal::Writer> processor;
     processor = driver->get_atomic_writer(this, s->yield, obj.get(),
-                                        s->bucket_owner.id,
+                                        s->owner,
                                         &s->dest_placement, 0, s->req_id);
     op_ret = processor->prepare(s->yield);
     if (op_ret < 0) {
@@ -5323,7 +5323,7 @@ void RGWDeleteObj::execute(optional_yield y)
     s->object->set_atomic();
     
     bool ver_restored = false;
-    op_ret = s->object->swift_versioning_restore(ver_restored, this, y);
+    op_ret = s->object->swift_versioning_restore(s->owner, ver_restored, this, y);
     if (op_ret < 0) {
       return;
     }
@@ -5799,12 +5799,12 @@ void RGWCopyObj::execute(optional_yield y)
 
   /* Handle object versioning of Swift API. In case of copying to remote this
    * should fail gently (op_ret == 0) as the dst_obj will not exist here. */
-  op_ret = s->object->swift_versioning_copy(this, s->yield);
+  op_ret = s->object->swift_versioning_copy(s->owner, this, s->yield);
   if (op_ret < 0) {
     return;
   }
 
-  op_ret = s->src_object->copy_object(s->user.get(),
+  op_ret = s->src_object->copy_object(s->owner,
           &s->info,
           source_zone,
           s->object.get(),
@@ -7841,8 +7841,7 @@ int RGWBulkUploadOp::handle_file(const std::string_view path,
   dest_placement.inherit_from(bucket->get_placement_rule());
 
   std::unique_ptr<rgw::sal::Writer> processor;
-  processor = driver->get_atomic_writer(this, s->yield, obj.get(),
-                                      bowner.id,
+  processor = driver->get_atomic_writer(this, s->yield, obj.get(), bowner,
                                       &s->dest_placement, 0, s->req_id);
   op_ret = processor->prepare(s->yield);
   if (op_ret < 0) {
index e21a6180f8b4ffd309937a953236ba5ac5654cef..10f3997f7fd7467ecb58e891f657990cefd7061f 100644 (file)
@@ -450,7 +450,7 @@ class Driver {
     virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -459,7 +459,7 @@ class Driver {
     virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag) = 0;
@@ -952,7 +952,7 @@ class Object {
                              optional_yield y,
                              uint32_t flags) = 0;
     /** Copy an this object to another object. */
-    virtual int copy_object(User* user,
+    virtual int copy_object(const ACLOwner& owner,
                req_info* info, const rgw_zone_id& source_zone,
                rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
                rgw::sal::Bucket* src_bucket,
@@ -1074,10 +1074,10 @@ class Object {
     virtual rgw_obj get_obj(void) const = 0;
 
     /** Restore the previous swift version of this object */
-    virtual int swift_versioning_restore(bool& restored,   /* out */
+    virtual int swift_versioning_restore(const ACLOwner& owner, bool& restored,   /* out */
                                         const DoutPrefixProvider* dpp, optional_yield y) = 0;
     /** Copy the current version of a swift object to the configured destination bucket*/
-    virtual int swift_versioning_copy(const DoutPrefixProvider* dpp,
+    virtual int swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                      optional_yield y) = 0;
 
     /** Get a new ReadOp for this object */
@@ -1224,7 +1224,7 @@ public:
   virtual std::unique_ptr<Writer> get_writer(const DoutPrefixProvider *dpp,
                          optional_yield y,
                          rgw::sal::Object* obj,
-                         const rgw_user& owner,
+                         const ACLOwner& owner,
                          const rgw_placement_rule *ptail_placement_rule,
                          uint64_t part_num,
                          const std::string& part_num_str) = 0;
index 0019178f640f8b321bad4e8c64a3502bff9200b0..b10caec40d277a8e43a22bf5dac50f8934eab794 100644 (file)
@@ -738,7 +738,7 @@ namespace rgw::sal {
     return del_op.delete_obj(dpp);
   }
 
-  int DBObject::copy_object(User* user,
+  int DBObject::copy_object(const ACLOwner& owner,
       req_info* info,
       const rgw_zone_id& source_zone,
       rgw::sal::Object* dest_object,
@@ -774,13 +774,13 @@ namespace rgw::sal {
     return parent_op.iterate(dpp, ofs, end, cb);
   }
 
-  int DBObject::swift_versioning_restore(bool& restored,
+  int DBObject::swift_versioning_restore(const ACLOwner& owner, bool& restored,
       const DoutPrefixProvider* dpp, optional_yield y)
   {
     return 0;
   }
 
-  int DBObject::swift_versioning_copy(const DoutPrefixProvider* dpp,
+  int DBObject::swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
       optional_yield y)
   {
     return 0;
@@ -1103,7 +1103,7 @@ namespace rgw::sal {
                                  const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t part_num,
                                  const std::string& part_num_str)
@@ -1117,7 +1117,7 @@ namespace rgw::sal {
                 MultipartUpload* upload,
                        rgw::sal::Object* obj,
                        DBStore* _driver,
-                   const rgw_user& _owner,
+                   const ACLOwner& _owner,
                    const rgw_placement_rule *_ptail_placement_rule,
                 uint64_t _part_num, const std::string& _part_num_str):
                        StoreWriter(dpp, y),
@@ -1263,7 +1263,7 @@ namespace rgw::sal {
                    optional_yield y,
                        rgw::sal::Object* _obj,
                        DBStore* _driver,
-                   const rgw_user& _owner,
+                   const ACLOwner& _owner,
                    const rgw_placement_rule *_ptail_placement_rule,
                        uint64_t _olh_epoch,
                        const std::string& _unique_tag) :
@@ -1452,7 +1452,7 @@ namespace rgw::sal {
   std::unique_ptr<Writer> DBStore::get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -1463,7 +1463,7 @@ namespace rgw::sal {
   std::unique_ptr<Writer> DBStore::get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag) {
index 6ce6398d0626ea2a8ceb390a6c4456e310f68fec..bb869a5cde4edddf6f2b45037f62138d53be38f9 100644 (file)
@@ -478,7 +478,7 @@ protected:
     virtual std::unique_ptr<Writer> get_writer(const DoutPrefixProvider *dpp,
                          optional_yield y,
                          rgw::sal::Object* obj,
-                         const rgw_user& owner,
+                         const ACLOwner& owner,
                          const rgw_placement_rule *ptail_placement_rule,
                          uint64_t part_num,
                          const std::string& part_num_str) override;
@@ -546,7 +546,7 @@ protected:
       virtual int delete_object(const DoutPrefixProvider* dpp,
           optional_yield y,
           uint32_t flags) override;
-      virtual int copy_object(User* user,
+      virtual int copy_object(const ACLOwner& owner,
           req_info* info, const rgw_zone_id& source_zone,
           rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
           rgw::sal::Bucket* src_bucket,
@@ -587,9 +587,9 @@ protected:
       virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override;
 
       /* Swift versioning */
-      virtual int swift_versioning_restore(bool& restored,
+      virtual int swift_versioning_restore(const ACLOwner& owner, bool& restored,
           const DoutPrefixProvider* dpp, optional_yield y) override;
-      virtual int swift_versioning_copy(const DoutPrefixProvider* dpp,
+      virtual int swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
           optional_yield y) override;
 
       /* OPs */
@@ -619,7 +619,7 @@ protected:
   class DBAtomicWriter : public StoreWriter {
     protected:
     rgw::sal::DBStore* store;
-    const rgw_user& owner;
+    const ACLOwner& owner;
        const rgw_placement_rule *ptail_placement_rule;
        uint64_t olh_epoch;
        const std::string& unique_tag;
@@ -638,7 +638,7 @@ protected:
                    optional_yield y,
                        rgw::sal::Object* obj,
                        DBStore* _store,
-                   const rgw_user& _owner,
+                   const ACLOwner& _owner,
                    const rgw_placement_rule *_ptail_placement_rule,
                        uint64_t _olh_epoch,
                        const std::string& _unique_tag);
@@ -665,7 +665,7 @@ protected:
   class DBMultipartWriter : public StoreWriter {
   protected:
     rgw::sal::DBStore* store;
-    const rgw_user& owner;
+    const ACLOwner& owner;
        const rgw_placement_rule *ptail_placement_rule;
        uint64_t olh_epoch;
     rgw::sal::Object* head_obj;
@@ -688,7 +688,7 @@ public:
                       optional_yield y, MultipartUpload* upload,
                       rgw::sal::Object* obj,
                       DBStore* _store,
-                      const rgw_user& owner,
+                      const ACLOwner& owner,
                       const rgw_placement_rule *ptail_placement_rule,
                       uint64_t part_num, const std::string& part_num_str);
     ~DBMultipartWriter() = default;
@@ -835,7 +835,7 @@ public:
       virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -843,7 +843,7 @@ public:
       virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag) override;
index 94b922acff48c51d8f37bac1447b5eceb04ee54d..a4dc43a1373350718a40310e4f975d6818a56446 100644 (file)
@@ -431,7 +431,7 @@ int FilterDriver::get_oidc_providers(const DoutPrefixProvider *dpp,
 std::unique_ptr<Writer> FilterDriver::get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  const std::string& unique_tag,
                                  uint64_t position,
@@ -448,7 +448,7 @@ std::unique_ptr<Writer> FilterDriver::get_append_writer(const DoutPrefixProvider
 std::unique_ptr<Writer> FilterDriver::get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag)
@@ -759,7 +759,7 @@ int FilterObject::delete_object(const DoutPrefixProvider* dpp,
   return next->delete_object(dpp, y, flags);
 }
 
-int FilterObject::copy_object(User* user,
+int FilterObject::copy_object(const ACLOwner& owner,
                              req_info* info,
                              const rgw_zone_id& source_zone,
                              rgw::sal::Object* dest_object,
@@ -787,7 +787,7 @@ int FilterObject::copy_object(User* user,
                              const DoutPrefixProvider* dpp,
                              optional_yield y)
 {
-  return next->copy_object(user, info, source_zone,
+  return next->copy_object(owner, info, source_zone,
                           nextObject(dest_object),
                           nextBucket(dest_bucket),
                           nextBucket(src_bucket),
@@ -892,16 +892,16 @@ void FilterObject::set_bucket(Bucket* b)
   next->set_bucket(nextBucket(b));
 };
 
-int FilterObject::swift_versioning_restore(bool& restored,
+int FilterObject::swift_versioning_restore(const ACLOwner& owner, bool& restored,
                                           const DoutPrefixProvider* dpp, optional_yield y)
 {
-  return next->swift_versioning_restore(restored, dpp, y);
+  return next->swift_versioning_restore(owner, restored, dpp, y);
 }
 
-int FilterObject::swift_versioning_copy(const DoutPrefixProvider* dpp,
+int FilterObject::swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                        optional_yield y)
 {
-  return next->swift_versioning_copy(dpp, y);
+  return next->swift_versioning_copy(owner, dpp, y);
 }
 
 std::unique_ptr<Object::ReadOp> FilterObject::get_read_op()
@@ -1055,7 +1055,7 @@ std::unique_ptr<Writer> FilterMultipartUpload::get_writer(
                                  const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t part_num,
                                  const std::string& part_num_str)
index b07179aa44e5a89dc23f2e78c40c03a87a391b70..edc8e86b94022d25a314123823e1ea0f6d122d25 100644 (file)
@@ -318,7 +318,7 @@ public:
   virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule
                                  *ptail_placement_rule,
                                  const std::string& unique_tag,
@@ -327,7 +327,7 @@ public:
   virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,
                                  rgw::sal::Object* obj,
-                                 const rgw_user& owner,
+                                 const ACLOwner& owner,
                                  const rgw_placement_rule *ptail_placement_rule,
                                  uint64_t olh_epoch,
                                  const std::string& unique_tag) override;
@@ -585,7 +585,7 @@ public:
   virtual int delete_object(const DoutPrefixProvider* dpp,
                            optional_yield y,
                            uint32_t flags) override;
-  virtual int copy_object(User* user,
+  virtual int copy_object(const ACLOwner& owner,
                req_info* info, const rgw_zone_id& source_zone,
               rgw::sal::Object* dest_object, rgw::sal::Bucket* dest_bucket,
                rgw::sal::Bucket* src_bucket,
@@ -673,9 +673,9 @@ public:
   virtual bool have_instance(void) override { return next->have_instance(); }
   virtual void clear_instance() override { return next->clear_instance(); }
 
-  virtual int swift_versioning_restore(bool& restored,   /* out */
+  virtual int swift_versioning_restore(const ACLOwner& owner, bool& restored,   /* out */
                                       const DoutPrefixProvider* dpp, optional_yield y) override;
-  virtual int swift_versioning_copy(const DoutPrefixProvider* dpp,
+  virtual int swift_versioning_copy(const ACLOwner& owner, const DoutPrefixProvider* dpp,
                                    optional_yield y) override;
 
   virtual std::unique_ptr<ReadOp> get_read_op() override;
@@ -767,7 +767,7 @@ public:
   virtual std::unique_ptr<Writer> get_writer(const DoutPrefixProvider *dpp,
                          optional_yield y,
                          rgw::sal::Object* obj,
-                         const rgw_user& owner,
+                         const ACLOwner& owner,
                          const rgw_placement_rule *ptail_placement_rule,
                          uint64_t part_num,
                          const std::string& part_num_str) override;
index 9a8b9950bd227b26b3366dcbfb1a261d9df03438..d8fe7642cb376938f4fb2135d6452f97f6e40db9 100644 (file)
@@ -144,7 +144,7 @@ class D4NFilterFixture : public ::testing::Test {
     int putObject(string name) {
       string object_name = "test_object_" + name;
       unique_ptr<rgw::sal::Object> obj = testBucket->get_object(rgw_obj_key(object_name));
-      rgw_user owner;
+      ACLOwner owner;
       rgw_placement_rule ptail_placement_rule;
       uint64_t olh_epoch = 123;
       string unique_tag;
@@ -325,6 +325,7 @@ TEST_F(D4NFilterFixture, CopyObjectNone) {
 
   /* Update object */
   RGWEnv rgw_env;
+  ACLOwner owner;
   req_info info(get_pointer(env->cct), &rgw_env);
   rgw_zone_id source_zone;
   rgw_placement_rule dest_placement; 
@@ -342,7 +343,7 @@ TEST_F(D4NFilterFixture, CopyObjectNone) {
   string tag;
   string etag;
 
-  EXPECT_EQ(testObject_CopyObjectNone->copy_object(testUser.get(),
+  EXPECT_EQ(testObject_CopyObjectNone->copy_object(owner, testUser->get_id(),
                              &info, source_zone, testObject_CopyObjectNone.get(),
                              testBucket.get(), testBucket.get(),
                               dest_placement, &src_mtime, &mtime,
@@ -393,7 +394,7 @@ TEST_F(D4NFilterFixture, CopyObjectReplace) {
   /* Copy to new object */
   unique_ptr<rgw::sal::Writer> testWriterCopy = nullptr;
   unique_ptr<rgw::sal::Object> obj = testBucket->get_object(rgw_obj_key("test_object_copy"));
-  rgw_user owner;
+  ACLOwner owner;
   rgw_placement_rule ptail_placement_rule;
   uint64_t olh_epoch_copy = 123;
   string unique_tag;
@@ -447,7 +448,7 @@ TEST_F(D4NFilterFixture, CopyObjectReplace) {
 
   unique_ptr<rgw::sal::Object> testObject_copy = testBucket->get_object(rgw_obj_key("test_object_copy"));
 
-  EXPECT_EQ(testObject_CopyObjectReplace->copy_object(testUser.get(),
+  EXPECT_EQ(testObject_CopyObjectReplace->copy_object(owner, testUser->get_id(),
                              &info, source_zone, testObject_copy.get(),
                              testBucket.get(), testBucket.get(),
                               dest_placement, &src_mtime, &mtime,
@@ -516,7 +517,7 @@ TEST_F(D4NFilterFixture, CopyObjectMerge) {
   unique_ptr<rgw::sal::Writer> testWriterCopy = nullptr;
   string object_name = "test_object_copy";
   unique_ptr<rgw::sal::Object> obj = testBucket->get_object(rgw_obj_key(object_name));
-  rgw_user owner;
+  ACLOwner owner;
   rgw_placement_rule ptail_placement_rule;
   uint64_t olh_epoch_copy = 123;
   string unique_tag;
@@ -572,7 +573,7 @@ TEST_F(D4NFilterFixture, CopyObjectMerge) {
 
   unique_ptr<rgw::sal::Object> testObject_copy = testBucket->get_object(rgw_obj_key("test_object_copy"));
 
-  EXPECT_EQ(testObject_CopyObjectMerge->copy_object(testUser.get(),
+  EXPECT_EQ(testObject_CopyObjectMerge->copy_object(owner, testUser->get_id(),
                              &info, source_zone, testObject_copy.get(),
                              testBucket.get(), testBucket.get(),
                               dest_placement, &src_mtime, &mtime,
@@ -1150,6 +1151,7 @@ TEST_F(D4NFilterFixture, PrepareCopyObject) {
   /* Update object */
   RGWEnv rgw_env;
   req_info info(get_pointer(env->cct), &rgw_env);
+  ACLOwner owner;
   rgw_zone_id source_zone;
   rgw_placement_rule dest_placement; 
   ceph::real_time src_mtime;
@@ -1166,7 +1168,7 @@ TEST_F(D4NFilterFixture, PrepareCopyObject) {
   string tag;
   string etag;
 
-  EXPECT_EQ(testObject_PrepareCopyObject->copy_object(testUser.get(),
+  EXPECT_EQ(testObject_PrepareCopyObject->copy_object(owner, testUser->get_id(),
                              &info, source_zone, testObject_PrepareCopyObject.get(),
                              testBucket.get(), testBucket.get(),
                               dest_placement, &src_mtime, &mtime,
@@ -1850,7 +1852,7 @@ TEST_F(D4NFilterFixture, DataCheck) {
   
   /* Prepare, process, and complete object write */
   unique_ptr<rgw::sal::Object> obj = testBucket->get_object(rgw_obj_key("test_object_DataCheck"));
-  rgw_user owner;
+  ACLOwner owner;
   rgw_placement_rule ptail_placement_rule;
   uint64_t olh_epoch = 123;
   string unique_tag;