]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: implement rm-xattr op
authorKefu Chai <kchai@redhat.com>
Fri, 21 Aug 2020 07:43:28 +0000 (15:43 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 24 Aug 2020 09:51:32 +0000 (17:51 +0800)
it is tested by test_rados.py:TestIoctx.test_xattrs_op, so let's
support this op in crimson as well.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/ops_executer.cc
src/crimson/osd/pg_backend.cc
src/crimson/osd/pg_backend.h

index 6547b1530e25f5dca560a87a3b71a1ab815a09e9..027fac9a7039ea8d20ff033c494e1abf8dae8ee4 100644 (file)
@@ -457,6 +457,10 @@ OpsExecuter::execute_op(OSDOp& osd_op)
     return do_read_op([&osd_op] (auto& backend, const auto& os) {
       return backend.get_xattrs(os, osd_op);
     });
+  case CEPH_OSD_OP_RMXATTR:
+    return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) {
+      return backend.rm_xattr(os, osd_op, txn);
+    }, true);
   case CEPH_OSD_OP_CREATE:
     return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) {
       return backend.create(os, osd_op, txn);
index 5eabc44a74e6684d00c9bfce44f801569ecc3382..e46c9372f7e0377adf4886da1f0f5c310fb74e20 100644 (file)
@@ -831,6 +831,26 @@ PGBackend::get_attr_errorator::future<> PGBackend::get_xattrs(
   });
 }
 
+PGBackend::rm_xattr_ertr::future<> PGBackend::rm_xattr(
+  ObjectState& os,
+  OSDOp& osd_op,
+  ceph::os::Transaction& txn)
+{
+  if (__builtin_expect(stopping, false)) {
+    throw crimson::common::system_shutdown_exception();
+  }
+  if (!os.exists || os.oi.is_whiteout()) {
+    logger().debug("{}: {} DNE", __func__, os.oi.soid);
+    return crimson::ct_error::enoent::make();
+  }
+  auto bp = osd_op.indata.cbegin();
+  string attr_name{"_"};
+  bp.copy(osd_op.op.xattr.name_len, attr_name);
+  osd_op.indata.splice(0, bp.get_off());
+  txn.rmattr(coll->get_cid(), ghobject_t{os.oi.soid}, attr_name);
+  return rm_xattr_ertr::now();
+}
+
 using get_omap_ertr =
   crimson::os::FuturizedStore::read_errorator::extend<
     crimson::ct_error::enodata>;
index accfd260db8f89ce104e7b7ea75b17cc218eb12d..cd2fe897d27c9b3381b3efec4179ee49cb1f021f 100644 (file)
@@ -144,6 +144,11 @@ public:
   get_attr_errorator::future<> get_xattrs(
     const ObjectState& os,
     OSDOp& osd_op) const;
+  using rm_xattr_ertr = crimson::errorator<crimson::ct_error::enoent>;
+  rm_xattr_ertr::future<> rm_xattr(
+    ObjectState& os,
+    OSDOp& osd_op,
+    ceph::os::Transaction& trans);
   seastar::future<struct stat> stat(
     CollectionRef c,
     const ghobject_t& oid) const;