1 #include "artdaq/DAQdata/Globals.hh"
2 #define TRACE_NAME (app_name + "_RoundRobin_policy").c_str()
4 #include "artdaq/RoutingPolicies/PolicyMacros.hh"
5 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
7 #include "fhiclcpp/ParameterSet.h"
27 , minimum_participants_(ps.get<int>(
"minimum_participants", 0))
52 int minimum_participants_;
57 TLOG(12) <<
"RoundRobinPolicy::GetCurrentTable start";
59 TLOG(13) <<
"RoundRobinPolicy::GetCurrentTable token list size is " << tokens->size();
60 std::map<int, int> table;
61 for (
auto token : *tokens)
63 TLOG(14) <<
"RoundRobinPolicy::GetCurrentTable adding token for rank " << token <<
" to table";
67 TLOG(13) <<
"RoundRobinPolicy::GetCurrentTable table size is " << table.size() <<
", token list size is " << tokens->size();
76 int minimum = minimum_participants_ > 0 ? minimum_participants_ :
GetReceiverCount() + minimum_participants_;
86 bool endCondition = table.size() <
static_cast<size_t>(minimum);
87 TLOG(15) <<
"RoundRobinPolicy::GetCurrentTable initial endCondition is " << endCondition <<
", minimum is " << minimum;
91 for (
auto it = table.begin(); it != table.end();)
93 TLOG(16) <<
"RoundRobinPolicy::GetCurrentTable assigning sequenceID " <<
next_sequence_id_ <<
" to rank " << it->first;
97 if (table[it->first] <= 0)
106 endCondition = table.size() <
static_cast<size_t>(minimum);
111 for (
auto i = 0; i < r.second; ++i)
113 tokens->push_back(r.first);
116 TLOG(13) <<
"RoundRobinPolicy::GetCurrentTable unused tokens for " << tokens->size() <<
" ranks will be saved for later";
119 TLOG(12) <<
"RoundRobinPolicy::GetCurrentTable return with table size " << output.size();
~RoundRobinPolicy() override=default
Default virtual Destructor.
A row of the Routing Table.
A RoutingManagerPolicy which evenly distributes Sequence IDs to all receivers. If an uneven number of...
Fragment::sequence_id_t next_sequence_id_
The next sequence ID to be assigned.
std::unique_ptr< std::deque< int > > getTokensSnapshot()
Gets the current token list, used for building Routing Tables.
The interface through which RoutingManagerCore obtains Routing Tables using received Routing Tokens...
detail::RoutingPacket GetCurrentTable() override
Create a Routing Table using the tokens that have been received.
void addUnusedTokens(std::unique_ptr< std::deque< int >> tokens)
If necessary, return unused tokens to the token list, for subsequent updates.
std::vector< RoutingPacketEntry > RoutingPacket
A RoutingPacket is simply a vector of RoutingPacketEntry objects. It is not suitable for network tran...
size_t GetReceiverCount() const
Get the number of configured receivers.
RoundRobinPolicy(const fhicl::ParameterSet &ps)
RoundRobinPolicy Constructor.