From 197bc9b124e917c985863f45848c19beae2bd744 Mon Sep 17 00:00:00 2001 From: Abhishek Lekshmanan Date: Tue, 5 Mar 2019 13:34:05 +0100 Subject: [PATCH] cls_rgw: implement a read_omap_entry method Also refactor other methods that just read a single omap entry to use this method instead Signed-off-by: Abhishek Lekshmanan --- src/cls/rgw/cls_rgw.cc | 45 +++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/src/cls/rgw/cls_rgw.cc b/src/cls/rgw/cls_rgw.cc index 21535eae61a..1f17f828689 100644 --- a/src/cls/rgw/cls_rgw.cc +++ b/src/cls/rgw/cls_rgw.cc @@ -756,7 +756,8 @@ static void log_entry(const char *func, const char *str, rgw_bucket_olh_entry *e } template -static int read_index_entry(cls_method_context_t hctx, string& name, T *entry) +static int read_omap_entry(cls_method_context_t hctx, const std::string& name, + T *entry) { bufferlist current_entry; int rc = cls_cxx_map_get_val(hctx, name, ¤t_entry); @@ -768,9 +769,19 @@ static int read_index_entry(cls_method_context_t hctx, string& name, T *entry) try { decode(*entry, cur_iter); } catch (buffer::error& err) { - CLS_LOG(1, "ERROR: read_index_entry(): failed to decode entry\n"); + CLS_LOG(1, "ERROR: %s(): failed to decode entry\n", __func__); return -EIO; } + return 0; +} + +template +static int read_index_entry(cls_method_context_t hctx, string& name, T *entry) +{ + int ret = read_omap_entry(hctx, name, entry); + if (ret < 0) { + return ret; + } log_entry(__func__, "existing entry", entry); return 0; @@ -3168,18 +3179,10 @@ static int gc_omap_get(cls_method_context_t hctx, int type, const string& key, c string index; prepend_index_prefix(key, type, &index); - bufferlist bl; - int ret = cls_cxx_map_get_val(hctx, index, &bl); + int ret = read_omap_entry(hctx, key, info); if (ret < 0) return ret; - try { - auto iter = bl.cbegin(); - decode(*info, iter); - } catch (buffer::error& err) { - CLS_LOG(0, "ERROR: rgw_cls_gc_omap_get(): failed to decode index=%s\n", index.c_str()); - } - return 0; } @@ -3677,22 +3680,6 @@ static int rgw_reshard_list(cls_method_context_t hctx, bufferlist *in, bufferlis return 0; } -static int get_reshard_entry(cls_method_context_t hctx, const string& key, cls_rgw_reshard_entry *entry) -{ - bufferlist bl; - int ret = cls_cxx_map_get_val(hctx, key, &bl); - if (ret < 0) - return ret; - auto iter = bl.cbegin(); - try { - decode(*entry, iter); - } catch (buffer::error& err) { - CLS_LOG(0, "ERROR: %s : failed to decode entry %s\n", __func__, err.what()); - return -EIO; - } - return 0; -} - static int rgw_reshard_get(cls_method_context_t hctx, bufferlist *in, bufferlist *out) { auto in_iter = in->cbegin(); @@ -3708,7 +3695,7 @@ static int rgw_reshard_get(cls_method_context_t hctx, bufferlist *in, bufferlis string key; cls_rgw_reshard_entry entry; op.entry.get_key(&key); - int ret = get_reshard_entry(hctx, key, &entry); + int ret = read_omap_entry(hctx, key, &entry); if (ret < 0) { return ret; } @@ -3734,7 +3721,7 @@ static int rgw_reshard_remove(cls_method_context_t hctx, bufferlist *in, bufferl string key; cls_rgw_reshard_entry entry; cls_rgw_reshard_entry::generate_key(op.tenant, op.bucket_name, &key); - int ret = get_reshard_entry(hctx, key, &entry); + int ret = read_omap_entry(hctx, key, &entry); if (ret < 0) { return ret; } -- 2.39.5