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/RoutingMasterPolicy.hh"
7 #include "fhiclcpp/ParameterSet.h"
27 , minimum_participants_(ps.get<int>(
"minimum_participants", 0))
47 int minimum_participants_;
52 TLOG(12) <<
"RoundRobinPolicy::GetCurrentTable start";
54 TLOG(13) <<
"RoundRobinPolicy::GetCurrentTable token list size is " << tokens->size();
55 std::map<int, int> table;
56 for (
auto token : *tokens.get())
58 TLOG(14) <<
"RoundRobinPolicy::GetCurrentTable adding token for rank " << token <<
" to table";
62 TLOG(13) <<
"RoundRobinPolicy::GetCurrentTable table size is " << table.size() <<
", token list size is " << tokens->size();
71 int minimum = minimum_participants_ > 0 ? minimum_participants_ :
GetReceiverCount() + minimum_participants_;
72 if (minimum < 1) minimum = 1;
75 bool endCondition = table.size() <
static_cast<size_t>(minimum);
76 TLOG(15) <<
"RoundRobinPolicy::GetCurrentTable initial endCondition is " << endCondition <<
", minimum is " << minimum;
80 for (
auto it = table.begin(); it != table.end();)
82 TLOG(16) <<
"RoundRobinPolicy::GetCurrentTable assigning sequenceID " <<
next_sequence_id_ <<
" to rank " << it->first;
86 if (table[it->first] <= 0)
91 endCondition = table.size() <
static_cast<size_t>(minimum);
96 for (
auto i = 0; i < r.second; ++i)
98 tokens->push_back(r.first);
101 TLOG(13) <<
"RoundRobinPolicy::GetCurrentTable unused tokens for " << tokens->size() <<
" ranks will be saved for later";
104 TLOG(12) <<
"RoundRobinPolicy::GetCurrentTable return with table size " << output.size();
A row of the Routing Table.
A RoutingMasterPolicy which evenly distributes Sequence IDs to all receivers. If an uneven number of ...
virtual ~RoundRobinPolicy()=default
Default virtual Destructor.
The interface through which RoutingMasterCore obtains Routing Tables using received Routing Tokens...
detail::RoutingPacket GetCurrentTable() override
Create a Routing Table using the tokens that have been received.
std::vector< RoutingPacketEntry > RoutingPacket
A RoutingPacket is simply a vector of RoutingPacketEntry objects. It is not suitable for network tran...
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.
void addUnusedTokens(std::unique_ptr< std::deque< int >> tokens)
If necessary, return unused tokens to the token list, for subsequent updates.
RoundRobinPolicy(fhicl::ParameterSet ps)
RoundRobinPolicy Constructor.
size_t GetReceiverCount() const
Get the number of configured receivers.