summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Farnum <greg@inktank.com>2013-07-17 12:51:04 -0700
committerGreg Farnum <greg@inktank.com>2013-07-25 16:00:17 -0700
commit8ffc4ca914a18bc62da699923196818adc1944bb (patch)
tree9398a9c0493fff4ef1c453878da1119097a32407
parent18eabd33221f0739f78d96ea8d91ae141b781bcf (diff)
downloadceph-8ffc4ca914a18bc62da699923196818adc1944bb.tar.gz
rgw: add sync state parsing code and REST interface
Specify the param "sync-type" as one of "always", "update-by-version", "update-by-timestamp". It defaults to always. Signed-off-by: Greg Farnum <greg@inktank.com>
-rw-r--r--src/rgw/rgw_metadata.h12
-rw-r--r--src/rgw/rgw_rest_metadata.cc11
2 files changed, 23 insertions, 0 deletions
diff --git a/src/rgw/rgw_metadata.h b/src/rgw/rgw_metadata.h
index b4e1584cf91..56db78d53c8 100644
--- a/src/rgw/rgw_metadata.h
+++ b/src/rgw/rgw_metadata.h
@@ -50,6 +50,18 @@ public:
APPLY_UPDATES,
APPLY_NEWER
};
+ static bool string_to_sync_type(const string& sync_string,
+ sync_type_t& type) {
+ if (sync_string.compare("update-by-version") == 0)
+ type = APPLY_UPDATES;
+ else if (sync_string.compare("update-by-timestamp") == 0)
+ type = APPLY_NEWER;
+ else if (sync_string.compare("always") == 0)
+ type = APPLY_ALWAYS;
+ else
+ return false;
+ return true;
+ }
virtual ~RGWMetadataHandler() {}
virtual string get_type() = 0;
diff --git a/src/rgw/rgw_rest_metadata.cc b/src/rgw/rgw_rest_metadata.cc
index 7cf97f5db26..d465f48a150 100644
--- a/src/rgw/rgw_rest_metadata.cc
+++ b/src/rgw/rgw_rest_metadata.cc
@@ -163,6 +163,17 @@ void RGWOp_Metadata_Put::execute() {
RGWMetadataHandler::sync_type_t sync_type = RGWMetadataHandler::APPLY_ALWAYS;
+ bool mode_exists = false;
+ string mode_string = s->info.args.get("sync-type", &mode_exists);
+ if (mode_exists) {
+ bool parsed = RGWMetadataHandler::string_to_sync_type(mode_string,
+ sync_type);
+ if (!parsed) {
+ http_ret = -EINVAL;
+ return;
+ }
+ }
+
http_ret = store->meta_mgr->put(metadata_key, bl, sync_type);
if (http_ret < 0) {
dout(5) << "ERROR: can't put key: " << cpp_strerror(http_ret) << dendl;