artdaq  v3_00_01
artdaq::SharedMemoryEventManager Class Reference

The SharedMemoryEventManager is a SharedMemoryManger which tracks events as they are built. More...

#include <artdaq/DAQrate/SharedMemoryEventManager.hh>

Inheritance diagram for artdaq::SharedMemoryEventManager:

Public Types

typedef RawEvent::run_id_t run_id_t
 Copy RawEvent::run_id_t into local scope.
 
typedef RawEvent::subrun_id_t subrun_id_t
 Copy RawEvent::subrun_id_t into local scope.
 
typedef Fragment::sequence_id_t sequence_id_t
 Copy Fragment::sequence_id_t into local scope.
 
typedef std::map
< sequence_id_t, RawEvent_ptr > 
EventMap
 An EventMap is a map of RawEvent_ptr objects, keyed by sequence ID.
 

Public Member Functions

 SharedMemoryEventManager (fhicl::ParameterSet pset, fhicl::ParameterSet art_pset)
 SharedMemoryEventManager Constructor. More...
 
virtual ~SharedMemoryEventManager ()
 SharedMemoryEventManager Destructor.
 
bool AddFragment (FragmentPtr frag, size_t timeout_usec, FragmentPtr &outfrag)
 Copy a Fragment into the SharedMemoryEventManager. More...
 
RawDataType * WriteFragmentHeader (detail::RawFragmentHeader frag, bool dropIfNoBuffersAvailable=false)
 Get a pointer to a reserved memory area for the given Fragment header. More...
 
void DoneWritingFragment (detail::RawFragmentHeader frag)
 Used to indicate that the given Fragment is now completely in the buffer. Will check for buffer completeness, and unset the pending flag. More...
 
size_t GetIncompleteEventCount ()
 Returns the number of buffers which contain data but are not yet complete. More...
 
size_t GetPendingEventCount ()
 Returns the number of events which are complete but waiting on lower sequenced events to finish. More...
 
size_t GetLockedBufferCount ()
 Returns the number of buffers currently owned by this manager. More...
 
size_t GetArtEventCount ()
 Returns the number of events sent to art this subrun. More...
 
size_t GetFragmentCount (Fragment::sequence_id_t seqID, Fragment::type_t type=Fragment::InvalidFragmentType)
 Get the count of Fragments of a given type in an event. More...
 
size_t GetFragmentCountInBuffer (int buffer, Fragment::type_t type=Fragment::InvalidFragmentType)
 Get the count of Fragments of a given type in a buffer. More...
 
void RunArt (std::shared_ptr< art_config_file > config_file, pid_t &pid_out)
 Run an art instance, recording the return codes and restarting it until the end flag is raised.
 
void StartArt ()
 Start all the art processes.
 
pid_t StartArtProcess (fhicl::ParameterSet pset)
 Start one art process. More...
 
void ShutdownArtProcesses (std::set< pid_t > pids)
 Shutdown a set of art processes. More...
 
void ReconfigureArt (fhicl::ParameterSet art_pset, run_id_t newRun=0, int n_art_processes=-1)
 Restart all art processes, using the given fhicl code to configure the new art processes. More...
 
bool endOfData ()
 Indicate that the end of input has been reached to the art processes. More...
 
void startRun (run_id_t runID)
 Start a Run. More...
 
void startSubrun ()
 Start a new Subrun, incrementing the subrun number.
 
run_id_t runID () const
 Get the current Run number. More...
 
subrun_id_t subrunID () const
 Get the current subrun number. More...
 
bool endRun ()
 Send an EndOfRunFragment to the art thread. More...
 
bool endSubrun ()
 Send an EndOfSubRunFragment to the art thread. More...
 
void sendMetrics ()
 Send metrics to the MetricManager, if one has been instantiated in the application.
 
void setRequestMode (detail::RequestMessageMode mode)
 Set the RequestMessageMode for all outgoing data requests. More...
 
void setOverwrite (bool overwrite)
 Set the overwrite flag (non-reliable data transfer) for the Shared Memory. More...
 
void SetInitFragment (FragmentPtr frag)
 Set the stored Init fragment, if one has not yet been set already.
 
uint32_t GetBroadcastKey ()
 Gets the shared memory key of the broadcast SharedMemoryManager. More...
 
RawDataType * GetDroppedDataAddress ()
 Gets the address of the "dropped data" fragment. Used for testing. More...
 

Detailed Description

The SharedMemoryEventManager is a SharedMemoryManger which tracks events as they are built.

Definition at line 61 of file SharedMemoryEventManager.hh.

Constructor & Destructor Documentation

artdaq::SharedMemoryEventManager::SharedMemoryEventManager ( fhicl::ParameterSet  pset,
fhicl::ParameterSet  art_pset 
)

SharedMemoryEventManager Constructor.

