@@ -42,64 +42,14 @@ SocketWriterModule::SocketWriterModule(const std::string& name)
4242 register_command (" stop_trigger_sources" , &SocketWriterModule::do_stop);
4343}
4444
45- void
46- SocketWriterModule::get_dal_inputs (const dunedaq::appmodel::SocketDataWriterModule* mdal)
47- {
48- if (mdal->get_inputs ().empty ()) {
49- auto err = dunedaq::datahandlinglibs::InitializationError (ERS_HERE,
50- " No inputs defined for socket writer in configuration." );
51- ers::fatal (err);
52- throw err;
53- }
54-
55- for (auto * input : mdal->get_inputs ()) {
56- m_raw_data_receiver_connection_name = input->UID ();
57- // Parse for prefix
58- std::string conn_name = input->UID ();
59- const char delim = ' _' ;
60- std::vector<std::string> words;
61- std::size_t start;
62- std::size_t end = 0 ;
63- while ((start = conn_name.find_first_not_of (delim, end)) != std::string::npos) {
64- end = conn_name.find (delim, start);
65- words.push_back (conn_name.substr (start, end - start));
66- }
67-
68- TLOG_DEBUG () << " Initialize connection based on uid: "
69- << m_raw_data_receiver_connection_name << " front word: " << words.front ();
70-
71- std::string cb_prefix (" cb" );
72- if (words.front () == cb_prefix) {
73- m_callback_mode = true ;
74- }
75-
76- if (!m_callback_mode) {
77- const auto recv_timeout_ms = input->get_recv_timeout_ms ();
78- if (recv_timeout_ms == 0 ) {
79- ers::warning (InvalidRawReceiverTimeout (ERS_HERE, m_raw_receiver_timeout_ms.count ()));
80- } else {
81- m_raw_receiver_timeout_ms = std::chrono::milliseconds (recv_timeout_ms);
82- }
83- }
84-
85- auto * queue = input->cast <confmodel::QueueWithSourceId>();
86- if (queue == nullptr ) {
87- auto err = dunedaq::datahandlinglibs::InitializationError (ERS_HERE, " Inputs are not of type QueueWithGeoId." );
88- ers::fatal (err);
89- throw err;
90- }
91-
92- m_raw_data_receiver = createGenericReceiver (queue->UID (), m_raw_data_receiver_connection_name); // FIXME (DTE): Overwriting doesn't make sense
93- }
94- }
95-
9645void
9746SocketWriterModule::init (const std::shared_ptr<appfwk::ConfigurationManager> mcfg)
9847{
9948 m_cfg = mcfg;
10049 auto * mdal = m_cfg->get_dal <appmodel::SocketDataWriterModule>(get_name ());
10150 auto * module_conf = mdal->get_configuration ()->cast <appmodel::SocketWriterConf>();
10251
52+ m_callback_conf = mdal->get_raw_data_callback ();
10353 const auto remote_ip = module_conf->get_remote_ip ();
10454
10555 m_socket_type = string_to_socket_type (module_conf->get_socket_type ());
@@ -113,7 +63,7 @@ SocketWriterModule::init(const std::shared_ptr<appfwk::ConfigurationManager> mcf
11363 }
11464
11565 for (auto * nw_sender : d2d_conn->get_net_senders ()) {
116-
66+
11767 if (nw_sender->is_disabled (*(m_cfg->get_session ()))) {
11868 continue ;
11969 }
@@ -148,13 +98,11 @@ SocketWriterModule::init(const std::shared_ptr<appfwk::ConfigurationManager> mcf
14898 }
14999 }
150100
151- get_dal_inputs (mdal);
152-
153101 // Raw input connection sensibility check
154- if (!m_callback_mode && m_raw_data_receiver == nullptr ) {
155- TLOG () << " Non callback mode, and receiver is unset !" ;
156- // ers::error(ConfigurationError(ERS_HERE, m_sourceid, "Non callback mode, and receiver is unset !"));
157- }
102+ if (m_callback_conf == nullptr ) {
103+ TLOG () << " No callback configuration given !" ;
104+ // ers::error(ConfigurationError(ERS_HERE, m_sourceid, No callback configuration given !"));
105+ }
158106}
159107
160108SocketWriterModule::SocketType
@@ -168,26 +116,6 @@ SocketWriterModule::string_to_socket_type(const std::string& socket_type) const
168116 return SocketWriterModule::SocketType::INVALID;
169117}
170118
171- void
172- SocketWriterModule::run_consume ()
173- {
174- TLOG () << " Consumer thread started..." ; // TODO (DTE): Make debug logs
175-
176- while (m_run_marker.load ()) {
177- // Try to acquire data
178-
179- if (auto opt_payload = m_raw_data_receiver->try_receive (m_raw_receiver_timeout_ms)) {
180- consume_payload (std::move (*opt_payload));
181- } else {
182- for (const auto & writer_config : m_writer_configs) {
183- ++writer_config.socket_stats ->rawq_timeout_count ;
184- }
185- }
186- }
187-
188- TLOG () << " Consumer thread joins... " ;
189- }
190-
191119void
192120SocketWriterModule::consume_payload (GenericReceiverConcept::TypeErasedPayload payload)
193121{
@@ -201,15 +129,12 @@ SocketWriterModule::consume_payload(GenericReceiverConcept::TypeErasedPayload pa
201129void
202130SocketWriterModule::do_configure (const CommandData_t&)
203131{
204- // Register callbacks if operating in that mode.
205- if (m_callback_mode) {
206132 // Configure and register consume callback
207133 m_consume_callback = std::bind (&SocketWriterModule::consume_payload, this , std::placeholders::_1);
208-
134+
209135 // Register callback
210136 auto dmcbr = datahandlinglibs::DataMoveCallbackRegistry::get ();
211- dmcbr->register_callback <GenericReceiverConcept::TypeErasedPayload>(m_raw_data_receiver_connection_name, m_consume_callback);
212- }
137+ dmcbr->register_callback <GenericReceiverConcept::TypeErasedPayload>(m_callback_conf, m_consume_callback);
213138
214139 for (std::size_t i = 0 ; i < m_writers.size (); ++i) {
215140 const auto & writer_config = m_writer_configs[i];
@@ -229,26 +154,14 @@ SocketWriterModule::do_start(const CommandData_t&)
229154 writer_config.socket_stats ->stats_packet_count = 0 ;
230155 }
231156
232- m_t0 = std::chrono::high_resolution_clock::now ();
233-
234- if (!m_callback_mode) {
235- m_run_marker.store (true );
236- m_consumer_thread.set_work (&SocketWriterModule::run_consume, this );
237- }
157+ m_t0 = std::chrono::steady_clock::now ();
238158
239159 m_io_thread = std::jthread ([this ] { m_io_context.run (); });
240160}
241161
242162void
243163SocketWriterModule::do_stop (const CommandData_t&)
244164{
245- if (!m_callback_mode) {
246- m_run_marker.store (false );
247- while (!m_consumer_thread.get_readiness ()) {
248- std::this_thread::sleep_for (std::chrono::milliseconds (10 ));
249- }
250- }
251-
252165 for (auto & writer : m_writers) {
253166 std::visit ([](auto & writer) { writer.stop (); }, writer);
254167 }
@@ -266,7 +179,7 @@ SocketWriterModule::generate_opmon_data()
266179 stats.set_sum_bytes (writer_config.socket_stats ->sum_bytes .load ());
267180 stats.set_num_data_input_timeouts (writer_config.socket_stats ->rawq_timeout_count .exchange (0 ));
268181
269- auto now = std::chrono::high_resolution_clock ::now ();
182+ auto now = std::chrono::steady_clock ::now ();
270183 int new_packets = writer_config.socket_stats ->stats_packet_count .exchange (0 );
271184 double seconds = std::chrono::duration_cast<std::chrono::microseconds>(now - m_t0).count () / 1000000 .;
272185 m_t0 = now;
@@ -341,7 +254,7 @@ SocketWriterModule::UDPWriter::start(GenericReceiverConcept::TypeErasedPayload p
341254 ++m_writer_config.socket_stats ->num_payloads ;
342255 ++m_writer_config.socket_stats ->sum_payloads ;
343256 m_writer_config.socket_stats ->sum_bytes .fetch_add (bytes_sent);
344- ++m_writer_config.socket_stats ->stats_packet_count ;
257+ ++m_writer_config.socket_stats ->stats_packet_count ;
345258}
346259
347260void
0 commit comments