From: Amnon Hanuhov Date: Thu, 29 Jul 2021 13:19:48 +0000 (+0300) Subject: crimson/osd: Implement missing objclass functions used by cls_rgw X-Git-Tag: v17.1.0~52^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F42576%2Fhead;p=ceph.git crimson/osd: Implement missing objclass functions used by cls_rgw Signed-off-by: Amnon Hanuhov --- diff --git a/src/crimson/osd/objclass.cc b/src/crimson/osd/objclass.cc index 3ed969717360..f0f6d001d8fe 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(); }