From: Radoslaw Zarzynski Date: Tue, 4 Aug 2020 14:24:19 +0000 (+0200) Subject: crimson/osd: instantiate osd_op_params for every write. X-Git-Tag: wip-pdonnell-testing-20200918.022351~438^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a8733e227d47c5fde330cca5ce11b6c6afcda09e;p=ceph-ci.git crimson/osd: instantiate osd_op_params for every write. This simplifies the logic of `OpsExecuter::flush_changes()` and enables for moving the instantiation code to `do_write_op()` in the future. The performance impact seems negligible as the affected ops are not the ones dominating in our expected workload (read/write, omap). Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index a313beaf348..8ce1bffc105 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -697,6 +697,7 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) }); case CEPH_OSD_OP_CREATE: return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) { + osd_op_params = osd_op_params_t(); return backend.create(os, osd_op, txn); }, true); case CEPH_OSD_OP_WRITE: @@ -720,10 +721,12 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) return osd_op_errorator::now(); case CEPH_OSD_OP_SETXATTR: return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) { + osd_op_params = osd_op_params_t(); return backend.setxattr(os, osd_op, txn); }, true); case CEPH_OSD_OP_DELETE: return do_write_op([] (auto& backend, auto& os, auto& txn) { + osd_op_params = osd_op_params_t(); return backend.remove(os, txn); }, true); case CEPH_OSD_OP_CALL: @@ -773,6 +776,7 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) } #endif return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) { + osd_op_params = osd_op_params_t(); return backend.omap_set_header(os, osd_op, txn); }, true); case CEPH_OSD_OP_OMAPRMKEYRANGE: @@ -782,12 +786,14 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) } #endif return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) { + osd_op_params = osd_op_params_t(); return backend.omap_remove_range(os, osd_op, txn); }, true); // watch/notify case CEPH_OSD_OP_WATCH: return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) { + osd_op_params = osd_op_params_t(); return do_op_watch(osd_op, os, txn); }, false); case CEPH_OSD_OP_NOTIFY: diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index 0a224418fb9..2b1f307e103 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -242,9 +242,8 @@ OpsExecuter::osd_op_errorator::future<> OpsExecuter::flush_changes( assert(obc); const bool want_mutate = !txn.empty(); if (want_mutate) { - if (!osd_op_params) { - osd_op_params = osd_op_params_t(); - } + // osd_op_params are instantiated by every wr-like operation. + assert(osd_op_params); osd_op_params->req = std::move(msg); osd_op_params->at_version = pg.next_version(); osd_op_params->pg_trim_to = pg.get_pg_trim_to();