From: Casey Bodley Date: Thu, 7 Dec 2023 03:38:27 +0000 (-0500) Subject: rgw/sal: pass in ACLOwner for object writes X-Git-Tag: testing/wip-yuriw-testing-20240416.150233~10^2~162 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2725622956f61c0974ae4136ed3c0e810ad64fe9;p=ceph-ci.git rgw/sal: pass in ACLOwner for object writes `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 (cherry picked from commit 1d29b7056983825e7095c518edc7b3d4dcdf0b05) Conflicts: src/test/rgw/test_d4n_filter.cc removed on main --- diff --git a/src/rgw/driver/d4n/rgw_sal_d4n.cc b/src/rgw/driver/d4n/rgw_sal_d4n.cc index e2624690ebd..71a18c62c5b 100644 --- a/src/rgw/driver/d4n/rgw_sal_d4n.cc +++ b/src/rgw/driver/d4n/rgw_sal_d4n.cc @@ -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 D4NFilterDriver::get_object(const rgw_obj_key& k) std::unique_ptr 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) diff --git a/src/rgw/driver/d4n/rgw_sal_d4n.h b/src/rgw/driver/d4n/rgw_sal_d4n.h index 840eb99f604..7caf7e067d2 100644 --- a/src/rgw/driver/d4n/rgw_sal_d4n.h +++ b/src/rgw/driver/d4n/rgw_sal_d4n.h @@ -53,7 +53,7 @@ class D4NFilterDriver : public FilterDriver { virtual std::unique_ptr 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, diff --git a/src/rgw/driver/daos/rgw_sal_daos.cc b/src/rgw/driver/daos/rgw_sal_daos.cc index a6136d90599..98e708d645e 100644 --- a/src/rgw/driver/daos/rgw_sal_daos.cc +++ b/src/rgw/driver/daos/rgw_sal_daos.cc @@ -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 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 DaosBucket::get_multipart_upload( std::unique_ptr 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 DaosStore::get_append_writer( std::unique_ptr 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; diff --git a/src/rgw/driver/daos/rgw_sal_daos.h b/src/rgw/driver/daos/rgw_sal_daos.h index 2d74f9c17cc..a01c2c2d0c3 100644 --- a/src/rgw/driver/daos/rgw_sal_daos.h +++ b/src/rgw/driver/daos/rgw_sal_daos.h @@ -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 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>& providers) override; virtual std::unique_ptr 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 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( diff --git a/src/rgw/driver/motr/rgw_sal_motr.cc b/src/rgw/driver/motr/rgw_sal_motr.cc index 3ee60c9c4d5..92c07ff95e4 100644 --- a/src/rgw/driver/motr/rgw_sal_motr.cc +++ b/src/rgw/driver/motr/rgw_sal_motr.cc @@ -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 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 MotrBucket::get_multipart_upload(const std::str std::unique_ptr 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 MotrStore::get_append_writer(const DoutPrefixProvider *d std::unique_ptr 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) { diff --git a/src/rgw/driver/motr/rgw_sal_motr.h b/src/rgw/driver/motr/rgw_sal_motr.h index 63c2b9d9dc8..9f7cbd9059d 100644 --- a/src/rgw/driver/motr/rgw_sal_motr.h +++ b/src/rgw/driver/motr/rgw_sal_motr.h @@ -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 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 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 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; diff --git a/src/rgw/driver/posix/rgw_sal_posix.cc b/src/rgw/driver/posix/rgw_sal_posix.cc index a8b3fe2f3e3..c4e753bb3a1 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.cc +++ b/src/rgw/driver/posix/rgw_sal_posix.cc @@ -373,7 +373,7 @@ std::string POSIXDriver::zone_unique_trans_id(const uint64_t unique_num) std::unique_ptr 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 POSIXDriver::get_append_writer(const DoutPrefixProvider std::unique_ptr 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 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) diff --git a/src/rgw/driver/posix/rgw_sal_posix.h b/src/rgw/driver/posix/rgw_sal_posix.h index ed7630a7d65..e00f6e74c92 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.h +++ b/src/rgw/driver/posix/rgw_sal_posix.h @@ -60,7 +60,7 @@ public: virtual std::unique_ptr 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 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 get_read_op() override; virtual std::unique_ptr get_delete_op() override; @@ -561,7 +561,7 @@ public: virtual std::unique_ptr 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 shadow_bucket; @@ -626,7 +626,7 @@ public: std::unique_ptr _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), diff --git a/src/rgw/driver/rados/rgw_putobj_processor.cc b/src/rgw/driver/rados/rgw_putobj_processor.cc index d1a4a53688b..d41678cdb06 100644 --- a/src/rgw/driver/rados/rgw_putobj_processor.cc +++ b/src/rgw/driver/rados/rgw_putobj_processor.cc @@ -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; diff --git a/src/rgw/driver/rados/rgw_putobj_processor.h b/src/rgw/driver/rados/rgw_putobj_processor.h index 35fc8c55105..655428f83e9 100644 --- a/src/rgw/driver/rados/rgw_putobj_processor.h +++ b/src/rgw/driver/rados/rgw_putobj_processor.h @@ -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 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, diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index c9da60eff9e..0d20f50a7d9 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -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::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 *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; diff --git a/src/rgw/driver/rados/rgw_rados.h b/src/rgw/driver/rados/rgw_rados.h index f05b661b6fd..dd471136a42 100644 --- a/src/rgw/driver/rados/rgw_rados.h +++ b/src/rgw/driver/rados/rgw_rados.h @@ -797,7 +797,8 @@ public: const std::string *ptag; std::list *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 *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, diff --git a/src/rgw/driver/rados/rgw_sal_rados.cc b/src/rgw/driver/rados/rgw_sal_rados.cc index 80b5513d041..dfc7a608642 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.cc +++ b/src/rgw/driver/rados/rgw_sal_rados.cc @@ -1563,7 +1563,7 @@ int RadosStore::get_oidc_providers(const DoutPrefixProvider *dpp, std::unique_ptr 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 RadosStore::get_append_writer(const DoutPrefixProvider * std::unique_ptr 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(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 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) diff --git a/src/rgw/driver/rados/rgw_sal_rados.h b/src/rgw/driver/rados/rgw_sal_rados.h index 71f7a83a74c..732898272ef 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.h +++ b/src/rgw/driver/rados/rgw_sal_rados.h @@ -256,7 +256,7 @@ class RadosStore : public StoreDriver { virtual std::unique_ptr 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 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 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, - 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, - 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, - 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), diff --git a/src/rgw/rgw_data_access.cc b/src/rgw/rgw_data_access.cc index 76cadc9c8bf..06e13c3890c 100644 --- a/src/rgw/rgw_data_access.cc +++ b/src/rgw/rgw_data_access.cc @@ -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 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); diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 3424d4b04d7..66e883e7257 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -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); diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index acfec133e83..5366681f63d 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -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 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 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) { diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index e21a6180f8b..10f3997f7fd 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -450,7 +450,7 @@ class Driver { virtual std::unique_ptr 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 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 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; diff --git a/src/rgw/rgw_sal_dbstore.cc b/src/rgw/rgw_sal_dbstore.cc index 0019178f640..b10caec40d2 100644 --- a/src/rgw/rgw_sal_dbstore.cc +++ b/src/rgw/rgw_sal_dbstore.cc @@ -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 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 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) { diff --git a/src/rgw/rgw_sal_dbstore.h b/src/rgw/rgw_sal_dbstore.h index 6ce6398d062..bb869a5cde4 100644 --- a/src/rgw/rgw_sal_dbstore.h +++ b/src/rgw/rgw_sal_dbstore.h @@ -478,7 +478,7 @@ protected: virtual std::unique_ptr 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 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 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; diff --git a/src/rgw/rgw_sal_filter.cc b/src/rgw/rgw_sal_filter.cc index 94b922acff4..a4dc43a1373 100644 --- a/src/rgw/rgw_sal_filter.cc +++ b/src/rgw/rgw_sal_filter.cc @@ -431,7 +431,7 @@ int FilterDriver::get_oidc_providers(const DoutPrefixProvider *dpp, std::unique_ptr 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 FilterDriver::get_append_writer(const DoutPrefixProvider std::unique_ptr 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 FilterObject::get_read_op() @@ -1055,7 +1055,7 @@ std::unique_ptr 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) diff --git a/src/rgw/rgw_sal_filter.h b/src/rgw/rgw_sal_filter.h index b07179aa44e..edc8e86b940 100644 --- a/src/rgw/rgw_sal_filter.h +++ b/src/rgw/rgw_sal_filter.h @@ -318,7 +318,7 @@ public: virtual std::unique_ptr 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 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 get_read_op() override; @@ -767,7 +767,7 @@ public: virtual std::unique_ptr 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; diff --git a/src/test/rgw/test_d4n_filter.cc b/src/test/rgw/test_d4n_filter.cc index 9a8b9950bd2..d8fe7642cb3 100644 --- a/src/test/rgw/test_d4n_filter.cc +++ b/src/test/rgw/test_d4n_filter.cc @@ -144,7 +144,7 @@ class D4NFilterFixture : public ::testing::Test { int putObject(string name) { string object_name = "test_object_" + name; unique_ptr 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 testWriterCopy = nullptr; unique_ptr 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 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 testWriterCopy = nullptr; string object_name = "test_object_copy"; unique_ptr 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 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 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;