From 68b02d951003df838a2cf5be9547f51c18b5be04 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Fri, 13 Mar 2020 14:42:28 -0400 Subject: [PATCH] objclass: add cls_cxx_map_get_vals_by_keys add an objclass api for CEPH_OSD_OP_OMAPGETVALSBYKEYS Signed-off-by: Casey Bodley --- src/objclass/objclass.h | 3 +++ src/osd/objclass.cc | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index 8d304d50c13..7c5d6918479 100644 --- a/src/objclass/objclass.h +++ b/src/objclass/objclass.h @@ -114,6 +114,9 @@ extern int cls_cxx_map_get_vals(cls_method_context_t hctx, bool *more); extern int cls_cxx_map_get_val(cls_method_context_t hctx, const std::string &key, bufferlist *outbl); +extern int cls_cxx_map_get_vals_by_keys(cls_method_context_t hctx, + const std::set &keys, + std::map *map); extern int cls_cxx_map_read_header(cls_method_context_t hctx, ceph::buffer::list *outbl); extern int cls_cxx_map_set_vals(cls_method_context_t hctx, const std::map *map); diff --git a/src/osd/objclass.cc b/src/osd/objclass.cc index 470706afeaf..6f0384f20bc 100644 --- a/src/osd/objclass.cc +++ b/src/osd/objclass.cc @@ -474,6 +474,31 @@ int cls_cxx_map_get_val(cls_method_context_t hctx, const string &key, return 0; } +int cls_cxx_map_get_vals_by_keys(cls_method_context_t hctx, + const std::set &keys, + std::map *map) +{ + PrimaryLogPG::OpContext **pctx = (PrimaryLogPG::OpContext **)hctx; + vector ops(1); + OSDOp& op = ops[0]; + int ret; + + encode(keys, op.indata); + + op.op.op = CEPH_OSD_OP_OMAPGETVALSBYKEYS; + ret = (*pctx)->pg->do_osd_ops(*pctx, ops); + if (ret < 0) + return ret; + + auto iter = op.outdata.cbegin(); + try { + decode(*map, iter); + } catch (buffer::error& e) { + return -EIO; + } + return 0; +} + int cls_cxx_map_set_val(cls_method_context_t hctx, const string &key, bufferlist *inbl) { -- 2.39.5