From d2b49dae15a81cc27d9dd1cbafbdf861665f3f6b Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Fri, 10 May 2019 13:51:41 -0400 Subject: [PATCH] crimson/osd: simplify write handling in PG::do_osd_ops. Signed-off-by: Radoslaw Zarzynski --- src/crimson/osd/pg.cc | 18 +++++++----------- src/crimson/osd/pg_backend.cc | 18 ++++++------------ src/crimson/osd/pg_backend.h | 8 ++++---- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 81db65b79308..087ce896f287 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -1015,18 +1015,14 @@ seastar::future> PG::do_osd_ops(Ref m) // TODO: issue requests in parallel if they don't write, // with writes being basically a synchronization barrier return seastar::do_for_each(std::begin(m->ops), std::end(m->ops), - [m,&txn,this,os](OSDOp& osd_op) { - return do_osd_op(*os, osd_op, txn); - }).then([m,&txn,this,os=std::move(os)] { - // XXX: the entire lambda can be scheduled conditionally - // XXX: I'm not txn.empty() is what we want here - return !txn.empty() ? backend->store_object_state(os, *m, txn) - : seastar::now(); + [m,&txn,this,pos=os.get()](OSDOp& osd_op) { + return do_osd_op(*pos, osd_op, txn); + }).then([&txn,m,this,os=std::move(os)]() mutable { + // XXX: the entire lambda could be scheduled conditionally. ::if_then()? + return txn.empty() ? seastar::now() + : backend->mutate_object(std::move(os), std::move(txn), *m); }); - }).then([&] { - return txn.empty() ? seastar::now() - : backend->submit_transaction(std::move(txn)); - }).then([=] { + }).then([m,this] { auto reply = make_message(m.get(), 0, get_osdmap_epoch(), 0, false); reply->add_flags(CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK); diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 79651b78ef85..9867d87f1cea 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -152,12 +152,12 @@ PGBackend::_load_ss(const hobject_t& oid) } seastar::future<> -PGBackend::store_object_state( - //const hobject_t& oid, - const cached_os_t os, - const MOSDOp& m, - ceph::os::Transaction& txn) +PGBackend::mutate_object( + cached_os_t&& os, + ceph::os::Transaction&& txn, + const MOSDOp& m) { + logger().trace("mutate_object: num_ops={}", txn.get_num_ops()); if (os->exists) { #if 0 os.oi.version = ctx->at_version; @@ -179,7 +179,7 @@ PGBackend::store_object_state( // reset cached ObjectState without enforcing eviction os->oi = object_info_t(os->oi.soid); } - return seastar::now(); + return store->do_transaction(coll, std::move(txn)); } seastar::future<> @@ -271,9 +271,3 @@ seastar::future<> PGBackend::writefull( } return seastar::now(); } - -seastar::future<> PGBackend::submit_transaction(ceph::os::Transaction&& txn) -{ - logger().trace("submit_transaction: num_ops={}", txn.get_num_ops()); - return store->do_transaction(coll, std::move(txn)); -} diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index ddde848018c9..75b5182ab9bb 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -33,9 +33,6 @@ public: ceph::os::CyanStore* store, const ec_profile_t& ec_profile); using cached_os_t = boost::local_shared_ptr; - seastar::future<> store_object_state(const cached_os_t os, - const MOSDOp& m, - ceph::os::Transaction& txn); seastar::future get_object_state(const hobject_t& oid); seastar::future<> evict_object_state(const hobject_t& oid); seastar::future read(const object_info_t& oi, @@ -48,7 +45,10 @@ public: ObjectState& os, const OSDOp& osd_op, ceph::os::Transaction& trans); - seastar::future<> submit_transaction(ceph::os::Transaction&& txn); + seastar::future<> mutate_object( + cached_os_t&& os, + ceph::os::Transaction&& txn, + const MOSDOp& m); protected: const shard_id_t shard; -- 2.47.3