From: Radoslaw Zarzynski Date: Mon, 5 Aug 2019 06:48:55 +0000 (+0200) Subject: crimson/osd: implement cls_cxx_setxattr(). X-Git-Tag: v15.1.0~1774^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6c7e7ad7ce508b6f1496d60ab3c7b97433d03be4;p=ceph.git crimson/osd: implement cls_cxx_setxattr(). Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/objclass.cc b/src/crimson/osd/objclass.cc index 73d4032c50c..a28870261b5 100644 --- a/src/crimson/osd/objclass.cc +++ b/src/crimson/osd/objclass.cc @@ -2,6 +2,7 @@ // vim: ts=8 sw=2 smarttab #include +#include #include "common/ceph_context.h" #include "common/ceph_releases.h" #include "common/config.h" @@ -165,7 +166,18 @@ int cls_cxx_setxattr(cls_method_context_t hctx, const char *name, bufferlist *inbl) { - return 0; + OSDOp op; + op.op.op = CEPH_OSD_OP_SETXATTR; + op.op.xattr.name_len = std::strlen(name); + op.op.xattr.value_len = inbl->length(); + op.indata.append(name, op.op.xattr.name_len); + op.indata.append(*inbl); + try { + reinterpret_cast(hctx)->do_osd_op(op).get(); + return 0; + } catch (ceph::osd::error& e) { + return -e.code().value(); + } } int cls_cxx_snap_revert(cls_method_context_t hctx, snapid_t snapid) diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index d27afd9ddf7..f707cf1c3ec 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -402,13 +402,13 @@ seastar::future<> PGBackend::setxattr( if (local_conf()->osd_max_attr_size > 0 && osd_op.op.xattr.value_len > local_conf()->osd_max_attr_size) { - throw ceph::osd::error::from_intret(-EFBIG); + throw ceph::osd::make_error(-EFBIG); } const auto max_name_len = std::min( store->get_max_attr_name_length(), local_conf()->osd_max_attr_name_len); if (osd_op.op.xattr.name_len > max_name_len) { - throw ceph::osd::error::from_intret(-ENAMETOOLONG); + throw ceph::osd::make_error(-ENAMETOOLONG); } maybe_create_new_object(os, txn);