]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: return the update status on sync requests
authorGreg Farnum <greg@inktank.com>
Thu, 25 Jul 2013 23:03:54 +0000 (16:03 -0700)
committerGreg Farnum <greg@inktank.com>
Thu, 25 Jul 2013 23:03:54 +0000 (16:03 -0700)
Add new STATUS_APPLIED, then specify the RGWX_UPDATE_STATUS header
based on that return code when doing metadata puts.
Add a send_response() function to RGWOp_Metadata_Put in order to
support sending back our new headers. Move the translation from
STATUS_NO_APPLY from set_req_state_err() to this function, so we
can turn different sync results into failures if necessary elsewhere.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/rgw/rgw_bucket.cc
src/rgw/rgw_common.h
src/rgw/rgw_http_errors.h
src/rgw/rgw_rest_metadata.cc
src/rgw/rgw_rest_metadata.h
src/rgw/rgw_user.cc

index 13a778e2db4948476c32e7bef0cc04531de63d04..b3379977e9dab687fe096c049ffa8257207ceccb 100644 (file)
@@ -1590,7 +1590,7 @@ public:
     if (ret < 0)
       return ret;
 
-    return 0;
+    return STATUS_APPLIED;
   }
 
   struct list_keys_info {
index 2638bc119b0abb86def061d484415b35ea806d60..3db557066b6e76e8105516f7593971cb6d1363d4 100644 (file)
@@ -100,6 +100,7 @@ using ceph::crypto::MD5;
 #define STATUS_PARTIAL_CONTENT   1903
 #define STATUS_REDIRECT          1904
 #define STATUS_NO_APPLY          1905
+#define STATUS_APPLIED           1906
 
 #define ERR_INVALID_BUCKET_NAME  2000
 #define ERR_INVALID_OBJECT_NAME  2001
index e48fb9a72c3dd1d2f5f6e331ffc0b09ec9c05f26..1eb4e12e695cf514b27dd3a563b22e2cfcd682dd 100644 (file)
@@ -15,7 +15,6 @@ const static struct rgw_http_errors RGW_HTTP_ERRORS[] = {
     { STATUS_ACCEPTED, 202, "Accepted" },
     { STATUS_NO_CONTENT, 204, "NoContent" },
     { STATUS_PARTIAL_CONTENT, 206, "" },
-    { STATUS_NO_APPLY, 204, "NoContent" },
     { ERR_PERMANENT_REDIRECT, 301, "PermanentRedirect" },
     { STATUS_REDIRECT, 303, "" },
     { ERR_NOT_MODIFIED, 304, "NotModified" },
index d465f48a150b90be944d737e8f1ccbb1b49975bf..c62a9bbcea0c7609fe5bcd4161a629ef8b822979 100644 (file)
@@ -179,7 +179,21 @@ void RGWOp_Metadata_Put::execute() {
     dout(5) << "ERROR: can't put key: " << cpp_strerror(http_ret) << dendl;
     return;
   }
-  http_ret = 0;
+  // translate internal codes into return header
+  if (http_ret == STATUS_NO_APPLY)
+    update_status = "skipped";
+  else if (http_ret == STATUS_APPLIED)
+    update_status = "applied";
+}
+
+void RGWOp_Metadata_Put::send_response() {
+  int http_return_code = http_ret;
+  if ((http_ret == STATUS_NO_APPLY) || (http_ret == STATUS_APPLIED))
+    http_return_code = STATUS_NO_CONTENT;
+  set_req_state_err(s, http_return_code);
+  dump_errno(s);
+  dump_pair(s, "RGWX_UPDATE_STATUS", update_status.c_str());
+  end_header(s);
 }
 
 void RGWOp_Metadata_Delete::execute() {
index 85993d08d587743fccc2dd3fb520b5de271b34ff..96969fc5410ab908276694449202cfb6ee267317 100644 (file)
@@ -40,6 +40,7 @@ public:
 
 class RGWOp_Metadata_Put : public RGWRESTOp {
   int get_data(bufferlist& bl);
+  string update_status;
 public:
   RGWOp_Metadata_Put() {}
   ~RGWOp_Metadata_Put() {}
@@ -48,6 +49,7 @@ public:
     return caps.check_cap("metadata", RGW_CAP_WRITE);
   }
   void execute();
+  void send_response();
   virtual const char *name() { return "set_metadata"; }
 };
 
index 7722d332c7ab9a10cbbfdb84e3047483ec9627d7..6fcecd4a98d34c7d51bc8930e5ec4d760ced7f51 100644 (file)
@@ -2317,7 +2317,7 @@ public:
     if (ret < 0)
       return ret;
 
-    return 0;
+    return STATUS_APPLIED;
   }
 
   struct list_keys_info {