]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
objclass: add cls_cxx_map_get_vals_by_keys
authorCasey Bodley <cbodley@redhat.com>
Fri, 13 Mar 2020 18:42:28 +0000 (14:42 -0400)
committerCasey Bodley <cbodley@redhat.com>
Mon, 13 Apr 2020 13:23:44 +0000 (09:23 -0400)
add an objclass api for CEPH_OSD_OP_OMAPGETVALSBYKEYS

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/objclass/objclass.h
src/osd/objclass.cc

index 8d304d50c133648e24d3758a23206d49b298326a..7c5d6918479a00dd2078be0bea8d318493e9da08 100644 (file)
@@ -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<std::string> &keys,
+                                        std::map<std::string, bufferlist> *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<std::string, ceph::buffer::list> *map);
index 470706afeaf66ac81bd56161ca8e805742abb950..6f0384f20bc13ae82fd1060bb853964afbbe15d8 100644 (file)
@@ -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<std::string> &keys,
+                                 std::map<std::string, bufferlist> *map)
+{
+  PrimaryLogPG::OpContext **pctx = (PrimaryLogPG::OpContext **)hctx;
+  vector<OSDOp> 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)
 {