Parameters
psetParameterSet used to configure SharedMemoryEventManager
art_psetParameterSet used to configure art
* SharedMemoryEventManager accepts the following Parameters:
*
* "shared_memory_key" (Default 0xBEE70000 + PID): Key to use for shared memory access
* "buffer_count" REQUIRED: Number of events in the Shared Memory (incomplete + pending art)
* "max_event_size_bytes" REQUIRED: Maximum event size (all Fragments), in bytes
*  OR "max_fragment_size_bytes" REQURIED: Maximum Fragment size, in bytes
* "stale_buffer_timeout_usec" (Default: event_queue_wait_time * 1,000,000): Maximum amount of time elapsed before a buffer is marked as abandoned. Time is reset each time an operation is performed on the buffer.
* "event_queue_wait_time" (Default: 5): Amount of time (in seconds) an event can exist in shared memory before being released to art. Used as input to default parameter of "stale_buffer_timeout_usec".
* "broadcast_mode" (Default: false): When true, buffers are not marked Empty when read, but return to Full state. Buffers are overwritten in order received.
* "art_analyzer_count" (Default: 1): Number of art procceses to start
* "expected_fragments_per_event" (REQUIRED): Number of Fragments to expect per event
* "update_run_ids_on_new_fragment" (Default: true): Whether the run and subrun ID of an event should be updated whenever a Fragment is added.
* "use_art" (Default: true): Whether to start and manage art threads (Sets art_analyzer count to 0 and overwrite_mode to true when false)
* "overwite_mode" (Default: false): Whether new data is allowed to overwrite buffers in the "Full" state
* "send_init_fragments" (Default: true): Whether Init Fragments are expected to be sent to art. If true, a Warning message is printed when an Init Fragment is requested but none are available.
* "incomplete_event_report_interval_ms" (Default: -1): Interval at which an incomplete event report should be written
* A "Broadcast shared memmory segment" is used for all system-level fragments, such as Init, Start/End Run, Start/End Subrun and EndOfData
* "fragment_broadcast_timeout_ms" (Default: 3000): Amount of time broadcast fragments should live in the broadcast shared memory segment
* "broadcast_shared_memory_key" (Default: 0xCEE7000 + PID): Key to use for broadcast shared memory access
* "broadcast_buffer_count" (Default: 10): Buffers in the broadcast shared memory segment
* "broadcast_buffer_size" (Default: 0x100000): Size of the buffers in the broadcast shared memory segment
* 

Definition at line 7 of file SharedMemoryEventManager.cc.

Member Function Documentation

bool artdaq::SharedMemoryEventManager::AddFragment ( FragmentPtr  frag,
size_t  timeout_usec,
FragmentPtr &  outfrag 
)

Copy a Fragment into the SharedMemoryEventManager.

Parameters
fragFragmentPtr object
timeout_usecTimeout for adding Fragment to the Shared Memory
[out]outfragRejected Fragment if timeout occurs
Returns
Whether the Fragment was successfully added

Definition at line 118 of file SharedMemoryEventManager.cc.

void artdaq::SharedMemoryEventManager::DoneWritingFragment ( detail::RawFragmentHeader  frag)

Used to indicate that the given Fragment is now completely in the buffer. Will check for buffer completeness, and unset the pending flag.

Parameters
fragFragment that is now completely in the buffer.

Definition at line 173 of file SharedMemoryEventManager.cc.

bool artdaq::SharedMemoryEventManager::endOfData ( )

Indicate that the end of input has been reached to the art processes.

Returns
True if the end proceeded correctly

Put the end-of-data marker onto the RawEvent queue (if possible), wait for the reader function to exit, and fill in the reader return value. This scenario returns true. If the end-of-data marker can not be pushed onto the RawEvent queue, false is returned.

Definition at line 418 of file SharedMemoryEventManager.cc.

bool artdaq::SharedMemoryEventManager::endRun ( )

Send an EndOfRunFragment to the art thread.

Returns
True if enqueue successful

Definition at line 515 of file SharedMemoryEventManager.cc.

bool artdaq::SharedMemoryEventManager::endSubrun ( )

Send an EndOfSubRunFragment to the art thread.

Returns
True if enqueue successful

Definition at line 529 of file SharedMemoryEventManager.cc.

size_t artdaq::SharedMemoryEventManager::GetArtEventCount ( )
inline

Returns the number of events sent to art this subrun.

Returns
The number of events sent to art this subrun

Definition at line 159 of file SharedMemoryEventManager.hh.

uint32_t artdaq::SharedMemoryEventManager::GetBroadcastKey ( )
inline

Gets the shared memory key of the broadcast SharedMemoryManager.

Returns
The shared memory key of the broadcast SharedMemoryManager

Definition at line 279 of file SharedMemoryEventManager.hh.

RawDataType* artdaq::SharedMemoryEventManager::GetDroppedDataAddress ( )
inline

