]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: unify the interruption handling between {Internal,}ClientRequest. 40646/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 12 May 2021 16:02:29 +0000 (16:02 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 12 May 2021 16:02:29 +0000 (16:02 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/osd_operations/client_request_common.cc
src/crimson/osd/osd_operations/client_request_common.h
src/crimson/osd/osd_operations/internal_client_request.cc

index 426b7bbdf14f6523d58af4f979516c91d826620c..d178256e4d53a595d253155af11a2fde053d9098 100644 (file)
@@ -122,28 +122,12 @@ seastar::future<> ClientRequest::start()
             sequencer.finish_op(get_id());
             return seastar::stop_iteration::yes;
           });
-       }, [this, pgref](std::exception_ptr eptr) mutable {
-         if (*eptr.__cxa_exception_type() ==
-             typeid(::crimson::common::actingset_changed)) {
-           try {
-             std::rethrow_exception(eptr);
-           } catch(::crimson::common::actingset_changed& e) {
-             if (e.is_primary()) {
-               logger().debug("{} operation restart, acting set changed", *this);
-                sequencer.maybe_reset(get_id());
-               return seastar::stop_iteration::no;
-             } else {
-               logger().debug("{} operation abort, up primary changed", *this);
-                sequencer.abort();
-               return seastar::stop_iteration::yes;
-             }
-           }
-         }
-         assert(*eptr.__cxa_exception_type() ==
-         typeid(crimson::common::system_shutdown_exception));
-         crimson::get_logger(ceph_subsys_osd).debug(
-             "{} operation skipped, system shutdown", *this);
-         return seastar::stop_iteration::yes;
+       }, [this, pgref](std::exception_ptr eptr) {
+          if (should_abort_request(std::move(eptr))) {
+            return seastar::stop_iteration::yes;
+          } else {
+            return seastar::stop_iteration::no;
+          }
        }, pgref);
       });
     });
index b39b2465a2d2b9f2d10ca7defd0221d66311febc..37e12845b203d88efb118efcaa0206270848180b 100644 (file)
@@ -33,4 +33,28 @@ CommonClientRequest::do_recover_missing(
   }
 }
 
+bool CommonClientRequest::should_abort_request(std::exception_ptr eptr)
+{
+  if (*eptr.__cxa_exception_type() ==
+      typeid(::crimson::common::actingset_changed)) {
+    try {
+      std::rethrow_exception(eptr);
+    } catch(::crimson::common::actingset_changed& e) {
+      if (e.is_primary()) {
+        logger().debug("{} operation restart, acting set changed", __func__);
+        return false;
+      } else {
+        logger().debug("{} operation abort, up primary changed", __func__);
+        return true;
+      }
+    }
+  } else {
+    assert(*eptr.__cxa_exception_type() ==
+      typeid(crimson::common::system_shutdown_exception));
+    crimson::get_logger(ceph_subsys_osd).debug(
+        "{} operation skipped, system shutdown", __func__);
+    return true;
+  }
+}
+
 } // namespace crimson::osd
index bf826d847f730af83da836308d7f9be6be564823..d3b4c0b5218afc2f3faa549a8c204c0a73f350e5 100644 (file)
@@ -11,6 +11,8 @@ namespace crimson::osd {
 struct CommonClientRequest {
   static InterruptibleOperation::template interruptible_future<>
   do_recover_missing(Ref<PG>& pg, const hobject_t& soid);
+
+  static bool should_abort_request(std::exception_ptr eptr);
 };
 
 } // namespace crimson::osd
index c2942fb505c377f928452755e620a903b15e7588..9ea028f2e4dd5be28505c65d14bf001e5049b155 100644 (file)
@@ -97,26 +97,12 @@ seastar::future<> InternalClientRequest::start()
             });
           });
         });
-      }, [this](std::exception_ptr eptr) mutable {
-        if (*eptr.__cxa_exception_type() ==
-            typeid(::crimson::common::actingset_changed)) {
-          try {
-            std::rethrow_exception(eptr);
-          } catch(::crimson::common::actingset_changed& e) {
-            if (e.is_primary()) {
-              logger().debug("{} operation restart, acting set changed", *this);
-              return seastar::stop_iteration::no;
-            } else {
-              logger().debug("{} operation abort, up primary changed", *this);
-              return seastar::stop_iteration::yes;
-            }
-          }
+      }, [this](std::exception_ptr eptr) {
+        if (should_abort_request(std::move(eptr))) {
+          return seastar::stop_iteration::yes;
+        } else {
+          return seastar::stop_iteration::no;
         }
-        assert(*eptr.__cxa_exception_type() ==
-          typeid(crimson::common::system_shutdown_exception));
-        crimson::get_logger(ceph_subsys_osd).debug(
-            "{} operation skipped, system shutdown", *this);
-        return seastar::stop_iteration::yes;
       }, pg);
     });
   });