$treeview $search $mathjax $extrastylesheet
artdaq
v3_04_01
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #define TRACE_NAME (app_name + "_AutodetectTransfer").c_str() 00002 #include "artdaq/DAQdata/Globals.hh" 00003 00004 #include "artdaq/TransferPlugins/TransferInterface.hh" 00005 #include "artdaq/TransferPlugins/TCPSocketTransfer.hh" 00006 #include "artdaq/TransferPlugins/ShmemTransfer.hh" 00007 00008 namespace artdaq 00009 { 00016 class AutodetectTransfer : public TransferInterface 00017 { 00018 public: 00024 AutodetectTransfer(const fhicl::ParameterSet& pset, Role role); 00025 00029 virtual ~AutodetectTransfer() = default; 00030 00037 int receiveFragment(artdaq::Fragment& fragment, 00038 size_t receiveTimeout) override 00039 { 00040 return theTransfer_->receiveFragment(fragment, receiveTimeout); 00041 } 00042 00049 int receiveFragmentHeader(detail::RawFragmentHeader& header, size_t receiveTimeout) override 00050 { 00051 return theTransfer_->receiveFragmentHeader(header, receiveTimeout); 00052 } 00053 00060 int receiveFragmentData(RawDataType* destination, size_t wordCount) override 00061 { 00062 return theTransfer_->receiveFragmentData(destination, wordCount); 00063 } 00064 00071 CopyStatus transfer_fragment_min_blocking_mode(artdaq::Fragment const& fragment, size_t send_timeout_usec) override 00072 { 00073 return theTransfer_->transfer_fragment_min_blocking_mode(fragment, send_timeout_usec); 00074 } 00075 00081 CopyStatus transfer_fragment_reliable_mode(artdaq::Fragment&& fragment) override 00082 { 00083 return theTransfer_->transfer_fragment_reliable_mode(std::move(fragment)); 00084 } 00085 00090 bool isRunning() override { return theTransfer_->isRunning(); } 00091 00096 void flush_buffers() override { theTransfer_->flush_buffers(); } 00097 00098 private: 00099 std::unique_ptr<TransferInterface> theTransfer_; 00100 }; 00101 } 00102 00103 artdaq::AutodetectTransfer::AutodetectTransfer(const fhicl::ParameterSet& pset, Role role) 00104 : TransferInterface(pset, role) 00105 { 00106 TLOG(TLVL_INFO) << GetTraceName() << ": Begin AutodetectTransfer constructor" ; 00107 auto hosts = MakeHostMap(pset); 00108 00109 TLOG(TLVL_DEBUG) << GetTraceName() << ": srcHost=" << hosts[source_rank()] << ", destHost=" << hosts[destination_rank()]; 00110 if (hosts[source_rank()] == hosts[destination_rank()]) 00111 { 00112 TLOG(TLVL_INFO) << GetTraceName() << ": Constructing ShmemTransfer" ; 00113 theTransfer_.reset(new ShmemTransfer(pset, role)); 00114 } 00115 else 00116 { 00117 TLOG(TLVL_INFO) << GetTraceName() << ": Constructing TCPSocketTransfer" ; 00118 theTransfer_.reset(new TCPSocketTransfer(pset, role)); 00119 } 00120 } 00121 00122 DEFINE_ARTDAQ_TRANSFER(artdaq::AutodetectTransfer)