]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: implement cls_cxx_map_get_vals() 36328/head
authorKefu Chai <kchai@redhat.com>
Tue, 28 Jul 2020 14:39:21 +0000 (22:39 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 28 Jul 2020 14:39:44 +0000 (22:39 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/objclass.cc

index 9c02c5c746eee54ca3847352e64b2ff78ebef0c5..0e9d53c2b53900c59151dc342236783ca450d550 100644 (file)
@@ -291,6 +291,24 @@ int cls_cxx_map_get_vals(cls_method_context_t hctx,
   return vals->size();
 }
 
+int cls_cxx_map_get_vals(cls_method_context_t hctx,
+                         const std::set<std::string> &keys,
+                        std::map<std::string, ceph::bufferlist> *vals)
+{
+  OSDOp op{CEPH_OSD_OP_OMAPGETVALSBYKEYS};
+  encode(keys, op.indata);
+  if (const auto ret = execute_osd_op(hctx, op); ret < 0) {
+    return ret;
+  }
+  try {
+    auto iter = op.outdata.cbegin();
+    decode(*vals, iter);
+  } catch (buffer::error&) {
+    return -EIO;
+  }
+  return 0;
+}
+
 int cls_cxx_map_read_header(cls_method_context_t hctx, bufferlist *outbl)
 {
   OSDOp op{CEPH_OSD_OP_OMAPGETHEADER};