1 #define TRACE_NAME "RoutingManagerPolicy"
3 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
4 #include "fhiclcpp/ParameterSet.h"
10 auto receiver_ranks = ps.get<std::vector<int>>(
"receiver_ranks");
11 receiver_ranks_.insert(receiver_ranks.begin(), receiver_ranks.end());
16 if (receiver_ranks_.count(rank) == 0u)
20 TLOG(10) <<
"AddReceiverToken BEGIN";
21 std::unique_lock<std::mutex> lk(tokens_mutex_);
22 if (new_slots_free == 1)
24 tokens_.push_back(rank);
30 for (
unsigned i = 0; i < new_slots_free; ++i)
32 auto it = tokens_.begin();
35 std::advance(it, rand() % tokens_.size());
37 tokens_.insert(it, rank);
40 if (tokens_.size() > max_token_count_)
42 max_token_count_ = tokens_.size();
44 TLOG(10) <<
"AddReceiverToken END";
49 TLOG(10) <<
"getTokensSnapshot BEGIN";
50 std::unique_lock<std::mutex> lk(tokens_mutex_);
51 auto out = std::make_unique<std::deque<int>>(tokens_);
53 TLOG(10) <<
"getTokensSnapshot END";
59 std::unique_lock<std::mutex> lk(tokens_mutex_);
60 for (
auto token = tokens->rbegin(); token != tokens->rend(); ++token)
62 tokens_.push_front(*token);
64 if (tokens_.size() > max_token_count_)
66 max_token_count_ = tokens_.size();
72 next_sequence_id_ = 1;
73 std::unique_lock<std::mutex> lk(tokens_mutex_);
void AddReceiverToken(int rank, unsigned new_slots_free)
Add a token to the token list.
void Reset()
Reset the policy, setting the next sequence ID to be used to 1, and removing any tokens.
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.
RoutingManagerPolicy(const fhicl::ParameterSet &ps)
RoutingManagerPolicy Constructor.