1 #ifndef artdaq_Application_MPI2_RoutingMasterCore_hh
2 #define artdaq_Application_MPI2_RoutingMasterCore_hh
8 #include <netinet/in.h>
11 #include "fhiclcpp/ParameterSet.h"
12 #include "canvas/Persistency/Provenance/RunID.h"
14 #include "artdaq-utilities/Plugins/MetricManager.hh"
16 #include "artdaq/DAQrate/StatisticsHelper.hh"
17 #include "artdaq/DAQrate/detail/RoutingPacket.hh"
18 #include "artdaq/RoutingPolicies/RoutingMasterPolicy.hh"
19 #include "artdaq/DAQrate/detail/FragCounter.hh"
20 #include "artdaq/DAQrate/TokenReceiver.hh"
24 class RoutingMasterCore;
81 bool initialize(fhicl::ParameterSet
const& pset, uint64_t, uint64_t);
88 bool start(art::RunID
id, uint64_t, uint64_t);
94 bool stop(uint64_t, uint64_t);
100 bool pause(uint64_t, uint64_t);
106 bool resume(uint64_t, uint64_t);
121 bool soft_initialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
130 bool reinitialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
155 std::string
report(std::string
const&)
const;
166 fhicl::ParameterSet policy_pset_;
167 fhicl::ParameterSet token_receiver_pset_;
170 size_t max_table_update_interval_ms_;
171 size_t max_ack_cycle_count_;
173 std::atomic<size_t> current_table_interval_ms_;
174 std::atomic<size_t> table_update_count_;
176 std::vector<int> sender_ranks_;
178 std::shared_ptr<RoutingMasterPolicy> policy_;
179 std::unique_ptr<TokenReceiver> token_receiver_;
181 std::atomic<bool> shutdown_requested_;
182 std::atomic<bool> stop_requested_;
183 std::atomic<bool> pause_requested_;
186 std::shared_ptr<artdaq::StatisticsHelper> statsHelperPtr_;
188 std::string buildStatisticsString_()
const;
195 int send_tables_port_;
196 int receive_acks_port_;
197 std::string send_tables_address_;
198 std::string multicast_out_hostname_;
199 struct sockaddr_in send_tables_addr_;
200 std::vector<epoll_event> receive_ack_events_;
205 mutable std::mutex request_mutex_;
bool resume(uint64_t, uint64_t)
Resumes the RoutingMasterCore.
RoutingMasterMode
Mode indicating whether the RoutingMaster is routing events by Sequence ID or by Send Count...
bool soft_initialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Soft-Initializes the RoutingMasterCore.
static const std::string TOKENS_RECEIVED_STAT_KEY
Key for the Tokens Received MonitoredQuantity.
bool reinitialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Reinitializes the RoutingMasterCore.
RoutingMasterCore & operator=(RoutingMasterCore const &)=delete
Copy Assignment operator is deleted.
bool start(art::RunID id, uint64_t, uint64_t)
Start the RoutingMasterCore.
RoutingMasterCore()
RoutingMasterCore Constructor.
bool initialize(fhicl::ParameterSet const &pset, uint64_t, uint64_t)
Processes the initialize request.
size_t get_update_count() const
Get the number of table updates sent by this RoutingMaster this run.
bool pause(uint64_t, uint64_t)
Pauses the RoutingMasterCore.
std::vector< RoutingPacketEntry > RoutingPacket
A RoutingPacket is simply a vector of RoutingPacketEntry objects. It is not suitable for network tran...
bool stop(uint64_t, uint64_t)
Stops the RoutingMasterCore.
std::string report(std::string const &) const
Send a report on the current status of the RoutingMasterCore.
static const std::string TABLE_UPDATES_STAT_KEY
Key for Table Update count MonnitoredQuantity.
bool shutdown(uint64_t)
Shuts Down the RoutingMasterCore.
RoutingMasterCore implements the state machine for the RoutingMaster artdaq application. RoutingMasterCore collects tokens from receivers, and at regular intervals uses these tokens to build Routing Tables that are sent to the senders.
void process_event_table()
Main loop of the RoutingMasterCore. Determines when to send the next table update, asks the RoutingMasterPolicy for the table to send, and sends it.
void send_event_table(detail::RoutingPacket table)
Sends a detail::RoutingPacket to the table receivers.