1 #define TRACE_NAME "RoutingMasterPolicy"
3 #include "artdaq/RoutingPolicies/RoutingMasterPolicy.hh"
4 #include "fhiclcpp/ParameterSet.h"
11 auto receiver_ranks = ps.get<std::vector<int>>(
"receiver_ranks");
12 receiver_ranks_.insert(receiver_ranks.begin(), receiver_ranks.end());
17 if (!receiver_ranks_.count(rank))
return;
18 TLOG(10) <<
"AddReceiverToken BEGIN" ;
19 std::unique_lock<std::mutex> lk(tokens_mutex_);
20 if (new_slots_free == 1)
22 tokens_.push_back(rank);
28 for (
unsigned i = 0; i < new_slots_free; ++i)
30 auto it = tokens_.begin();
31 if(tokens_.size()) std::advance(it, rand() % tokens_.size());
32 tokens_.insert(it, rank);
35 if (tokens_.size() > max_token_count_) max_token_count_ = tokens_.size();
36 TLOG(10) <<
"AddReceiverToken END" ;
41 TLOG(10) <<
"getTokensSnapshot BEGIN" ;
42 std::unique_lock<std::mutex> lk(tokens_mutex_);
43 auto out = std::make_unique<std::deque<int>>(tokens_);
45 TLOG(10) <<
"getTokensSnapshot END" ;
51 std::unique_lock<std::mutex> lk(tokens_mutex_);
52 for (
auto token = tokens.get()->rbegin(); token != tokens.get()->rend(); ++token)
54 tokens_.push_front(*token);
56 if (tokens_.size() > max_token_count_) max_token_count_ = tokens_.size();
61 next_sequence_id_ = 1;
62 std::unique_lock<std::mutex> lk(tokens_mutex_);
void AddReceiverToken(int rank, unsigned new_slots_free)
Add a token to the token list.
std::unique_ptr< std::deque< int > > getTokensSnapshot()
Gets the current token list, used for building Routing Tables.
void Reset()
Reset the policy, setting the next sequence ID to be used to 1, and removing any tokens.
void addUnusedTokens(std::unique_ptr< std::deque< int >> tokens)
If necessary, return unused tokens to the token list, for subsequent updates.
RoutingMasterPolicy(fhicl::ParameterSet ps)
RoutingMasterPolicy Constructor.