From b51f2e04e72f2d16d684e0fff919e86c5c8e9325 Mon Sep 17 00:00:00 2001 From: Amnon Hanuhov Date: Thu, 29 Jul 2021 16:19:48 +0300 Subject: [PATCH] crimson/osd: Implement missing objclass functions used by cls_rgw Signed-off-by: Amnon Hanuhov --- src/crimson/osd/objclass.cc | 38 +++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/crimson/osd/objclass.cc b/src/crimson/osd/objclass.cc index 3ed96971736..f0f6d001d8f 100644 --- a/src/crimson/osd/objclass.cc +++ b/src/crimson/osd/objclass.cc @@ -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 *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 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(hctx); + return ox->get_last_user_version(); } -- 2.39.5