From: Casey Bodley Date: Fri, 13 Mar 2020 18:42:28 +0000 (-0400) Subject: objclass: add cls_cxx_map_get_vals_by_keys X-Git-Tag: v16.1.0~2620^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=68b02d951003df838a2cf5be9547f51c18b5be04;p=ceph.git objclass: add cls_cxx_map_get_vals_by_keys add an objclass api for CEPH_OSD_OP_OMAPGETVALSBYKEYS Signed-off-by: Casey Bodley --- diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index 8d304d50c133..7c5d6918479a 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 470706afeaf6..6f0384f20bc1 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) {