artdaq  v3_00_01
artdaq::MulticastTransfer Class Reference

MulticastTransfer is a TransferInterface implementation plugin that transfers data using Multicast. More...

Inheritance diagram for artdaq::MulticastTransfer:
artdaq::TransferInterface

Public Types

using byte_t = artdaq::Fragment::byte_t
 Copy Fragment::byte_t into local scope.
 
- Public Types inherited from artdaq::TransferInterface
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

virtual ~MulticastTransfer ()=default
 Default destructor.
 
 MulticastTransfer (fhicl::ParameterSet const &ps, Role role)
 MulticastTransfer Constructor. More...
 
int receiveFragment (artdaq::Fragment &fragment, size_t receiveTimeout) override
 Receive a Fragment using Multicast. More...
 
int receiveFragmentHeader (detail::RawFragmentHeader &header, size_t receiveTimeout) override
 Receive a Fragment Header from the transport mechanism. More...
 
int receiveFragmentData (RawDataType *destination, size_t wordCount) override
 Receive the body of a Fragment to the given destination pointer. More...
 
CopyStatus copyFragment (artdaq::Fragment &fragment, size_t send_timeout_usec=std::numeric_limits< size_t >::max()) override
 Copy a Fragment to the destination. Multicast is always unreliable. More...
 
CopyStatus moveFragment (artdaq::Fragment &&fragment, size_t send_timeout_usec=std::numeric_limits< size_t >::max()) override
 Move a Fragment to the destination. Multicast is always unreliable. More...
 
- Public Member Functions inherited from artdaq::TransferInterface
 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.
 
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...
 

Additional Inherited Members

- Static Public Attributes inherited from artdaq::TransferInterface
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 inherited from artdaq::TransferInterface
Role role () const
 Get the TransferInterface::Role of this TransferInterface. More...
 
- Protected Attributes inherited from artdaq::TransferInterface
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

MulticastTransfer is a TransferInterface implementation plugin that transfers data using Multicast.

Definition at line 28 of file Multicast_transfer.cc.

Constructor & Destructor Documentation

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

MulticastTransfer Constructor.

Parameters
psParameterSet used to configure MulticastTransfer
roleRole of this MulticastTransfer instance (kSend or kReceive)
* MulticastTransfer accepts the following Parameters:
* "subfragment_size" (REQUIRED): Size of the sub-Fragments
* "subfragments_per_send" (REQUIRED): How many sub-Fragments to send in each batch
* "pause_on_copy_usecs" (Default: 0): Pause after sending a batch of sub-Fragments for this many microseconds
* "multicast_port" (REQUIRED): Port number to connect to
* "multicast_address" (REQUIRED): Multicast address to send to/receive from
* "local_address" (REQUIRED): Local origination address for multicast
* "receive_buffer_size" (Default: 0): The UDP receive buffer size. 0 uses automatic size.
* 

MulticastTransfer also requires all Parameters for configuring a TransferInterface

Definition at line 156 of file Multicast_transfer.cc.

Member Function Documentation

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

Copy a Fragment to the destination. Multicast is always unreliable.

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

Implements artdaq::TransferInterface.

Definition at line 409 of file Multicast_transfer.cc.

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

Move a Fragment to the destination. Multicast is always unreliable.

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

Implements artdaq::TransferInterface.

Definition at line 403 of file Multicast_transfer.cc.

int artdaq::MulticastTransfer::receiveFragment ( artdaq::Fragment &  fragment,
size_t  receiveTimeout 
)
overridevirtual

Receive a Fragment using Multicast.

Parameters
[out]fragmentReceived Fragment
receiveTimeoutTimeout for receive, in microseconds
Returns
Rank of sender or RECV_TIMEOUT

Reimplemented from artdaq::TransferInterface.

Definition at line 239 of file Multicast_transfer.cc.

int artdaq::MulticastTransfer::receiveFragmentData ( RawDataType *  destination,
size_t  wordCount 
)
overridevirtual

Receive the body of a Fragment to the given destination pointer.

Parameters
destinationPointer to memory region where Fragment data should be stored
wordCountNumber of words of Fragment data to receive
Returns
The rank the Fragment was received from (should be source_rank), or RECV_TIMEOUT

Implements artdaq::TransferInterface.

Definition at line 390 of file Multicast_transfer.cc.

int artdaq::MulticastTransfer::receiveFragmentHeader ( detail::RawFragmentHeader &  header,
size_t  receiveTimeout 
)
overridevirtual

Receive a Fragment Header from the transport mechanism.

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

Implements artdaq::TransferInterface.

Definition at line 379 of file Multicast_transfer.cc.


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