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.", m_params.status));
35 auto tup = futs.get();
36 auto& prim = std::get<0>(tup);
37 auto& meta = std::get<1>(tup);
39 if (prim.has_value() && meta.has_value()) {
42 fmt::format(
"{}: AbortAsync: DAQ aborted successfully.", m_params.status));
49 fmt::format(
"{}: AbortAsync: Data Acquisition abort has errors that will "
50 "be ignored due to error policy.", m_params.
status));
56 fmt::format(
"{}: AbortAsync: Data Acquisition abort failed.", m_params.
status));
59 std::vector<std::variant<DaqSourceError, std::exception_ptr>> errors;
63 errors.emplace_back(e);
65 errors.emplace_back(std::current_exception());
70 errors.emplace_back(e);
72 errors.emplace_back(std::current_exception());
76 fmt::format(
"{}: Throwing exception.", m_params.
status));
77 throw boost::enable_current_exception(
DaqSourceErrors(std::move(errors)));
83 [[nodiscard]] boost::future<void> AbortAsync::AbortMeta() {
84 return SendRequestAndCollectReplies<void>(
85 m_params.meta_sources.begin(),
86 m_params.meta_sources.end(),
88 return s.GetState() != State::Aborted && s.GetState() != State::Stopped;
93 s.SetState(State::Aborting);
94 return s.GetSource().GetRrClient().AbortDaq(id);
97 [](AsyncOpParams m_params,
99 boost::future<std::shared_ptr<metadaqif::DaqReply>>&& fut) ->
void {
100 HandleMetaDaqReply(State::Aborting, State::Aborted, {}, m_params, source, std::move(fut));
102 std::string_view(
"AbortAsync: abort metadata acquisition"))
107 [[nodiscard]] boost::future<void> AbortAsync::AbortPrim() {
108 return SendRequestAndCollectReplies<void>(
109 m_params.prim_sources.begin(),
110 m_params.prim_sources.end(),
111 [&](Source<PrimSource>& s) {
112 return !IsFinalState(s.GetState());
116 [](Source<PrimSource>& s) {
117 s.SetState(State::Aborting);
119 return s.GetSource().GetRrClient().RecAbort();
122 [](AsyncOpParams m_params,
123 Source<PrimSource>& source,
124 boost::future<std::string>&& fut) ->
void {
125 HandlePrimDaqReply(State::Aborting, State::Aborted, {}, m_params, source, std::move(fut));
127 std::string_view(
"AbortAsync: abort primary data acquisition"))