]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: tie callbacks in different handlers directly to REST
authorYehuda Sadeh <yehuda@inktank.com>
Thu, 20 Sep 2012 18:17:35 +0000 (11:17 -0700)
committerYehuda Sadeh <yehuda@inktank.com>
Mon, 8 Oct 2012 17:57:48 +0000 (10:57 -0700)
Don't translate RESTful operations into a more meaningful
callback name. The handlers themselves should do that
translation. This way we can later register different
handlers with different meanings for the operations.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest.cc
src/rgw/rgw_rest.h
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_s3.h
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_swift.h
src/rgw/rgw_swift_auth.cc
src/rgw/rgw_swift_auth.h

index 66993f73d4c1fb7f56269c450c647abf616c726f..81eebee262613af14517ebd40619bbc91332df28 100644 (file)
@@ -2059,3 +2059,41 @@ int RGWHandler::do_read_permissions(RGWOp *op, bool only_bucket)
   return ret;
 }
 
+
+RGWOp *RGWHandler::get_op()
+{
+  RGWOp *op;
+  switch (s->op) {
+   case OP_GET:
+     op = op_get();
+     break;
+   case OP_PUT:
+     op = op_put();
+     break;
+   case OP_DELETE:
+     op = op_delete();
+     break;
+   case OP_HEAD:
+     op = op_head();
+     break;
+   case OP_POST:
+     op = op_post();
+     break;
+   case OP_COPY:
+     op = op_copy();
+     break;
+   default:
+     return NULL;
+  }
+
+  if (op) {
+    op->init(s, this);
+  }
+  return op;
+}
+
+void RGWHandler::put_op(RGWOp *op)
+{
+  delete op;
+}
+
index 0e284bab1b9bbd4a15cf8cad9092aba94311a943..a9433643c30ea5ed9ecfa396006f18185002d682 100644 (file)
@@ -661,14 +661,21 @@ protected:
   int do_read_permissions(RGWOp *op, bool only_bucket);
   virtual int validate_bucket_name(const string& bucket) = 0;
   virtual int validate_object_name(const string& object) = 0;
+
+  virtual RGWOp *op_get() { return NULL; }
+  virtual RGWOp *op_put() { return NULL; }
+  virtual RGWOp *op_delete() { return NULL; }
+  virtual RGWOp *op_head() { return NULL; }
+  virtual RGWOp *op_post() { return NULL; }
+  virtual RGWOp *op_copy() { return NULL; }
 public:
   RGWHandler() {}
   virtual ~RGWHandler();
   virtual int init(struct req_state *_s, RGWClientIO *cio);
   virtual bool filter_request(struct req_state *s) = 0;
 
-  virtual RGWOp *get_op() = 0;
-  virtual void put_op(RGWOp *op) = 0;
+  virtual RGWOp *get_op();
+  virtual void put_op(RGWOp *op);
   virtual int read_permissions(RGWOp *op) = 0;
   virtual int authorize() = 0;
 };
index 43fe186ba6019e54e18e90ceea6c91b27da32807..45c4583d6fe4d3162a3b721112f79f0ad22a3c26 100644 (file)
@@ -709,38 +709,6 @@ int RGWHandler_ObjStore::read_permissions(RGWOp *op_obj)
   return do_read_permissions(op_obj, only_bucket);
 }
 
-RGWOp *RGWHandler_ObjStore::get_op()
-{
-  RGWOp *op;
-  switch (s->op) {
-   case OP_GET:
-     op = get_retrieve_op(true);
-     break;
-   case OP_PUT:
-     op = get_create_op();
-     break;
-   case OP_DELETE:
-     op = get_delete_op();
-     break;
-   case OP_HEAD:
-     op = get_retrieve_op(false);
-     break;
-   case OP_POST:
-     op = get_post_op();
-     break;
-   case OP_COPY:
-     op = get_copy_op();
-     break;
-   default:
-     return NULL;
-  }
-
-  if (op) {
-    op->init(s, this);
-  }
-  return op;
-}
-
 
 RGWRESTMgr::RGWRESTMgr()
 {
@@ -783,8 +751,3 @@ RGWHandler *RGWRESTMgr::get_handler(struct req_state *s, RGWClientIO *cio,
   return handler;
 }
 
-void RGWHandler_ObjStore::put_op(RGWOp *op)
-{
-  delete op;
-}
-
index bab033afbc17554719fcde99a29d84d5e82c5a71..053fe5257e43efa442f490520ff3d8565094615a 100644 (file)
@@ -158,12 +158,12 @@ protected:
   virtual bool is_acl_op() = 0;
   virtual bool is_obj_update_op() = 0;
 
-  virtual RGWOp *get_retrieve_obj_op(bool get_data) = 0;
-  virtual RGWOp *get_retrieve_op(bool get_data) = 0;
-  virtual RGWOp *get_create_op() = 0;
-  virtual RGWOp *get_delete_op() = 0;
-  virtual RGWOp *get_post_op() = 0;
-  virtual RGWOp *get_copy_op() = 0;
+  virtual RGWOp *op_get() = 0;
+  virtual RGWOp *op_put() = 0;
+  virtual RGWOp *op_delete() = 0;
+  virtual RGWOp *op_head() = 0;
+  virtual RGWOp *op_post() = 0;
+  virtual RGWOp *op_copy() = 0;
 
   virtual int validate_bucket_name(const string& bucket);
   virtual int validate_object_name(const string& object);
@@ -171,8 +171,6 @@ public:
   RGWHandler_ObjStore() {}
   virtual ~RGWHandler_ObjStore() {}
   int read_permissions(RGWOp *op);
-  RGWOp *get_op();
-  void put_op(RGWOp *op);
 
   static int preprocess(struct req_state *s, RGWClientIO *cio);
   virtual bool filter_request(struct req_state *s) = 0;
index 75f358fc27e90db6b8a9c126b4c51f4102210684..c4ad0a73466424286aae15cad29a5776ee6e2771 100644 (file)
@@ -647,7 +647,7 @@ void RGWDeleteMultiObj_ObjStore_S3::end_response()
   rgw_flush_formatter_and_reset(s, s->formatter);
 }
 
