Project

General

Profile

Idea #18266

Come up with concept of failure to fulfill request

Added by John Freeman almost 2 years ago. Updated almost 2 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
11/14/2017
Due date:
% Done:

0%

Estimated time:
Experiment:
-
Duration:

Description

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 messageNew11/12/2017

History

#1 Updated by John Freeman almost 2 years ago

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

#2 Updated by Kurt Biery almost 2 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
sendEmptyFragments(frags);
}


Also available in: Atom PDF