This interface defines the functions used to transfer data between artdaq applications. More...
#include <artdaq/TransferPlugins/TransferInterface.hh>
Public Types | |
enum | int { DATA_END = -2222, RECV_TIMEOUT = -1111, RECV_SUCCESS = 0 } |
enum | Role { kSend, kReceive } |
Used to determine if a TransferInterface is a Sender or Receiver. More... | |
enum | CopyStatus { kSuccess, kTimeout, 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. | |
TransferInterface (const TransferInterface &) | |
Copy Constructor is deleted. | |
TransferInterface & | operator= (const TransferInterface &) |
Copy Assignment operator is deleted. | |
virtual | ~TransferInterface () |
Default virtual Destructor. | |
virtual int | receiveFragment (artdaq::Fragment &fragment, size_t receiveTimeout) |
Receive a Fragment from the transport mechanism. | |
virtual int | receiveFragmentHeader (detail::RawFragmentHeader &header, size_t receiveTimeout)=0 |
Receive a Fragment Header from the transport mechanism. | |
virtual int | receiveFragmentData (RawDataType *destination, size_t wordCount)=0 |
Receive the body of a Fragment to the given destination pointer. | |
virtual CopyStatus | copyFragment (artdaq::Fragment &fragment, size_t send_timeout_usec)=0 |
Copy a Fragment to the destination. May not necessarily be reliable. | |
virtual CopyStatus | moveFragment (artdaq::Fragment &&fragment)=0 |
Move a Fragment to the destination. This should be reliable, if the underlying transport mechanism supports reliable sending. | |
std::string | uniqueLabel () const |
Get the unique label of this TransferInterface instance. | |
virtual int | source_rank () const |
Get the source rank for this TransferInterface instance. | |
virtual int | destination_rank () const |
Get the destination rank for this TransferInterface instance. | |
std::string | GetTraceName () const |
Constructs a name suitable for TRACE messages. | |
Static Public Member Functions | |
static std::string | CopyStatusToString (CopyStatus in) |
Protected Member Functions | |
Role | role () const |
Get the TransferInterface::Role of this TransferInterface. | |
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. | |
const short | partition_number_ |
The partition number of the DAQ. |
This interface defines the functions used to transfer data between artdaq applications.
Definition at line 18 of file TransferInterface.hh.
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.
kSuccess |
The send operation completed successfully. |
kTimeout |
The send operation timed out. |
kErrorNotRequiringException |
Some error occurred, but no exception was thrown. |
Definition at line 40 of file TransferInterface.hh.
Definition at line 21 of file TransferInterface.hh.
Used to determine if a TransferInterface is a Sender or Receiver.
kSend |
This TransferInterface is a Sender. |
kReceive |
This TransferInterface is a Receiver. |
Definition at line 30 of file TransferInterface.hh.
artdaq::TransferInterface::TransferInterface | ( | const fhicl::ParameterSet & | ps, | |
Role | role | |||
) |
TransferInterface Constructor.
ps | ParameterSet used for configuring the TransferInterface | |
role | Role 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 5 of file TransferInterface.cc.
virtual CopyStatus artdaq::TransferInterface::copyFragment | ( | artdaq::Fragment & | fragment, | |
size_t | send_timeout_usec | |||
) | [pure virtual] |
Copy a Fragment to the destination. May not necessarily be reliable.
fragment | Fragment to copy | |
send_timeout_usec | Timeout for send, in microseconds |
Implemented in artdaq::AutodetectTransfer, artdaq::MulticastTransfer, artdaq::NullTransfer, and artdaq::RTIDDSTransfer.
virtual int artdaq::TransferInterface::destination_rank | ( | ) | const [inline, virtual] |
Get the destination rank for this TransferInterface instance.
Definition at line 150 of file TransferInterface.hh.
std::string artdaq::TransferInterface::GetTraceName | ( | ) | const [inline] |
Constructs a name suitable for TRACE messages.
Definition at line 157 of file TransferInterface.hh.
virtual CopyStatus artdaq::TransferInterface::moveFragment | ( | artdaq::Fragment && | fragment | ) | [pure virtual] |
Move a Fragment to the destination. This should be reliable, if the underlying transport mechanism supports reliable sending.
fragment | Fragment to move |
Implemented in artdaq::AutodetectTransfer, artdaq::MulticastTransfer, and artdaq::NullTransfer.
TransferInterface& artdaq::TransferInterface::operator= | ( | const TransferInterface & | ) |
Copy Assignment operator is deleted.
int artdaq::TransferInterface::receiveFragment | ( | artdaq::Fragment & | fragment, | |
size_t | receiveTimeout | |||
) | [virtual] |
Receive a Fragment from the transport mechanism.
[out] | fragment | Received Fragment |
receiveTimeout | Timeout for receive |
Reimplemented in artdaq::AutodetectTransfer, artdaq::MulticastTransfer, artdaq::NullTransfer, and artdaq::RTIDDSTransfer.
Definition at line 18 of file TransferInterface.cc.
virtual int artdaq::TransferInterface::receiveFragmentData | ( | RawDataType * | destination, | |
size_t | wordCount | |||
) | [pure virtual] |
Receive the body of a Fragment to the given destination pointer.
destination | Pointer to memory region where Fragment data should be stored | |
wordCount | Number of words of Fragment data to receive |
The precondition for calling this function is that you have received a valid header, therefore it does not have a , as the Fragment data should immediately be available.
Implemented in artdaq::AutodetectTransfer, artdaq::MulticastTransfer, artdaq::NullTransfer, artdaq::ShmemTransfer, and artdaq::TCPSocketTransfer.
virtual int artdaq::TransferInterface::receiveFragmentHeader | ( | detail::RawFragmentHeader & | header, | |
size_t | receiveTimeout | |||
) | [pure virtual] |
Receive a Fragment Header from the transport mechanism.
[out] | header | Received Fragment Header |
receiveTimeout | Timeout for receive |
Implemented in artdaq::AutodetectTransfer, artdaq::MulticastTransfer, artdaq::NullTransfer, artdaq::ShmemTransfer, and artdaq::TCPSocketTransfer.
Role artdaq::TransferInterface::role | ( | ) | const [inline, protected] |
Get the TransferInterface::Role of this TransferInterface.
Definition at line 181 of file TransferInterface.hh.
virtual int artdaq::TransferInterface::source_rank | ( | ) | const [inline, virtual] |
Get the source rank for this TransferInterface instance.
Definition at line 145 of file TransferInterface.hh.
std::string artdaq::TransferInterface::uniqueLabel | ( | ) | const [inline] |
Get the unique label of this TransferInterface instance.
Definition at line 139 of file TransferInterface.hh.