From 0091c83498f8b0317c6a64a828e5b72fee6e99d3 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Mon, 21 Nov 2016 19:43:39 +0100 Subject: [PATCH] rgw: initial class structure for BulkUpload of Swift API. Signed-off-by: Radoslaw Zarzynski --- src/rgw/rgw_common.h | 2 ++ src/rgw/rgw_op.cc | 17 +++++++++++++++++ src/rgw/rgw_op.h | 37 +++++++++++++++++++++++++++++++++++++ src/rgw/rgw_rest.h | 6 ++++++ src/rgw/rgw_rest_swift.cc | 25 +++++++++++++++++++++++++ src/rgw/rgw_rest_swift.h | 10 ++++++++++ 6 files changed, 97 insertions(+) diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 535cea83ac659..6b20d01cc8ea9 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 b9ec2817d3e44..f0030f915d30e 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 9bda710dc59c2..be723f37b9ff2 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 1d530d05ee435..f3f1e6001ec67 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 40c940b47bfb5..da308a639d8c9 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 d2a1d72d8f1e7..70f0ed67517be 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: -- 2.39.5