From 735a88015250b136cb22bd41fcc1057f8bea9ce7 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 21 Aug 2020 15:43:28 +0800 Subject: [PATCH] crimson/osd: implement rm-xattr op 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 --- src/crimson/osd/ops_executer.cc | 4 ++++ src/crimson/osd/pg_backend.cc | 20 ++++++++++++++++++++ src/crimson/osd/pg_backend.h | 5 +++++ 3 files changed, 29 insertions(+) diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 6547b1530e25f..027fac9a7039e 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -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); diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 5eabc44a74e66..e46c9372f7e03 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -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>; diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index accfd260db8f8..cd2fe897d27c9 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -144,6 +144,11 @@ public: get_attr_errorator::future<> get_xattrs( const ObjectState& os, OSDOp& osd_op) const; + using rm_xattr_ertr = crimson::errorator; + rm_xattr_ertr::future<> rm_xattr( + ObjectState& os, + OSDOp& osd_op, + ceph::os::Transaction& trans); seastar::future stat( CollectionRef c, const ghobject_t& oid) const; -- 2.39.5