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>
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,
});
}
-PGBackend::interruptible_future<> PGBackend::setxattr(
+PGBackend::setxattr_ierrorator::future<> PGBackend::setxattr(
ObjectState& os,
const OSDOp& osd_op,
ceph::os::Transaction& txn,
{
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);
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,