s->formatter->dump_string("Key", upload->get_key());
}
s->formatter->dump_string("UploadId", upload->get_upload_id());
- dump_owner(s, s->user->get_id(), s->user->get_display_name(), "Initiator");
- dump_owner(s, s->user->get_id(), s->user->get_display_name());
+ const ACLOwner& owner = upload->get_owner();
+ dump_owner(s, owner.get_id(), owner.get_display_name(), "Initiator");
+ dump_owner(s, owner.get_id(), owner.get_display_name()); // Owner
s->formatter->dump_string("StorageClass", "STANDARD");
dump_time(s, "Initiated", upload->get_mtime());
s->formatter->close_section();
virtual int get_oidc_providers(const DoutPrefixProvider *dpp,
const std::string& tenant,
std::vector<std::unique_ptr<RGWOIDCProvider>>& providers) = 0;
- virtual std::unique_ptr<MultipartUpload> get_multipart_upload(Bucket* bucket, const std::string& oid, std::optional<std::string> upload_id=std::nullopt, ceph::real_time mtime=real_clock::now()) = 0;
+ virtual std::unique_ptr<MultipartUpload>
+ get_multipart_upload(Bucket* bucket, const std::string& oid,
+ std::optional<std::string> upload_id=std::nullopt,
+ ACLOwner owner={}, ceph::real_time mtime=real_clock::now()) = 0;
virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
optional_yield y,
std::unique_ptr<rgw::sal::Object> _head_obj,
virtual const std::string& get_meta() const = 0;
virtual const std::string& get_key() const = 0;
virtual const std::string& get_upload_id() const = 0;
+ virtual const ACLOwner& get_owner() const = 0;
virtual ceph::real_time get_mtime() const = 0;
std::map<uint32_t, std::unique_ptr<MultipartPart>>& get_parts() { return parts; }
return 0;
}
- std::unique_ptr<MultipartUpload> DBStore::get_multipart_upload(Bucket* bucket, const std::string& oid, std::optional<std::string> upload_id, ceph::real_time mtime) {
+ std::unique_ptr<MultipartUpload>
+ DBStore::get_multipart_upload(Bucket* bucket, const std::string& oid,
+ std::optional<std::string> upload_id,
+ ACLOwner owner, ceph::real_time mtime) {
return nullptr;
}
virtual int get_oidc_providers(const DoutPrefixProvider *dpp,
const std::string& tenant,
vector<std::unique_ptr<RGWOIDCProvider>>& providers) override;
- virtual std::unique_ptr<MultipartUpload> get_multipart_upload(Bucket* bucket, const std::string& oid, std::optional<std::string> upload_id, ceph::real_time mtime) override;
+ virtual std::unique_ptr<MultipartUpload>
+ get_multipart_upload(Bucket* bucket, const std::string& oid,
+ std::optional<std::string> upload_id=std::nullopt,
+ ACLOwner owner={}, ceph::real_time mtime=ceph::real_clock::now()) override;
virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
optional_yield y,
std::unique_ptr<rgw::sal::Object> _head_obj,
if (!results.objs.empty()) {
for (const rgw_bucket_dir_entry& dentry : results.objs) {
rgw_obj_key key(dentry.key);
- uploads.push_back(store->get_multipart_upload(this, key.name));
+ ACLOwner owner(rgw_user(dentry.meta.owner));
+ owner.set_name(dentry.meta.owner_display_name);
+ uploads.push_back(store->get_multipart_upload(
+ this, key.name, std::nullopt, std::move(owner)));
}
}
if (common_prefixes) {
return 0;
}
-std::unique_ptr<MultipartUpload> RadosStore::get_multipart_upload(Bucket* bucket, const std::string& oid, std::optional<std::string> upload_id, ceph::real_time mtime)
+std::unique_ptr<MultipartUpload>
+RadosStore::get_multipart_upload(Bucket* bucket, const std::string& oid,
+ std::optional<std::string> upload_id,
+ ACLOwner owner, ceph::real_time mtime)
{
- return std::make_unique<RadosMultipartUpload>(this, bucket, oid, upload_id, mtime);
+ return std::make_unique<RadosMultipartUpload>(this, bucket, oid, upload_id,
+ std::move(owner), mtime);
}
std::unique_ptr<Writer> RadosStore::get_append_writer(const DoutPrefixProvider *dpp,
virtual int get_oidc_providers(const DoutPrefixProvider *dpp,
const std::string& tenant,
std::vector<std::unique_ptr<RGWOIDCProvider>>& providers) override;
- virtual std::unique_ptr<MultipartUpload> get_multipart_upload(Bucket* bucket, const std::string& oid, std::optional<std::string> upload_id=std::nullopt, ceph::real_time mtime=real_clock::now()) override;
+ virtual std::unique_ptr<MultipartUpload>
+ get_multipart_upload(Bucket* bucket, const std::string& oid,
+ std::optional<std::string> upload_id=std::nullopt,
+ ACLOwner owner={}, ceph::real_time mtime=real_clock::now()) override;
virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
optional_yield y,
std::unique_ptr<rgw::sal::Object> _head_obj,
class RadosMultipartUpload : public MultipartUpload {
RadosStore* store;
RGWMPObj mp_obj;
+ ACLOwner owner;
ceph::real_time mtime;
rgw_placement_rule placement;
RGWObjManifest manifest;
public:
- RadosMultipartUpload(RadosStore* _store, Bucket* _bucket, const std::string& oid, std::optional<std::string> upload_id, ceph::real_time _mtime) : MultipartUpload(_bucket), store(_store), mp_obj(oid, upload_id), mtime(_mtime) {}
+ RadosMultipartUpload(RadosStore* _store, Bucket* _bucket, const std::string& oid,
+ std::optional<std::string> upload_id, ACLOwner owner,
+ ceph::real_time _mtime)
+ : MultipartUpload(_bucket), store(_store), mp_obj(oid, upload_id),
+ owner(owner), mtime(_mtime) {}
virtual ~RadosMultipartUpload() = default;
virtual const std::string& get_meta() const override { return mp_obj.get_meta(); }
virtual const std::string& get_key() const override { return mp_obj.get_key(); }
virtual const std::string& get_upload_id() const override { return mp_obj.get_upload_id(); }
+ virtual const ACLOwner& get_owner() const override { return owner; }
virtual ceph::real_time get_mtime() const override { return mtime; }
virtual std::unique_ptr<rgw::sal::Object> get_meta_obj() override;
virtual int init(const DoutPrefixProvider* dpp, optional_yield y, RGWObjectCtx* obj_ctx, ACLOwner& owner, rgw_placement_rule& dest_placement, rgw::sal::Attrs& attrs) override;