if (ret < 0)
return ret;
- return 0;
+ return STATUS_APPLIED;
}
struct list_keys_info {
#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
{ 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" },
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() {
class RGWOp_Metadata_Put : public RGWRESTOp {
int get_data(bufferlist& bl);
+ string update_status;
public:
RGWOp_Metadata_Put() {}
~RGWOp_Metadata_Put() {}
return caps.check_cap("metadata", RGW_CAP_WRITE);
}
void execute();
+ void send_response();
virtual const char *name() { return "set_metadata"; }
};
if (ret < 0)
return ret;
- return 0;
+ return STATUS_APPLIED;
}
struct list_keys_info {