]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: Implement missing objclass functions used by cls_rgw 42576/head
authorAmnon Hanuhov <ahanukov@redhat.com>
Thu, 29 Jul 2021 13:19:48 +0000 (16:19 +0300)
committerAmnon Hanuhov <AmnonSWE@gmail.com>
Fri, 14 Jan 2022 12:13:14 +0000 (14:13 +0200)
Signed-off-by: Amnon Hanuhov <ahanukov@redhat.com>
src/crimson/osd/objclass.cc

index 3ed9697173607a9b78a4f8f3ed5865fc2700778d..f0f6d001d8fe49b682e33dce4bb8fbd386029b86 100644 (file)
@@ -126,7 +126,22 @@ int cls_cxx_stat2(cls_method_context_t hctx,
                   uint64_t *size,
                   ceph::real_time *mtime)
 {
-  return 0;
+  OSDOp op{CEPH_OSD_OP_STAT};
+  if (const int ret = execute_osd_op(hctx, op); ret < 0) {
+    return ret;
+  }
+  uint64_t dummy_size;
+  real_time dummy_mtime;
+  uint64_t& out_size = size ? *size : dummy_size;
+  real_time& out_mtime = mtime ? *mtime : dummy_mtime;
+  try {
+    auto iter = op.outdata.cbegin();
+    decode(out_size, iter);
+    decode(out_mtime, iter);
+    return 0;
+  } catch (buffer::error& err) {
+    return -EIO;
+  }
 }
 
 int cls_cxx_read2(cls_method_context_t hctx,
@@ -228,6 +243,16 @@ int cls_cxx_getxattr(cls_method_context_t hctx,
 int cls_cxx_getxattrs(cls_method_context_t hctx,
                       map<string, bufferlist> *attrset)
 {
+  OSDOp op{CEPH_OSD_OP_GETXATTRS};
+  if (const int ret = execute_osd_op(hctx, op); ret < 0) {
+    return ret;
+  }
+  try {
+    auto iter = op.outdata.cbegin();
+    decode(*attrset, iter);
+  } catch (buffer::error& err) {
+    return -EIO;
+  }
   return 0;
 }
 
@@ -381,7 +406,8 @@ int cls_cxx_map_set_vals(cls_method_context_t hctx,
 
 int cls_cxx_map_clear(cls_method_context_t hctx)
 {
-  return 0;
+  OSDOp op{CEPH_OSD_OP_OMAPCLEAR};
+  return execute_osd_op(hctx, op);
 }
 
 int cls_cxx_map_write_header(cls_method_context_t hctx, bufferlist *inbl)
@@ -403,7 +429,10 @@ int cls_cxx_map_remove_range(cls_method_context_t hctx,
 
 int cls_cxx_map_remove_key(cls_method_context_t hctx, const string &key)
 {
-  return 0;
+  OSDOp op{CEPH_OSD_OP_OMAPRMKEYS};
+  std::vector<string> to_rm{key};
+  encode(to_rm, op.indata);
+  return execute_osd_op(hctx, op);
 }
 
 int cls_cxx_list_watchers(cls_method_context_t hctx,
@@ -414,7 +443,8 @@ int cls_cxx_list_watchers(cls_method_context_t hctx,
 
 uint64_t cls_current_version(cls_method_context_t hctx)
 {
-  return 0;
+  auto* ox = reinterpret_cast<crimson::osd::OpsExecuter*>(hctx);
+  return ox->get_last_user_version();
 }