]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: initial class structure for BulkUpload of Swift API.
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Mon, 21 Nov 2016 18:43:39 +0000 (19:43 +0100)
committerRadoslaw Zarzynski <rzarzynski@mirantis.com>
Sat, 1 Apr 2017 13:46:25 +0000 (15:46 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
src/rgw/rgw_common.h
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest.h
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_swift.h

index 535cea83ac659128740cb3c7dbf7ba72f5c209f1..6b20d01cc8ea94bf1ca8d655a7f5aee89fa155fa 100644 (file)
@@ -449,6 +449,8 @@ enum RGWOpType {
   /* rgw specific */
   RGW_OP_ADMIN_SET_METADATA,
   RGW_OP_GET_OBJ_LAYOUT,
+
+  RGW_OP_BULK_UPLOAD
 };
 
 class RGWAccessControlPolicy;
index b9ec2817d3e44f11d508787269d76c2332aa9c5e..f0030f915d30e1d983ae35a0526346ceb42c258f 100644 (file)
@@ -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;
index 9bda710dc59c2d29431d452b2c7def744198d9e7..be723f37b9ff22cd82026d286c7866f251af25e9 100644 (file)
@@ -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<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 {
index 1d530d05ee435d06aa4cf57f790918d286539889..f3f1e6001ec673937874c8c870a9efa250b3e8b3 100644 (file)
@@ -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() {}
index 40c940b47bfb560903a2696632652ef82d208631..da308a639d8c940c76967ad8102a2548ec1b3de9 100644 (file)
@@ -1420,6 +1420,23 @@ void RGWBulkDelete_ObjStore_SWIFT::send_response()
   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);
@@ -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")) {
index d2a1d72d8f1e77f969114b67d6d73e64441c5df4..70f0ed67517be61681b4d767269f24ca298d2bb2 100644 (file)
@@ -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<StreamGetter> 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: