From: Radoslaw Zarzynski Date: Mon, 21 Nov 2016 18:43:39 +0000 (+0100) Subject: rgw: initial class structure for BulkUpload of Swift API. X-Git-Tag: v12.0.2~214^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0091c83498f8b0317c6a64a828e5b72fee6e99d3;p=ceph.git rgw: initial class structure for BulkUpload of Swift API. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 535cea83ac65..6b20d01cc8ea 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -449,6 +449,8 @@ enum RGWOpType { /* rgw specific */ RGW_OP_ADMIN_SET_METADATA, RGW_OP_GET_OBJ_LAYOUT, + + RGW_OP_BULK_UPLOAD }; class RGWAccessControlPolicy; diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index b9ec2817d3e4..f0030f915d30 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -5496,6 +5496,23 @@ void RGWBulkDelete::execute() 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; diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index 9bda710dc59c..be723f37b9ff 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -385,6 +385,43 @@ inline ostream& operator<<(ostream& out, const RGWBulkDelete::acct_path_t &o) { return out << o.bucket_name << "/" << o.obj_key; } + +class RGWBulkUploadOp : public RGWOp { +protected: + class StreamGetter; + + virtual std::unique_ptr 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 { diff --git a/src/rgw/rgw_rest.h b/src/rgw/rgw_rest.h index 1d530d05ee43..f3f1e6001ec6 100644 --- a/src/rgw/rgw_rest.h +++ b/src/rgw/rgw_rest.h @@ -371,6 +371,12 @@ public: ~RGWBulkDelete_ObjStore() override {} }; +class RGWBulkUploadOp_ObjStore : public RGWBulkUploadOp { +public: + RGWBulkUploadOp_ObjStore() = default; + ~RGWBulkUploadOp_ObjStore() = default; +}; + class RGWDeleteMultiObj_ObjStore : public RGWDeleteMultiObj { public: RGWDeleteMultiObj_ObjStore() {} diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 40c940b47bfb..da308a639d8c 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -1420,6 +1420,23 @@ void RGWBulkDelete_ObjStore_SWIFT::send_response() rgw_flush_formatter_and_reset(s, s->formatter); } + +std::unique_ptr +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); @@ -1587,6 +1604,14 @@ RGWOp *RGWHandler_REST_Service_SWIFT::op_head() 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")) { diff --git a/src/rgw/rgw_rest_swift.h b/src/rgw/rgw_rest_swift.h index d2a1d72d8f1e..70f0ed67517b 100644 --- a/src/rgw/rgw_rest_swift.h +++ b/src/rgw/rgw_rest_swift.h @@ -201,6 +201,15 @@ public: void send_response() override; }; +class RGWBulkUploadOp_ObjStore_SWIFT : public RGWBulkUploadOp_ObjStore { +public: + RGWBulkUploadOp_ObjStore_SWIFT() = default; + ~RGWBulkUploadOp_ObjStore_SWIFT() = default; + + std::unique_ptr create_stream() override; + void send_response() override; +}; + class RGWInfo_ObjStore_SWIFT : public RGWInfo_ObjStore { protected: struct info @@ -286,6 +295,7 @@ class RGWHandler_REST_Service_SWIFT : public RGWHandler_REST_SWIFT { protected: RGWOp *op_get() override; RGWOp *op_head() override; + RGWOp *op_put() override; RGWOp *op_post() override; RGWOp *op_delete() override; public: