artdaq  v2_03_00
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
artdaq::TransferInterface Class Referenceabstract

This interface defines the functions used to transfer data between artdaq applications. More...

#include <artdaq/TransferPlugins/TransferInterface.hh>

+ Inheritance diagram for artdaq::TransferInterface:

Public Types

enum  Role { Role::kSend, Role::kReceive }
 Used to determine if a TransferInterface is a Sender or Receiver. More...
 
enum  CopyStatus { CopyStatus::kSuccess, CopyStatus::kTimeout, CopyStatus::kErrorNotRequiringException }
 Returned from the send functions, this enumeration describes the possible return codes. If an exception occurs, it will be thrown and should be handled normally. More...
 

Public Member Functions

 TransferInterface (const fhicl::ParameterSet &ps, Role role)
 TransferInterface Constructor. More...
 
 TransferInterface (const TransferInterface &)=delete
 Copy Constructor is deleted.
 
TransferInterfaceoperator= (const TransferInterface &)=delete
 Copy Assignment operator is deleted. More...
 
virtual ~TransferInterface ()=default
 Default virtual Destructor.
 
virtual int receiveFragment (artdaq::Fragment &fragment, size_t receiveTimeout)=0
 Receive a Fragment from the transport mechanism. More...
 
virtual CopyStatus copyFragment (artdaq::Fragment &fragment, size_t send_timeout_usec=std::numeric_limits< size_t >::max())=0
 Copy a Fragment to the destination. May not necessarily be reliable. More...
 
virtual CopyStatus moveFragment (artdaq::Fragment &&fragment, size_t send_timeout_usec=std::numeric_limits< size_t >::max())=0
 Move a Fragment to the destination. This should be reliable, if the underlying transport mechanism supports reliable sending. More...
 
std::string uniqueLabel () const
 Get the unique label of this TransferInterface instance. More...
 
virtual int source_rank () const
 Get the source rank for this TransferInterface instance. More...
 
virtual int destination_rank () const
 Get the destination rank for this TransferInterface instance. More...
 

Static Public Attributes

static const int RECV_TIMEOUT = 0xfedcba98
 Value to be returned upon receive timeout. Because receivers otherwise return rank, this is also the limit on the number of ranks that artdaq currently supports.
 

Protected Member Functions

Role role () const
 Get the TransferInterface::Role of this TransferInterface. More...
 

Protected Attributes

size_t buffer_count_
 The number of Fragment transfers the TransferInterface can handle simultaneously.
 
const size_t max_fragment_size_words_
 The maximum size of the transferred Fragment objects, in artdaq::Fragment::RawDataType words.
 

Detailed Description

This interface defines the functions used to transfer data between artdaq applications.

Definition at line 17 of file TransferInterface.hh.

Member Enumeration Documentation

Returned from the send functions, this enumeration describes the possible return codes. If an exception occurs, it will be thrown and should be handled normally.

Enumerator
kSuccess 

The send operation completed successfully.

kTimeout 

The send operation timed out.

kErrorNotRequiringException 

Some error occurred, but no exception was thrown.

Definition at line 39 of file TransferInterface.hh.

Used to determine if a TransferInterface is a Sender or Receiver.

Enumerator
kSend 

This TransferInterface is a Sender.

kReceive 

This TransferInterface is a Receiver.

Definition at line 29 of file TransferInterface.hh.

Constructor & Destructor Documentation

artdaq::TransferInterface::TransferInterface ( const fhicl::ParameterSet &  ps,
Role  role 
)

TransferInterface Constructor.

Parameters
psParameterSet used for configuring the TransferInterface
roleRole of the TransferInterface (See TransferInterface::Role)
* TransferInterface accepts the following Parameters:
* "source_rank" (Default: my_rank): The rank that data is coming from
* "destination_rank" (Default: my_rank): The rank that data is going to
* "unique_label" (Default: "transfer_between_[source_rank]_and_[destination_rank]"): A label that uniquely identifies the TransferInterface instance
* "buffer_count" (Default: 10): How many Fragments can the TransferInterface handle simultaneously
* "max_fragment_size_words" (Default: 1024): The maximum Fragment size expected. May be used for static memory allocation, and will cause errors
* if larger Fragments are sent.
* 

Definition at line 3 of file TransferInterface.cc.

Member Function Documentation

virtual CopyStatus artdaq::TransferInterface::copyFragment ( artdaq::Fragment &  fragment,
size_t  send_timeout_usec = std::numeric_limits< size_t >::max() 
)
pure virtual

Copy a Fragment to the destination. May not necessarily be reliable.

Parameters
fragmentFragment to copy
send_timeout_usecTimeout for send, in microseconds
Returns
CopyStatus detailing result of copy

Implemented in artdaq::MulticastTransfer, artdaq::RTIDDSTransfer, artdaq::AutodetectTransfer, and artdaq::NullTransfer.

virtual int artdaq::TransferInterface::destination_rank ( ) const
inlinevirtual

Get the destination rank for this TransferInterface instance.

Returns
The destination rank for this TransferInterface instance

Definition at line 121 of file TransferInterface.hh.

virtual CopyStatus artdaq::TransferInterface::moveFragment ( artdaq::Fragment &&  fragment,
size_t  send_timeout_usec = std::numeric_limits< size_t >::max() 
)
pure virtual

Move a Fragment to the destination. This should be reliable, if the underlying transport mechanism supports reliable sending.

Parameters
fragmentFragment to move
send_timeout_usecTimeout for send, in microseconds
Returns
CopyStatus detailing result of copy

Implemented in artdaq::MulticastTransfer, artdaq::RTIDDSTransfer, artdaq::AutodetectTransfer, and artdaq::NullTransfer.

TransferInterface& artdaq::TransferInterface::operator= ( const TransferInterface )
delete

Copy Assignment operator is deleted.

Returns
TransferInterface Copy
virtual int artdaq::TransferInterface::receiveFragment ( artdaq::Fragment &  fragment,
size_t  receiveTimeout 
)
pure virtual

Receive a Fragment from the transport mechanism.

Parameters
[out]fragmentReceived Fragment
receiveTimeoutTimeout for receive
Returns
The rank the Fragment was received from (should be source_rank), or RECV_TIMEOUT

This is a pure virtual function, derived classes should override it

Implemented in artdaq::MulticastTransfer, artdaq::RTIDDSTransfer, artdaq::AutodetectTransfer, and artdaq::NullTransfer.

Role artdaq::TransferInterface::role ( ) const
inlineprotected

Get the TransferInterface::Role of this TransferInterface.

Returns
The Role of this TransferInterface

Definition at line 137 of file TransferInterface.hh.

virtual int artdaq::TransferInterface::source_rank ( ) const
inlinevirtual

Get the source rank for this TransferInterface instance.

Returns
The source rank for this Transferinterface instance

Definition at line 116 of file TransferInterface.hh.

std::string artdaq::TransferInterface::uniqueLabel ( ) const
inline

Get the unique label of this TransferInterface instance.

Returns
The unique label of this TransferInterface instance

Definition at line 110 of file TransferInterface.hh.


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