From: Radoslaw Zarzynski Date: Mon, 9 Sep 2019 11:28:50 +0000 (+0200) Subject: crimson: bring discard_all{} to errorator. X-Git-Tag: v15.1.0~801^2~47 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=ca7fb16bff5ce27369c5df153f36ecf04caaa58d;p=ceph-ci.git crimson: bring discard_all{} to errorator. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/common/errorator.h b/src/crimson/common/errorator.h index dc20887f1cc..3a639c2a7ba 100644 --- a/src/crimson/common/errorator.h +++ b/src/crimson/common/errorator.h @@ -96,6 +96,12 @@ struct errorator { // `report_failed_future()` during `operator=()`. std::move(result).get_exception(); result = std::forward(errfunc)(e); + } else { + constexpr bool explicitly_discarded = std::is_invocable_r< + struct ignore_marker_t&&, ErrorVisitorT, decltype(e)>::value; + if constexpr (!explicitly_discarded) { + result = std::forward(errfunc)(e); + } } } @@ -278,7 +284,18 @@ struct errorator { } }; + struct discard_all { + template <_impl::ct_error ErrorV> + auto operator()(const unthrowable_wrapper& e) { + static_assert((... || (e == WrappedAllowedErrorsT::instance)), + "discarding disallowed ct_error"); + return ignore_marker_t{}; + } + }; + private: + struct ignore_marker_t{}; + template static decltype(auto) plainify(seastar::future&& fut) { return std::forward>(fut);