From 5279ede3efd7b9742ff6a0af5e2d3ac1f968da4f Mon Sep 17 00:00:00 2001 From: Kurt Biery Date: Tue, 14 Jul 2026 11:18:55 -0500 Subject: [PATCH 1/2] Merge pull request #35 from DUNE-DAQ/dte/lb_write_returns_iterator LB write returns iterator to the element --- .../readout/detail/SNBDataHandlingModel.hxx | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/include/snbmodules/readout/detail/SNBDataHandlingModel.hxx b/include/snbmodules/readout/detail/SNBDataHandlingModel.hxx index 585ce7e..cc93ae9 100644 --- a/include/snbmodules/readout/detail/SNBDataHandlingModel.hxx +++ b/include/snbmodules/readout/detail/SNBDataHandlingModel.hxx @@ -55,6 +55,16 @@ SNBDataHandlingModel::init(const appmodel::DataHandlerM m_post_processing_delay_min_wait = mcfg->get_module_configuration()->get_post_processing_delay_min_wait(); m_post_processing_delay_max_wait = mcfg->get_module_configuration()->get_post_processing_delay_max_wait(); + if (m_processing_delay_ticks) { + if constexpr (datahandlinglibs::ExpectsOrder) { + ers::error(datahandlinglibs::ConfigurationError( + ERS_HERE, + m_sourceid, + "Queue buffers (FixedRateQueue, BinarySearchQueue) expect in-order data and must use " + "post_processing_delay_ticks = 0.")); + } + } + // Configure implementations: m_raw_processor_impl->conf(mcfg); // Configure the latency buffer before the request handler so the request handler can check for alignment @@ -226,15 +236,27 @@ SNBDataHandlingModel::process_item(RDT&& payload) while (m_latency_buffer_impl->isFull()) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } - if (!m_latency_buffer_impl->write(std::move(payload))) { - // TLOG_DEBUG(TLVL_TAKE_NOTE) << "***ERROR: Latency buffer insert failed! (Payload timestamp=" << - // payload.get_timestamp() << ")"; - m_num_lb_insert_failures++; - return; + + const RDT* written = nullptr; + if constexpr (datahandlinglibs::ExpectsOrder) { + if (!m_latency_buffer_impl->write(std::move(payload))) { + // TLOG_DEBUG(TLVL_TAKE_NOTE) << "***ERROR: Latency buffer insert failed! (Payload timestamp=" << payload.get_timestamp() << ")"; + m_num_lb_insert_failures++; + return; + } + written = m_latency_buffer_impl->back(); + } else { + const auto [returned, result] = m_latency_buffer_impl->write_and_return(std::move(payload)); + if (!result) { + // TLOG_DEBUG(TLVL_TAKE_NOTE) << "***ERROR: Latency buffer insert failed! (Payload timestamp=" << payload.get_timestamp() << ")"; + m_num_lb_insert_failures++; + return; + } + written = returned; } if (m_processing_delay_ticks == 0) { - m_raw_processor_impl->postprocess_item(m_latency_buffer_impl->back()); + m_raw_processor_impl->postprocess_item(written); ++m_num_payloads; ++m_sum_payloads; ++m_stats_packet_count; From 46f635b6cb43328826afb21a8077c9561fbbe85d Mon Sep 17 00:00:00 2001 From: Kurt Biery Date: Tue, 14 Jul 2026 11:21:00 -0500 Subject: [PATCH 2/2] Updated version number to 2.1.1 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3715317..da0ad94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.12) -project(snbmodules VERSION 2.1.0) +project(snbmodules VERSION 2.1.1) find_package(daq-cmake REQUIRED)