Gets the address of the "dropped data" fragment. Used for testing.

Returns
Pointer to the data payload of the "dropped data" fragment

Definition at line 285 of file SharedMemoryEventManager.hh.

size_t artdaq::SharedMemoryEventManager::GetFragmentCount ( Fragment::sequence_id_t  seqID,
Fragment::type_t  type = Fragment::InvalidFragmentType 
)

Get the count of Fragments of a given type in an event.

Parameters
seqIDSequence ID of Fragments
typeType of fragments to count. Use InvalidFragmentType to count all fragments (default)
Returns
Number of Fragments in event of given type

Definition at line 206 of file SharedMemoryEventManager.cc.

size_t artdaq::SharedMemoryEventManager::GetFragmentCountInBuffer ( int  buffer,
Fragment::type_t  type = Fragment::InvalidFragmentType 
)

Get the count of Fragments of a given type in a buffer.

Parameters
bufferBuffer to count
typeType of fragments to count. Use InvalidFragmentType to count all fragments (default)
Returns
Number of Fragments in buffer of given type

Definition at line 211 of file SharedMemoryEventManager.cc.

size_t artdaq::SharedMemoryEventManager::GetIncompleteEventCount ( )
inline

Returns the number of buffers which contain data but are not yet complete.

Returns
The number of buffers which contain data but are not yet complete

Definition at line 141 of file SharedMemoryEventManager.hh.

size_t artdaq::SharedMemoryEventManager::GetLockedBufferCount ( )
inline

Returns the number of buffers currently owned by this manager.

Returns
The number of buffers currently owned by this manager

Definition at line 153 of file SharedMemoryEventManager.hh.

size_t artdaq::SharedMemoryEventManager::GetPendingEventCount ( )
inline

Returns the number of events which are complete but waiting on lower sequenced events to finish.

Returns
The number of events which are complete but waiting on lower sequenced events to finish

Definition at line 147 of file SharedMemoryEventManager.hh.

void artdaq::SharedMemoryEventManager::ReconfigureArt ( fhicl::ParameterSet  art_pset,
run_id_t  newRun = 0,
int  n_art_processes = -1 
)

Restart all art processes, using the given fhicl code to configure the new art processes.

Parameters
art_psetParameterSet used to configure art
newRunNew Run number for reconfigured art
n_art_processesNumber of art processes to start, -1 (default) leaves the number unchanged

Definition at line 394 of file SharedMemoryEventManager.cc.

run_id_t artdaq::SharedMemoryEventManager::runID ( ) const
inline

Get the current Run number.

Returns
The current Run number

Definition at line 233 of file SharedMemoryEventManager.hh.

void artdaq::SharedMemoryEventManager::setOverwrite ( bool  overwrite)
inline

Set the overwrite flag (non-reliable data transfer) for the Shared Memory.

Parameters
overwriteWhether to allow the writer to overwrite data that has not yet been read

Definition at line 268 of file SharedMemoryEventManager.hh.

void artdaq::SharedMemoryEventManager::setRequestMode ( detail::RequestMessageMode  mode)
inline

Set the RequestMessageMode for all outgoing data requests.

Parameters
modeMode to set

Definition at line 262 of file SharedMemoryEventManager.hh.

void artdaq::SharedMemoryEventManager::ShutdownArtProcesses ( std::set< pid_t >  pids)

Shutdown a set of art processes.

Parameters
pidsPIDs of the art processes

Definition at line 313 of file SharedMemoryEventManager.cc.

pid_t artdaq::SharedMemoryEventManager::StartArtProcess ( fhicl::ParameterSet  pset)

Start one art process.

Parameters
psetParameterSet to send to this art process
Returns
pid_t of the started process

Definition at line 274 of file SharedMemoryEventManager.cc.

void artdaq::SharedMemoryEventManager::startRun ( run_id_t  runID)

Start a Run.

Parameters
runIDRun number of the new run

Definition at line 486 of file SharedMemoryEventManager.cc.

subrun_id_t artdaq::SharedMemoryEventManager::subrunID ( ) const
inline

Get the current subrun number.

Returns
The current subrun number

Definition at line 239 of file SharedMemoryEventManager.hh.

artdaq::RawDataType * artdaq::SharedMemoryEventManager::WriteFragmentHeader ( detail::RawFragmentHeader  frag,
bool  dropIfNoBuffersAvailable = false 
)

Get a pointer to a reserved memory area for the given Fragment header.

Parameters
fragFragment header (contains sequence ID and size information)
dropIfNoBuffersAvailableWhether to drop the fragment (instead of returning nullptr) when no buffers are available (Default: false)
Returns
Pointer to memory location for Fragment body (Header is copied into buffer here)

Definition at line 138 of file SharedMemoryEventManager.cc.


The documentation for this class was generated from the following files: