]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: check long attr name
authorchunmei-liu <chunmei.liu@intel.com>
Tue, 12 Apr 2022 07:15:50 +0000 (00:15 -0700)
committerchunmei-liu <chunmei.liu@intel.com>
Wed, 13 Apr 2022 23:00:50 +0000 (16:00 -0700)
Signed-off-by: chunmei-liu <chunmei.liu@intel.com>
src/crimson/common/errorator.h
src/crimson/osd/ops_executer.h
src/crimson/osd/pg_backend.cc
src/crimson/osd/pg_backend.h

index f695bd82a6148cccac621a4e1d6138438741a263..14c2e941e24005bc7f4cf59844252b3f39afc59e 100644 (file)
@@ -1144,6 +1144,7 @@ namespace ct_error {
   using address_not_available = ct_error_code<std::errc::address_not_available>;
   using ecanceled = ct_error_code<std::errc::operation_canceled>;
   using einprogress = ct_error_code<std::errc::operation_in_progress>;
+  using enametoolong = ct_error_code<std::errc::filename_too_long>;
 
   struct pass_further_all {
     template <class ErrorT>
index 659c682da3a65946ac53b6e6e1d8bfc9b7cd8484..9459cb4c62b0774caa9778a756f5011a9371ff21 100644 (file)
@@ -43,6 +43,7 @@ class OpsExecuter : public seastar::enable_lw_shared_from_this<OpsExecuter> {
     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,
index c6a74d2ec01248b28db6db38c7042a3690741ae1..4c507f7ae000096e47c5608ae66b70c5039514a0 100644 (file)
@@ -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<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 crimson::osd::make_error(-ENAMETOOLONG);
+    return crimson::ct_error::enametoolong::make();
   }
 
   maybe_create_new_object(os, txn, delta_stats);
index 60728d3af6da6e00622a30f0f8af9dfbb29c15cc..005fe9602750bcd56d87249c95bf7bf6cc09d136 100644 (file)
@@ -194,7 +194,14 @@ public:
   interruptible_future<std::tuple<std::vector<hobject_t>, 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,