/* rgw specific */
RGW_OP_ADMIN_SET_METADATA,
RGW_OP_GET_OBJ_LAYOUT,
+
+ RGW_OP_BULK_UPLOAD
};
class RGWAccessControlPolicy;
return;
}
+
+int RGWBulkUploadOp::verify_permission()
+{
+ return 0;
+}
+
+void RGWBulkUploadOp::pre_exec()
+{
+ rgw_bucket_object_pre_exec(s);
+}
+
+void RGWBulkUploadOp::execute()
+{
+ return;
+}
+
+
int RGWSetAttrs::verify_permission()
{
bool perm;
return out << o.bucket_name << "/" << o.obj_key;
}
+
+class RGWBulkUploadOp : public RGWOp {
+protected:
+ class StreamGetter;
+
+ virtual std::unique_ptr<StreamGetter> create_stream() = 0;
+ virtual void send_response() = 0;
+
+public:
+ int verify_permission() override;
+ void pre_exec() override;
+ void execute() override;
+
+ const std::string name() override {
+ return "bulk_upload";
+ }
+
+ RGWOpType get_type() override {
+ return RGW_OP_BULK_UPLOAD;
+ }
+
+ uint32_t op_mask() override {
+ return RGW_OP_TYPE_WRITE;
+ }
+}; /* RGWBulkUploadOp */
+
+
+class RGWBulkUploadOp::StreamGetter {
+public:
+ StreamGetter() = default;
+ virtual ~StreamGetter() = default;
+
+ virtual ssize_t get_at_most(size_t want, ceph::bufferlist& dst) = 0;
+ virtual ssize_t get_exactly(size_t want, ceph::bufferlist& dst) = 0;
+}; /* End of nested subclass StreamGetter */
+
+
#define RGW_LIST_BUCKETS_LIMIT_MAX 10000
class RGWListBuckets : public RGWOp {
~RGWBulkDelete_ObjStore() override {}
};
+class RGWBulkUploadOp_ObjStore : public RGWBulkUploadOp {
+public:
+ RGWBulkUploadOp_ObjStore() = default;
+ ~RGWBulkUploadOp_ObjStore() = default;
+};
+
class RGWDeleteMultiObj_ObjStore : public RGWDeleteMultiObj {
public:
RGWDeleteMultiObj_ObjStore() {}
rgw_flush_formatter_and_reset(s, s->formatter);
}
+
+std::unique_ptr<RGWBulkUploadOp::StreamGetter>
+RGWBulkUploadOp_ObjStore_SWIFT::create_stream()
+{
+ return nullptr;
+}
+
+void RGWBulkUploadOp_ObjStore_SWIFT::send_response()
+{
+ set_req_state_err(s, op_ret);
+ dump_errno(s);
+ end_header(s, this /* RGWOp */, nullptr /* contype */,
+ CHUNKED_TRANSFER_ENCODING);
+ rgw_flush_formatter_and_reset(s, s->formatter);
+}
+
+
void RGWGetCrossDomainPolicy_ObjStore_SWIFT::send_response()
{
set_req_state_err(s, op_ret);
return new RGWStatAccount_ObjStore_SWIFT;
}
+RGWOp *RGWHandler_REST_Service_SWIFT::op_put()
+{
+ if (s->info.args.exists("extract-archive")) {
+ return new RGWBulkUploadOp_ObjStore_SWIFT;
+ }
+ return nullptr;
+}
+
RGWOp *RGWHandler_REST_Service_SWIFT::op_post()
{
if (s->info.args.exists("bulk-delete")) {
void send_response() override;
};
+class RGWBulkUploadOp_ObjStore_SWIFT : public RGWBulkUploadOp_ObjStore {
+public:
+ RGWBulkUploadOp_ObjStore_SWIFT() = default;
+ ~RGWBulkUploadOp_ObjStore_SWIFT() = default;
+
+ std::unique_ptr<StreamGetter> create_stream() override;
+ void send_response() override;
+};
+
class RGWInfo_ObjStore_SWIFT : public RGWInfo_ObjStore {
protected:
struct info
protected:
RGWOp *op_get() override;
RGWOp *op_head() override;
+ RGWOp *op_put() override;
RGWOp *op_post() override;
RGWOp *op_delete() override;
public: