Idea #18266

Come up with concept of failure to fulfill request

Added by John Freeman over 3 years ago. Updated over 1 year ago.

Target version:
Start date:
Due date:
% Done:


Estimated time:


In Idea #18210, Kurt makes the point that there should be a warning or error in CommandableFragmentGenerator::applyReqeusts when a request isn't fulfilled after a predetermined amount of time for a fragment generator running in window request mode: "I believe that the comparison that should be used when checking if it has been "too long" since a request has been fulfilled is between "now" and the time of the fragment request from the event builder".

To do this, we need a concept of what it means to fail to satisfy a request which has been received by the boardreader. In artdaq v2_03_03, the logic of applyRequests is such that if we have a request whose sequence ID matches CommandableFragmentGenerator::ev_counter(), we take all data fragments whose timestamps lie within the time window of the request, put them in a container fragment, and send the container fragment downstream. However, if there aren't any data fragments, that's not considered to be a problem - the container fragment is sent downstream without containing any fragments, and no warning is printed. One idea would be to require that there be at least one data fragment which lies in the time window of a request in order for the request to be considered satisfied - but there are other requirements we could put in place as well. Hopefully this gets some discussion started...

Related issues

Related to artdaq - Idea #18210: Non-pathological low request rate results in error messageClosed11/12/2017


#1 Updated by John Freeman over 3 years ago

  • Related to Idea #18210: Non-pathological low request rate results in error message added

#2 Updated by Kurt Biery over 3 years ago

I took a look at CommandableFragmentGenerator::applyRequests, and I can't figure out how the following section of code determines that a request has been missed.

if (mode_  RequestMode::Buffer || static_cast<size_t>(std::chrono::duration_cast<std::chrono:\
:microseconds>(std::chrono::steady_clock::now() - last_window_send_time_).count()) > missing_request_window_timeout_us_\
) {
if (mode_ RequestMode::Window) {
TLOG_ERROR("CommandableFragmentGenerator") << "Data-taking has paused for " << \
std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(std::chrono::steady_clock::now() - last_window_send_time_).count(\
) << " us "
<< "(> " << std::to_string(missing_request_window_timeout_us_) << " us)\
while waiting for missing data request messages." << " Sending Empty Fragments for missing requests!" << TLOG_ENDL;
} // else, Buffer mode, where it only makes sense to send for the last request

#3 Updated by Eric Flumerfelt over 1 year ago

  • Status changed from New to Closed

Since this issue was opened, error messages have been added in addition to much more flexibility in CommandableFragmentGenerator's request processing logic. Closing.

Also available in: Atom PDF