10 #include <Metadaqif.hpp>
11 #include <fmt/format.h>
12 #include <fmt/ostream.h>
13 #include <log4cplus/loggingmacros.h>
21 : m_policy(policy), m_params(m_params) {
29 return boost::when_all(AbortMeta(), AbortPrim())
31 [
this](future<std::tuple<future<void>, future<void>>> futs) ->
ResultType {
34 fmt::format(
"{}: AbortAsync: AbortMeta() and AbortPrim() completed.",
37 auto tup = futs.get();
38 auto& prim = std::get<0>(tup);
39 auto& meta = std::get<1>(tup);
41 if (prim.has_value() && meta.has_value()) {
42 LOG4CPLUS_INFO(m_params.logger,
43 fmt::format(
"{}: AbortAsync: DAQ aborted successfully.",
51 fmt::format(
"{}: AbortAsync: Data Acquisition abort has errors that will "
52 "be ignored due to error policy.",
57 LOG4CPLUS_ERROR(m_params.
logger,
58 fmt::format(
"{}: AbortAsync: Data Acquisition abort failed.",
62 std::vector<std::variant<DaqSourceError, std::exception_ptr>> errors;
66 errors.emplace_back(e);
68 errors.emplace_back(std::current_exception());
73 errors.emplace_back(e);
75 errors.emplace_back(std::current_exception());
77 LOG4CPLUS_DEBUG(m_params.
logger,
78 fmt::format(
"{}: Throwing exception.", m_params.
status));
79 throw boost::enable_current_exception(
DaqSourceErrors(std::move(errors)));
84 [[nodiscard]] boost::future<void> AbortAsync::AbortMeta() {
85 return SendRequestAndCollectReplies<void>(
86 m_params.meta_sources.begin(),
87 m_params.meta_sources.end(),
89 return s.GetState() != State::Aborted && s.GetState() != State::Stopped;
94 s.SetState(State::AbortingAcquiring);
95 return s.GetSource().GetRrClient().AbortDaq(id);
98 [](AsyncOpParams m_params,
100 boost::future<std::shared_ptr<metadaqif::DaqReply>>&& fut) ->
void {
101 HandleMetaDaqReply(
"AbortDaq",
102 State::AbortingAcquiring,
109 std::string_view(
"AbortAsync: abort metadata acquisition"))
113 [[nodiscard]] boost::future<void> AbortAsync::AbortPrim() {
114 return SendRequestAndCollectReplies<void>(
115 m_params.prim_sources.begin(),
116 m_params.prim_sources.end(),
117 [&](Source<PrimSource>& s) { return !IsFinalState(s.GetState()); },
120 [](Source<PrimSource>& s) {
121 s.SetState(State::AbortingAcquiring);
123 return s.GetSource().GetRrClient().RecAbort();
126 [](AsyncOpParams m_params,
127 Source<PrimSource>& source,
128 boost::future<std::string>&& fut) ->
void {
129 HandlePrimDaqReply(
"RecAbort",
130 State::AbortingAcquiring,
137 std::string_view(
"AbortAsync: abort primary data acquisition"))