]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: instantiate osd_op_params for every write.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 4 Aug 2020 14:24:19 +0000 (16:24 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 6 Aug 2020 07:52:37 +0000 (09:52 +0200)
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 <rzarzyns@redhat.com>
src/crimson/osd/ops_executer.cc
src/crimson/osd/ops_executer.h

index a313beaf34849d6e975b262fa2a45028ac0bf891..8ce1bffc105aefeac6a2bc5444594939cd027538 100644 (file)
@@ -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:
index 0a224418fb916e710968fb6d5ddb0d0421c940d1..2b1f307e1034b54ee0a4682827af692025e38862 100644 (file)
@@ -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();