1 #include "artdaq/DAQdata/Globals.hh"
2 #include "artdaq/RoutingPolicies/PolicyMacros.hh"
3 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
4 #include "fhiclcpp/ParameterSet.h"
5 #include "messagefacility/MessageLogger/MessageLogger.h"
47 artdaq::detail::RoutingPacketEntry
CreateRouteForSequenceID(artdaq::Fragment::sequence_id_t seq,
int requesting_rank)
override;
55 artdaq::Fragment::sequence_id_t misbehave_after_;
56 artdaq::Fragment::sequence_id_t misbehave_until_{0};
57 size_t misbehave_pause_ms_;
58 bool misbehave_conflicting_table_data_;
59 bool misbehave_corrupt_table_data_;
60 bool misbehave_overload_event_builder_;
64 : RoutingManagerPolicy(ps)
65 , misbehave_after_(ps.get<size_t>(
"misbehave_after_n_events", 1000))
66 , misbehave_pause_ms_(ps.get<size_t>(
"misbehave_pause_time_ms", 0))
67 , misbehave_conflicting_table_data_(ps.get<bool>(
"misbehave_send_conflicting_table_data", false))
68 , misbehave_corrupt_table_data_(ps.get<bool>(
"misbehave_send_corrupt_table_data", false))
69 , misbehave_overload_event_builder_(ps.get<bool>(
"misbehave_overload_event_builder", false))
72 auto count = (misbehave_conflicting_table_data_ ? 1 : 0) + (misbehave_corrupt_table_data_ ? 1 : 0) +
73 (misbehave_overload_event_builder_ ? 1 : 0) + (misbehave_pause_ms_ > 0 ? 1 : 0);
76 mf::LogWarning(
"MisbehaviorTest") <<
"Only one misbehavior is allowed at a time!";
83 auto half = tokens_.size() / 2;
85 for (; counter < half; ++counter)
87 table.emplace_back(artdaq::detail::RoutingPacketEntry(next_sequence_id_, tokens_.at(counter)));
91 if (next_sequence_id_ > misbehave_after_)
95 if (misbehave_pause_ms_ > 0)
97 mf::LogError(
"MisbehaviorTest")
98 <<
"Pausing for " << misbehave_pause_ms_ <<
" milliseconds before sending table update";
99 usleep(misbehave_pause_ms_ * 1000);
101 if (misbehave_conflicting_table_data_)
103 mf::LogError(
"MisbehaviorTest") <<
"Adding conflicting data point to output";
104 table.emplace_back(next_sequence_id_, tokens_.at(counter) + 1);
106 if (misbehave_corrupt_table_data_)
108 mf::LogError(
"MisbehaviorTest") <<
"Adding random data point";
109 table.emplace_back(seedAndRandom(), rand());
111 if (misbehave_overload_event_builder_)
113 mf::LogError(
"MisbehaviorTest") <<
"Sending 100 events in a row to Rank " << tokens_.at(0);
114 for (
auto ii = 0; ii < 100; ++ii)
116 table.emplace_back(next_sequence_id_, tokens_.at(0));
120 misbehave_after_ += misbehave_after_;
124 for (; counter < tokens_.size(); ++counter)
126 table.emplace_back(artdaq::detail::RoutingPacketEntry(next_sequence_id_, tokens_.at(counter)));
132 artdaq::detail::RoutingPacketEntry output;
133 if (!tokens_.empty())
135 if (seq > misbehave_after_ || seq < misbehave_until_)
137 if (seq > misbehave_until_)
139 misbehave_after_ += misbehave_after_;
141 if (misbehave_pause_ms_ > 0)
143 mf::LogError(
"MisbehaviorTest")
144 <<
"Pausing for " << misbehave_pause_ms_ <<
" milliseconds before sending table update";
145 usleep(misbehave_pause_ms_ * 1000);
147 auto dest = tokens_.front();
148 output = artdaq::detail::RoutingPacketEntry(seq, dest);
150 tokens_used_since_last_update_++;
153 if (misbehave_corrupt_table_data_)
155 mf::LogError(
"MisbehaviorTest") <<
"Adding random data point";
156 output = artdaq::detail::RoutingPacketEntry(seedAndRandom(), rand());
158 if (misbehave_overload_event_builder_)
160 output = artdaq::detail::RoutingPacketEntry(seq, tokens_.front());
162 if (seq > misbehave_until_)
164 misbehave_until_ = seq + 100;
170 auto dest = tokens_.front();
171 output = artdaq::detail::RoutingPacketEntry(seq, dest);
173 tokens_used_since_last_update_++;
void CreateRoutingTable(artdaq::detail::RoutingPacket &table) override
Use the current tokens to add entries to the routing table.
artdaq::detail::RoutingPacketEntry CreateRouteForSequenceID(artdaq::Fragment::sequence_id_t seq, int requesting_rank) override
Using the existing tokens, determine a route for a given Sequence ID.
A test RoutingManagerPolicy which does various "bad" things, determined by configuration.
MisbehaviorTest(const fhicl::ParameterSet &ps)
MisbehaviorTest Constructor.
~MisbehaviorTest() override=default
MisbehaviorTest default Destructor.