From: chunmei-liu Date: Tue, 12 Apr 2022 07:15:50 +0000 (-0700) Subject: crimson/osd: check long attr name X-Git-Tag: v18.0.0~1044^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=505b9101254e9a7941f69bd1ec9b85a5edac9505;p=ceph-ci.git crimson/osd: check long attr name Signed-off-by: chunmei-liu --- diff --git a/src/crimson/common/errorator.h b/src/crimson/common/errorator.h index f695bd82a61..14c2e941e24 100644 --- a/src/crimson/common/errorator.h +++ b/src/crimson/common/errorator.h @@ -1144,6 +1144,7 @@ namespace ct_error { using address_not_available = ct_error_code; using ecanceled = ct_error_code; using einprogress = ct_error_code; + using enametoolong = ct_error_code; struct pass_further_all { template diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index 659c682da3a..9459cb4c62b 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -43,6 +43,7 @@ class OpsExecuter : public seastar::enable_lw_shared_from_this { crimson::ct_error::invarg, crimson::ct_error::erange, crimson::ct_error::ecanceled, + crimson::ct_error::enametoolong, crimson::ct_error::permission_denied, crimson::ct_error::operation_not_supported, crimson::ct_error::input_output_error, diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index c6a74d2ec01..4c507f7ae00 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -821,7 +821,7 @@ PGBackend::list_objects(const hobject_t& start, uint64_t limit) const }); } -PGBackend::interruptible_future<> PGBackend::setxattr( +PGBackend::setxattr_ierrorator::future<> PGBackend::setxattr( ObjectState& os, const OSDOp& osd_op, ceph::os::Transaction& txn, @@ -829,13 +829,13 @@ PGBackend::interruptible_future<> PGBackend::setxattr( { if (local_conf()->osd_max_attr_size > 0 && osd_op.op.xattr.value_len > local_conf()->osd_max_attr_size) { - throw crimson::osd::make_error(-EFBIG); + return crimson::ct_error::file_too_large::make(); } 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 crimson::osd::make_error(-ENAMETOOLONG); + return crimson::ct_error::enametoolong::make(); } maybe_create_new_object(os, txn, delta_stats); diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 60728d3af6d..005fe960275 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -194,7 +194,14 @@ public: interruptible_future, hobject_t>> list_objects( const hobject_t& start, uint64_t limit) const; - interruptible_future<> setxattr( + using setxattr_errorator = crimson::errorator< + crimson::ct_error::file_too_large, + crimson::ct_error::enametoolong>; + using setxattr_ierrorator = + ::crimson::interruptible::interruptible_errorator< + ::crimson::osd::IOInterruptCondition, + setxattr_errorator>; + setxattr_ierrorator::future<> setxattr( ObjectState& os, const OSDOp& osd_op, ceph::os::Transaction& trans,