diff options
author | Greg Farnum <greg@inktank.com> | 2013-07-17 12:51:04 -0700 |
---|---|---|
committer | Greg Farnum <greg@inktank.com> | 2013-07-25 16:00:17 -0700 |
commit | 8ffc4ca914a18bc62da699923196818adc1944bb (patch) | |
tree | 9398a9c0493fff4ef1c453878da1119097a32407 | |
parent | 18eabd33221f0739f78d96ea8d91ae141b781bcf (diff) | |
download | ceph-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.h | 12 | ||||
-rw-r--r-- | src/rgw/rgw_rest_metadata.cc | 11 |
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; |