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>;
+ using eexist = ct_error_code<std::errc::file_exists>;
struct pass_further_all {
template <class ErrorT>
using call_errorator = crimson::errorator<
crimson::stateful_ec,
crimson::ct_error::enoent,
+ crimson::ct_error::eexist,
crimson::ct_error::invarg,
crimson::ct_error::erange,
crimson::ct_error::ecanceled,
return write_ertr::now();
}
-PGBackend::interruptible_future<> PGBackend::create(
+PGBackend::create_iertr::future<> PGBackend::create(
ObjectState& os,
const OSDOp& osd_op,
ceph::os::Transaction& txn,
if (os.exists && !os.oi.is_whiteout() &&
(osd_op.op.flags & CEPH_OSD_OP_FLAG_EXCL)) {
// this is an exclusive create
- throw crimson::osd::make_error(-EEXIST);
+ return crimson::ct_error::eexist::make();
}
if (osd_op.indata.length()) {
std::string category;
decode(category, p);
} catch (buffer::error&) {
- throw crimson::osd::invalid_argument();
+ return crimson::ct_error::invarg::make();
}
}
maybe_create_new_object(os, txn, delta_stats);
::crimson::interruptible::interruptible_errorator<
::crimson::osd::IOInterruptCondition,
write_ertr>;
- interruptible_future<> create(
+ using create_ertr = crimson::errorator<
+ crimson::ct_error::invarg,
+ crimson::ct_error::eexist>;
+ using create_iertr =
+ ::crimson::interruptible::interruptible_errorator<
+ ::crimson::osd::IOInterruptCondition,
+ create_ertr>;
+ create_iertr::future<> create(
ObjectState& os,
const OSDOp& osd_op,
ceph::os::Transaction& trans,