From a91d1fd48ea8b0ba8828f5b50cbc2db84bf26fb1 Mon Sep 17 00:00:00 2001 From: chunmei-liu Date: Tue, 12 Apr 2022 02:16:37 -0700 Subject: [PATCH] crimson/osd: check obj exists Signed-off-by: chunmei-liu --- src/crimson/common/errorator.h | 1 + src/crimson/osd/ops_executer.h | 1 + src/crimson/osd/pg_backend.cc | 6 +++--- src/crimson/osd/pg_backend.h | 9 ++++++++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/crimson/common/errorator.h b/src/crimson/common/errorator.h index 14c2e941e24..d50dee547dc 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 b81cea31a60..82bf50c2d4b 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 df6de8522b2..3ef35252ff0 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 7112247d658..8bd9526e6d2 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, -- 2.39.5