From: Radoslaw Zarzynski Date: Tue, 4 Aug 2020 14:32:42 +0000 (+0200) Subject: crimson/osd: spawn osd_op_params in do_write_op(). Fix overriding. X-Git-Tag: wip-pdonnell-testing-20200918.022351~438^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e77292dc9ce3461851a149bd44d081689ebecec8;p=ceph-ci.git crimson/osd: spawn osd_op_params in do_write_op(). Fix overriding. This commit deduplicates the `OpsExexuter::do_osd_op()` by moving `std::optional`-typed `osd_op_params` instantiation to `do_write_op()`. It also fixes an issue where `clean_regions` of `osd_op_params` were reset on every write, writefull or truncate. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 8ce1bffc105..9388bd96418 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -697,36 +697,30 @@ 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: return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) { - osd_op_params = osd_op_params_t(); return backend.write(os, osd_op, txn, *osd_op_params); }, true); case CEPH_OSD_OP_WRITEFULL: return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) { - osd_op_params = osd_op_params_t(); return backend.writefull(os, osd_op, txn, *osd_op_params); }, true); case CEPH_OSD_OP_TRUNCATE: return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) { // FIXME: rework needed. Move this out to do_write_op(), introduce // do_write_op_no_user_modify()... - osd_op_params = osd_op_params_t(); return backend.truncate(os, osd_op, txn, *osd_op_params); }, true); case CEPH_OSD_OP_SETALLOCHINT: 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: @@ -766,7 +760,6 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) } #endif return do_write_op([this, &osd_op] (auto& backend, auto& os, auto& txn) { - osd_op_params = osd_op_params_t(); return backend.omap_set_vals(os, osd_op, txn, *osd_op_params); }, true); case CEPH_OSD_OP_OMAPSETHEADER: @@ -776,7 +769,6 @@ 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: @@ -786,14 +778,12 @@ 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 2b1f307e103..2f64b225c3f 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -152,6 +152,9 @@ private: template auto do_write_op(Func&& f, bool um) { ++num_write; + if (!osd_op_params) { + osd_op_params.emplace(); + } user_modify = um; return std::forward(f)(backend, obc->obs, txn); }