-RGWOp *RGWHandler_ObjStore_S3::get_retrieve_obj_op(bool get_data)
+RGWOp *RGWHandler_ObjStore_S3::get_obj_op(bool get_data)
 {
   if (is_acl_op()) {
     return new RGWGetACLs_ObjStore_S3;
@@ -669,7 +669,7 @@ RGWOp *RGWHandler_ObjStore_S3::get_retrieve_obj_op(bool get_data)
     return new RGWStatBucket_ObjStore_S3;
 }
 
-RGWOp *RGWHandler_ObjStore_S3::get_retrieve_op(bool get_data)
+RGWOp *RGWHandler_ObjStore_S3::op_get()
 {
   if (s->bucket_name) {
     if (is_acl_op()) {
@@ -677,13 +677,27 @@ RGWOp *RGWHandler_ObjStore_S3::get_retrieve_op(bool get_data)
     } else if (s->args.exists("uploadId")) {
       return new RGWListMultipart_ObjStore_S3;
     }
-    return get_retrieve_obj_op(get_data);
+    return get_obj_op(true);
   }
 
   return new RGWListBuckets_ObjStore_S3;
 }
 
-RGWOp *RGWHandler_ObjStore_S3::get_create_op()
+RGWOp *RGWHandler_ObjStore_S3::op_head()
+{
+  if (s->bucket_name) {
+    if (is_acl_op()) {
+      return new RGWGetACLs_ObjStore_S3;
+    } else if (s->args.exists("uploadId")) {
+      return new RGWListMultipart_ObjStore_S3;
+    }
+    return get_obj_op(false);
+  }
+
+  return new RGWListBuckets_ObjStore_S3;
+}
+
+RGWOp *RGWHandler_ObjStore_S3::op_put()
 {
   if (is_acl_op()) {
     return new RGWPutACLs_ObjStore_S3;
@@ -699,7 +713,7 @@ RGWOp *RGWHandler_ObjStore_S3::get_create_op()
   return NULL;
 }
 
-RGWOp *RGWHandler_ObjStore_S3::get_delete_op()
+RGWOp *RGWHandler_ObjStore_S3::op_delete()
 {
   string upload_id = s->args.get("uploadId");
 
@@ -714,7 +728,7 @@ RGWOp *RGWHandler_ObjStore_S3::get_delete_op()
   return NULL;
 }
 
-RGWOp *RGWHandler_ObjStore_S3::get_post_op()
+RGWOp *RGWHandler_ObjStore_S3::op_post()
 {
   if (s->object) {
     if (s->args.exists("uploadId"))
index f97cb209cb17d5246ee10b0cff1dc93a2c633f76..12af134823e8d35523b38262bd93a281e4dcaf18 100644 (file)
@@ -172,12 +172,14 @@ protected:
   bool is_obj_update_op() {
     return is_acl_op();
   }
-  RGWOp *get_retrieve_obj_op(bool get_data);
-  RGWOp *get_retrieve_op(bool get_data);
-  RGWOp *get_create_op();
-  RGWOp *get_delete_op();
-  RGWOp *get_post_op();
-  RGWOp *get_copy_op() { return NULL; }
+  RGWOp *get_obj_op(bool get_data);
+
+  RGWOp *op_get();
+  RGWOp *op_head();
+  RGWOp *op_put();
+  RGWOp *op_delete();
+  RGWOp *op_post();
+  RGWOp *op_copy() { return NULL; }
 
   int init_from_header(struct req_state *s);
 public:
index 56f5fe445ee8809c9ae7f6d6c4d0aa947536edd9..3b59c7ab6c6e36d15656e3eb41b3004d7288332d 100644 (file)
@@ -485,7 +485,7 @@ send_data:
   return 0;
 }
 
-RGWOp *RGWHandler_ObjStore_SWIFT::get_retrieve_obj_op(bool get_data)
+RGWOp *RGWHandler_ObjStore_SWIFT::get_obj_op(bool get_data)
 {
   if (is_acl_op()) {
     return new RGWGetACLs_ObjStore_SWIFT;
@@ -505,22 +505,31 @@ RGWOp *RGWHandler_ObjStore_SWIFT::get_retrieve_obj_op(bool get_data)
     return new RGWStatBucket_ObjStore_SWIFT;
 }
 
-RGWOp *RGWHandler_ObjStore_SWIFT::get_retrieve_op(bool get_data)
+RGWOp *RGWHandler_ObjStore_SWIFT::op_get()
 {
   if (s->bucket_name) {
     if (is_acl_op()) {
       return new RGWGetACLs_ObjStore_SWIFT;
     }
-    return get_retrieve_obj_op(get_data);
+    return get_obj_op(true);
   }
 
-  if (get_data)
-    return new RGWListBuckets_ObjStore_SWIFT;
-  else
-    return new RGWStatAccount_ObjStore_SWIFT;
+  return new RGWListBuckets_ObjStore_SWIFT;
+}
+
+RGWOp *RGWHandler_ObjStore_SWIFT::op_head()
+{
+  if (s->bucket_name) {
+    if (is_acl_op()) {
+      return new RGWGetACLs_ObjStore_SWIFT;
+    }
+    return get_obj_op(false);
+  }
+
+  return new RGWStatAccount_ObjStore_SWIFT;
 }
 
-RGWOp *RGWHandler_ObjStore_SWIFT::get_create_op()
+RGWOp *RGWHandler_ObjStore_SWIFT::op_put()
 {
   if (is_acl_op()) {
     return new RGWPutACLs_ObjStore_SWIFT;
@@ -536,7 +545,7 @@ RGWOp *RGWHandler_ObjStore_SWIFT::get_create_op()
   return NULL;
 }
 
-RGWOp *RGWHandler_ObjStore_SWIFT::get_delete_op()
+RGWOp *RGWHandler_ObjStore_SWIFT::op_delete()
 {
   if (s->object)
     return new RGWDeleteObj_ObjStore_SWIFT;
@@ -546,12 +555,12 @@ RGWOp *RGWHandler_ObjStore_SWIFT::get_delete_op()
   return NULL;
 }
 
-RGWOp *RGWHandler_ObjStore_SWIFT::get_post_op()
+RGWOp *RGWHandler_ObjStore_SWIFT::op_post()
 {
   return new RGWPutMetadata_ObjStore_SWIFT;
 }
 
-RGWOp *RGWHandler_ObjStore_SWIFT::get_copy_op()
+RGWOp *RGWHandler_ObjStore_SWIFT::op_copy()
 {
   if (s->object)
     return new RGWCopyObj_ObjStore_SWIFT;
index 6de87fc8ffb749b0ff7ca9e943b1a78373e89ce6..fff875d6cc16049ec72fa19bcf45cb3b3e7648ef 100644 (file)
@@ -136,12 +136,13 @@ protected:
     return s->op == OP_POST;
   }
 
-  RGWOp *get_retrieve_obj_op(bool get_data);
-  RGWOp *get_retrieve_op(bool get_data);
-  RGWOp *get_create_op();
-  RGWOp *get_delete_op();
-  RGWOp *get_post_op();
-  RGWOp *get_copy_op();
+  RGWOp *get_obj_op(bool get_data);
+  RGWOp *op_get();
+  RGWOp *op_head();
+  RGWOp *op_put();
+  RGWOp *op_delete();
+  RGWOp *op_post();
+  RGWOp *op_copy();
 
   int init_from_header(struct req_state *s);
 public:
index 6c465a240b8558a9cba037cc0d59af95e0e22bf2..7b9df146a5965ed370cfd1b855ffd0a8c5336fd4 100644 (file)
@@ -14,8 +14,6 @@
 
 using namespace ceph::crypto;
 
-static RGW_SWIFT_Auth_Get rgw_swift_auth_get;
-
 static int build_token(string& swift_user, string& key, uint64_t nonce, utime_t& expiration, bufferlist& bl)
 {
   ::encode(swift_user, bl);
@@ -274,24 +272,8 @@ int RGWHandler_SWIFT_Auth::authorize()
   return 0;
 }
 
-RGWOp *RGWHandler_SWIFT_Auth::get_op()
-{
-  RGWOp *op;
-  switch (s->op) {
-   case OP_GET:
-     op = &rgw_swift_auth_get;
-     break;
-   default:
-     return NULL;
-  }
-
-  if (op) {
-    op->init(s, this);
-  }
-  return op;
-}
-
-void RGWHandler_SWIFT_Auth::put_op(RGWOp *op)
+RGWOp *RGWHandler_SWIFT_Auth::op_get()
 {
+  return new RGW_SWIFT_Auth_Get;
 }
 
index fdbf25105f6283ac61f7c1c2495c9370c7d9cb57..03b6b817768159e6af3e30a4953c1dfec04199e0 100644 (file)
@@ -21,8 +21,7 @@ class RGWHandler_SWIFT_Auth : public RGWHandler {
 public:
   RGWHandler_SWIFT_Auth() {}
   ~RGWHandler_SWIFT_Auth() {}
-  RGWOp *get_op();
-  void put_op(RGWOp *op);
+  RGWOp *op_get();
 
   bool filter_request(struct req_state *s);