artdaq  v3_09_01
RoutingManagerPolicy.hh
1 #ifndef artdaq_Application_Routing_RoutingManagerPolicy_hh
2 #define artdaq_Application_Routing_RoutingManagerPolicy_hh
3 
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "artdaq/DAQdata/Globals.hh"
6 #include "artdaq/DAQrate/detail/RoutingPacket.hh"
7 
8 #include <deque>
9 #include <mutex>
10 #include <unordered_set>
11 #include "fhiclcpp/fwd.h"
12 
13 namespace artdaq {
18 {
19 public:
29  explicit RoutingManagerPolicy(const fhicl::ParameterSet& ps);
33  virtual ~RoutingManagerPolicy() = default;
34 
42 
47  size_t GetReceiverCount() const { return receiver_ranks_.size(); }
48 
53  size_t GetMaxNumberOfTokens() const { return max_token_count_; }
54 
60  void AddReceiverToken(int rank, unsigned new_slots_free);
61 
65  void Reset();
66 
67 protected:
68  Fragment::sequence_id_t next_sequence_id_;
69 
70  std::unique_ptr<std::deque<int>> getTokensSnapshot();
71  void addUnusedTokens(std::unique_ptr<std::deque<int>> tokens);
72 private:
75  RoutingManagerPolicy& operator=(RoutingManagerPolicy const&) = delete;
76  RoutingManagerPolicy& operator=(RoutingManagerPolicy&&) = delete;
77 
78  mutable std::mutex tokens_mutex_;
79  std::unordered_set<int> receiver_ranks_;
80  std::deque<int> tokens_;
81  std::atomic<size_t> max_token_count_;
82 };
83 } // namespace artdaq
84 
85 #endif // artdaq_Application_Routing_RoutingManagerPolicy_hh
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.
size_t GetMaxNumberOfTokens() const
Get the largest number of tokens that the RoutingManagerPolicy has seen at any one time...
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...
virtual ~RoutingManagerPolicy()=default
Default virtual Destructor.
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...
virtual detail::RoutingPacket GetCurrentTable()=0
Generate a Routing Table using received tokens.
RoutingManagerPolicy(const fhicl::ParameterSet &ps)
RoutingManagerPolicy Constructor.
size_t GetReceiverCount() const
Get the number of configured receivers.