]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: spawn osd_op_params in do_write_op(). Fix overriding.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 4 Aug 2020 14:32:42 +0000 (16:32 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 6 Aug 2020 07:52:37 +0000 (09:52 +0200)
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 <rzarzyns@redhat.com>
src/crimson/osd/ops_executer.cc
src/crimson/osd/ops_executer.h

index 8ce1bffc105aefeac6a2bc5444594939cd027538..9388bd96418872d6fc00f3cff871c89b1a6ca229 100644 (file)
@@ -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:
index 2b1f307e1034b54ee0a4682827af692025e38862..2f64b225c3f2b3c6a9f68b97318a924519ab122a 100644 (file)
@@ -152,6 +152,9 @@ private:
   template <class Func>
   auto do_write_op(Func&& f, bool um) {
     ++num_write;
+    if (!osd_op_params) {
+      osd_op_params.emplace();
+    }
     user_modify = um;
     return std::forward<Func>(f)(backend, obc->obs, txn);
   }