8 #include "TRACE/tracemf.h"
9 #define TRACE_NAME "RequestSenderModule"
11 #include "art/Framework/Core/EDAnalyzer.h"
12 #include "art/Framework/Core/ModuleMacros.h"
13 #include "art/Framework/Principal/Event.h"
14 #include "art/Framework/Principal/Handle.h"
15 #include "art/Framework/Principal/Run.h"
17 #include "artdaq-core/Data/ContainerFragment.hh"
18 #include "artdaq-core/Data/Fragment.hh"
19 #include "artdaq/DAQrate/detail/RequestSender.hh"
24 class RequestSenderModule;
51 void analyze(art::Event
const& evt)
override;
57 void beginRun(art::Run
const& run)
override;
62 void endRun(art::Run
const& run)
override;
71 std::set<artdaq::Fragment::sequence_id_t> active_requests_;
72 size_t max_active_requests_;
74 void clear_active_requests();
75 void trim_active_requests();
81 , max_active_requests_(pset.get<size_t>(
"request_list_max_size", 1000))
92 std::vector<art::Handle<std::vector<artdaq::Fragment>>> fragmentHandles;
93 fragmentHandles = evt.getMany<std::vector<artdaq::Fragment>>();
95 artdaq::Fragment::sequence_id_t seq = 0;
96 artdaq::Fragment::timestamp_t timestamp = 0;
98 for (
auto& handle : fragmentHandles)
100 if (!handle.isValid())
continue;
102 auto frag = handle->at(0);
103 seq = frag.sequenceID();
104 timestamp = frag.timestamp();
106 if (seq != 0 && timestamp != 0)
break;
109 if (seq != 0 && timestamp != 0)
111 TLOG(TLVL_DEBUG + 35) <<
"Adding request for sequence ID " << seq <<
", timestamp " << timestamp;
112 the_sender_.AddRequest(seq, timestamp);
113 active_requests_.insert(seq);
114 trim_active_requests();
120 the_sender_.SetRunNumber(run.run());
122 clear_active_requests();
128 the_sender_.SendRequest();
129 clear_active_requests();
132 void artdaq::RequestSenderModule::clear_active_requests()
134 for (
auto& req : active_requests_)
136 the_sender_.RemoveRequest(req);
140 void artdaq::RequestSenderModule::trim_active_requests()
142 TLOG(TLVL_DEBUG + 33) <<
"Going to remove extra active requests";
143 while (active_requests_.size() > max_active_requests_)
145 TLOG(TLVL_DEBUG + 36) <<
"Removing request with sequence ID " << *active_requests_.begin();
146 the_sender_.RemoveRequest(*active_requests_.begin());
147 active_requests_.erase(active_requests_.begin());
void endRun(art::Run const &run) override
PErform end Run actions.
End of Run mode (Used to end request processing on receiver)
The RequestSender contains methods used to send data requests and Routing tokens. ...
RequestSenderModule(fhicl::ParameterSet const &pset)
RequestSender Constructor.
An art::EDAnalyzer module which sends requests for events (e.g. for the Mu2e CRV system) ...
void analyze(art::Event const &evt) override
Analyze each event, using the configured mode bitmask.
~RequestSenderModule() override
Virtual Destructor. Shuts down MetricManager if one is present.
void beginRun(art::Run const &run) override
Perform begin Run actions.