From: Kefu Chai Date: Fri, 7 Aug 2020 05:02:11 +0000 (+0800) Subject: crimson/osd: support getxattrs op X-Git-Tag: wip-pdonnell-testing-20200918.022351~422^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a53a2e6e37467ab37b02f7d01823fd97bf3ca590;p=ceph-ci.git crimson/osd: support getxattrs op Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 9b51714ce11..810c557252a 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -699,6 +699,10 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) return do_read_op([&osd_op] (auto& backend, const auto& os) { return backend.getxattr(os, osd_op); }); + case CEPH_OSD_OP_GETXATTRS: + return do_read_op([&osd_op] (auto& backend, const auto& os) { + return backend.get_xattrs(os, osd_op); + }); 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 9c6a1ed67c5..e8ad54e29dc 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -670,6 +670,28 @@ PGBackend::get_attr_errorator::future PGBackend::getxattr( return store->get_attr(coll, ghobject_t{soid}, key); } +PGBackend::get_attr_errorator::future<> PGBackend::get_xattrs( + const ObjectState& os, + OSDOp& osd_op) const +{ + if (__builtin_expect(stopping, false)) { + throw crimson::common::system_shutdown_exception(); + } + return store->get_attrs(coll, ghobject_t{os.oi.soid}).safe_then( + [&osd_op](auto&& attrs) { + std::vector> user_xattrs; + for (auto& [key, val] : attrs) { + if (key.size() > 1 && key[0] == '_') { + ceph::bufferlist bl; + bl.append(std::move(val)); + user_xattrs.emplace_back(key.substr(1), std::move(bl)); + } + } + ceph::encode(user_xattrs, osd_op.outdata); + return get_attr_errorator::now(); + }); +} + static seastar::future maybe_get_omap_vals_by_keys( crimson::os::FuturizedStore* store, diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 6f2cf47e29c..67fa12b8716 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -127,6 +127,9 @@ public: get_attr_errorator::future getxattr( const hobject_t& soid, std::string_view key) const; + get_attr_errorator::future<> get_xattrs( + const ObjectState& os, + OSDOp& osd_op) const; seastar::future stat( CollectionRef c, const ghobject_t& oid) const;