From 8ffc4ca914a18bc62da699923196818adc1944bb Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Wed, 17 Jul 2013 12:51:04 -0700 Subject: [PATCH] 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 --- src/rgw/rgw_metadata.h | 12 ++++++++++++ src/rgw/rgw_rest_metadata.cc | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/rgw/rgw_metadata.h b/src/rgw/rgw_metadata.h index b4e1584cf91fa..56db78d53c844 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 7cf97f5db265c..d465f48a150b9 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; -- 2.39.5