From: chunmei-liu Date: Tue, 12 Apr 2022 09:16:37 +0000 (-0700) Subject: crimson/osd: check obj exists X-Git-Tag: v18.0.0~1044^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F45866%2Fhead;p=ceph.git crimson/osd: check obj exists Signed-off-by: chunmei-liu --- diff --git a/src/crimson/common/errorator.h b/src/crimson/common/errorator.h index 14c2e941e240..d50dee547dc1 100644 --- a/src/crimson/common/errorator.h +++ b/src/crimson/common/errorator.h @@ -1145,6 +1145,7 @@ namespace ct_error { using ecanceled = ct_error_code; using einprogress = ct_error_code; using enametoolong = ct_error_code; + using eexist = 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 b81cea31a60d..82bf50c2d4b9 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -40,6 +40,7 @@ class OpsExecuter : public seastar::enable_lw_shared_from_this { 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, diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index df6de8522b29..3ef35252ff0a 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -732,7 +732,7 @@ PGBackend::write_iertr::future<> PGBackend::zero( 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, @@ -741,7 +741,7 @@ PGBackend::interruptible_future<> PGBackend::create( 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()) { @@ -751,7 +751,7 @@ PGBackend::interruptible_future<> PGBackend::create( 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); diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 7112247d6580..8bd9526e6d29 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -124,7 +124,14 @@ public: ::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,