]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: implement cls_cxx_setxattr().
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 5 Aug 2019 06:48:55 +0000 (08:48 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Sat, 24 Aug 2019 01:33:58 +0000 (03:33 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/objclass.cc
src/crimson/osd/pg_backend.cc

index 73d4032c50cddf72e9117b977aa7fdd1fd05edbb..a28870261b51e53dc3fd72344ed1dcc467c82b34 100644 (file)
@@ -2,6 +2,7 @@
 // vim: ts=8 sw=2 smarttab
 
 #include <cstdarg>
+#include <cstring>
 #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<ceph::osd::OpsExecuter*>(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)
index d27afd9ddf741b52bcf9c71adda9eee034c3a7f0..f707cf1c3ece416dcab1b68623aa73fe5a382194 100644 (file)
@@ -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<uint64_t>(
     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);