1 #define TRACE_NAME "TransferOutput"
2 #include "artdaq/ArtModules/ArtdaqOutput.hh"
5 #include "artdaq/DAQdata/NetMonHeader.hh"
6 #include "artdaq/TransferPlugins/MakeTransferPlugin.hh"
7 #include "artdaq/TransferPlugins/TransferInterface.hh"
40 void SendMessage(artdaq::FragmentPtr& fragment)
override;
48 size_t send_timeout_us_;
49 size_t send_retry_count_;
50 std::unique_ptr<artdaq::TransferInterface> transfer_;
54 :
ArtdaqOutput(ps), send_timeout_us_(ps.get<size_t>(
"send_timeout_us", 5000000)), send_retry_count_(ps.get<size_t>(
"send_retry_count", 5))
56 TLOG(TLVL_DEBUG) <<
"Begin: TransferOutput::TransferOutput(ParameterSet const& ps)";
58 TLOG(TLVL_DEBUG) <<
"END: TransferOutput::TransferOutput";
63 TLOG(TLVL_DEBUG) <<
"Begin: TransferOutput::~TransferOutput()";
65 auto sts = transfer_->transfer_fragment_min_blocking_mode(*artdaq::Fragment::eodFrag(0), 10000);
68 TLOG(TLVL_ERROR) <<
"Error sending EOD Fragment!";
70 transfer_.reset(
nullptr);
71 TLOG(TLVL_DEBUG) <<
"End: TransferOutput::~TransferOutput()";
76 TLOG(TLVL_DEBUG) <<
"Sending message with sequenceID=" << fragment->sequenceID() <<
", type=" << fragment->type()
77 <<
", length=" << fragment->dataSizeBytes();
82 sts = transfer_->transfer_fragment_min_blocking_mode(*fragment, send_timeout_us_);
85 if (retries > send_retry_count_)
87 TLOG(TLVL_ERROR) <<
"Error communicating with remote after " << retries <<
" tries. Closing art process";
88 kill(getpid(), SIGUSR2);
92 if (messageType == artdaq::Fragment::InitFragmentType)
94 std::fstream ostream(
"sendInitMessage_TransferOutput.bin", std::ios::out | std::ios::binary);
95 ostream.write(msg.Buffer(), msg.Length());
This is the base class for artdaq OutputModules, providing the serialization interface for art Events...
std::unique_ptr< artdaq::TransferInterface > MakeTransferPlugin(const fhicl::ParameterSet &pset, const std::string &plugin_label, TransferInterface::Role role)
Load a TransferInterface plugin.
TransferOutput(fhicl::ParameterSet const &ps)
TransferOutput Constructor.
An art::OutputModule which sends events using DataSenderManager. This module is designed for transpor...
void SendMessage(artdaq::FragmentPtr &fragment) override
Send a message using the Transfer Plugin
This TransferInterface is a Sender.
Some error occurred, but no exception was thrown.
The send operation completed successfully.
~TransferOutput() override
TransferOutput Destructor.