Project
Loading...
Searching...
No Matches
FairMQDeviceProxy.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11#ifndef O2_FRAMEWORK_FAIRMQDEVICEPROXY_H_
12#define O2_FRAMEWORK_FAIRMQDEVICEPROXY_H_
13
14#include <memory>
15
22#include <fairmq/FwdDecls.h>
23#include <fairmq/Version.h>
24#include <fairmq/shmem/Common.h>
25#include <vector>
26
27namespace o2::header
28{
29struct DataHeader;
30};
31
32namespace o2::framework
33{
34using PointerReconstructor = std::function<std::byte*(fair::mq::shmem::MetaHeader&&)>;
35
40{
41 public:
42 FairMQDeviceProxy() = default;
44 void bind(std::vector<OutputRoute> const& outputs, std::vector<InputRoute> const& inputs,
45 std::vector<ForwardRoute> const& forwards,
46 std::function<fair::mq::Channel&(std::string const&)> bindChannelByName,
47 std::function<bool(void)> newStateRequestedCallback);
48
50 [[nodiscard]] OutputRoute const& getOutputRoute(RouteIndex routeIndex) const { return mOutputs.at(routeIndex.value); }
52 [[nodiscard]] fair::mq::TransportFactory* getOutputTransport(RouteIndex routeIndex) const;
54 [[nodiscard]] fair::mq::TransportFactory* getInputTransport(RouteIndex routeIndex) const;
56 [[nodiscard]] fair::mq::TransportFactory* getForwardTransport(RouteIndex routeIndex) const;
58 [[nodiscard]] ChannelIndex getOutputChannelIndexByName(std::string const& channelName) const;
60 [[nodiscard]] ChannelIndex getInputChannelIndexByName(std::string const& channelName) const;
62 [[nodiscard]] ChannelIndex getForwardChannelIndexByName(std::string const& channelName) const;
64 [[nodiscard]] ChannelIndex getOutputChannelIndex(OutputSpec const& spec, size_t timeslice) const;
66 [[nodiscard]] PointerReconstructor getShmPointerReconstructor(InputSpec const& spec, size_t timeslice);
68 void getMatchingForwardChannelIndexes(std::vector<ChannelIndex>& result, header::DataHeader const& header, size_t timeslice) const;
70 [[nodiscard]] ChannelIndex getOutputChannelIndex(RouteIndex routeIndex) const;
71 [[nodiscard]] ChannelIndex getInputChannelIndex(RouteIndex routeIndex) const;
72 [[nodiscard]] ChannelIndex getForwardChannelIndex(RouteIndex routeIndex) const;
74 [[nodiscard]] fair::mq::Channel* getInputChannel(ChannelIndex channelIndex) const;
75 [[nodiscard]] fair::mq::Channel* getOutputChannel(ChannelIndex channelIndex) const;
76 [[nodiscard]] fair::mq::Channel* getForwardChannel(ChannelIndex channelIndex) const;
77
79 [[nodiscard]] OutputChannelInfo const& getOutputChannelInfo(ChannelIndex channelIndex) const;
81 [[nodiscard]] ForwardChannelInfo const& getForwardChannelInfo(ChannelIndex channelIndex) const;
82
87
88 [[nodiscard]] std::unique_ptr<fair::mq::Message> createOutputMessage(RouteIndex routeIndex) const;
89 [[nodiscard]] std::unique_ptr<fair::mq::Message> createOutputMessage(RouteIndex routeIndex, const size_t size) const;
90
91 [[nodiscard]] std::unique_ptr<fair::mq::Message> createInputMessage(RouteIndex routeIndex) const;
92 [[nodiscard]] std::unique_ptr<fair::mq::Message> createInputMessage(RouteIndex routeIndex, const size_t size) const;
93
94 [[nodiscard]] std::unique_ptr<fair::mq::Message> createForwardMessage(RouteIndex routeIndex) const;
95
96 [[nodiscard]] size_t getNumOutputChannels() const { return mOutputChannelInfos.size(); }
97 [[nodiscard]] size_t getNumInputChannels() const { return mInputChannels.size(); }
98 [[nodiscard]] size_t getNumForwardChannels() const { return mForwardChannelInfos.size(); }
99 [[nodiscard]] size_t getNumForwards() const { return mForwards.size(); }
100
101 [[nodiscard]] bool newStateRequested() const { return mStateChangeCallback(); }
102
103 private:
104 std::vector<OutputRoute> mOutputs;
105 std::vector<RouteState> mOutputRoutes;
106 std::vector<OutputChannelInfo> mOutputChannelInfos;
107 std::vector<OutputChannelState> mOutputChannelStates;
108
109 std::vector<InputRoute> mInputs;
110 std::vector<RouteState> mInputRoutes;
111 std::vector<fair::mq::Channel*> mInputChannels;
112 std::vector<std::string> mInputChannelNames;
113
114 std::vector<ForwardRoute> mForwards;
115 std::vector<RouteState> mForwardRoutes;
116 std::vector<ForwardChannelInfo> mForwardChannelInfos;
117 std::vector<ForwardChannelState> mForwardChannelStates;
118
119 std::function<bool()> mStateChangeCallback;
120};
121
122} // namespace o2::framework
123
124#endif // O2_FRAMEWORK_FAIRMQDEVICEPROXY_H_
std::unique_ptr< fair::mq::Message > createOutputMessage(RouteIndex routeIndex) const
void bind(std::vector< OutputRoute > const &outputs, std::vector< InputRoute > const &inputs, std::vector< ForwardRoute > const &forwards, std::function< fair::mq::Channel &(std::string const &)> bindChannelByName, std::function< bool(void)> newStateRequestedCallback)
ForwardChannelState & getForwardChannelState(ChannelIndex channelIndex)
Retrieve information associated to a given forward by ChannelIndex.
fair::mq::TransportFactory * getForwardTransport(RouteIndex routeIndex) const
Retrieve the transport associated to a given route.
OutputChannelState & getOutputChannelState(ChannelIndex channelIndex)
Retrieve information associated to a given forward by ChannelIndex.
OutputRoute const & getOutputRoute(RouteIndex routeIndex) const
Retrieve the transport associated to a given route.
ChannelIndex getInputChannelIndexByName(std::string const &channelName) const
ChannelIndex from a given channel name.
ChannelIndex getForwardChannelIndexByName(std::string const &channelName) const
ChannelIndex from a given channel name.
ChannelIndex getForwardChannelIndex(RouteIndex routeIndex) const
void getMatchingForwardChannelIndexes(std::vector< ChannelIndex > &result, header::DataHeader const &header, size_t timeslice) const
Retrieve the channel index from a given OutputSpec and the associated timeslice.
ForwardChannelInfo const & getForwardChannelInfo(ChannelIndex channelIndex) const
Retrieve information associated to a given forward by ChannelIndex.
ChannelIndex getOutputChannelIndexByName(std::string const &channelName) const
ChannelIndex from a given channel name.
PointerReconstructor getShmPointerReconstructor(InputSpec const &spec, size_t timeslice)
Retrieve the pointer-reconstruction function for the shm manager for a given input spec.
fair::mq::Channel * getForwardChannel(ChannelIndex channelIndex) const
fair::mq::TransportFactory * getOutputTransport(RouteIndex routeIndex) const
Retrieve the transport associated to a given route.
ChannelIndex getOutputChannelIndex(OutputSpec const &spec, size_t timeslice) const
Retrieve the channel index from a given OutputSpec and the associated timeslice.
fair::mq::Channel * getOutputChannel(ChannelIndex channelIndex) const
std::unique_ptr< fair::mq::Message > createForwardMessage(RouteIndex routeIndex) const
fair::mq::Channel * getInputChannel(ChannelIndex channelIndex) const
Retrieve the channel associated to a given output route.
ChannelIndex getInputChannelIndex(RouteIndex routeIndex) const
OutputChannelInfo const & getOutputChannelInfo(ChannelIndex channelIndex) const
Retrieve information associated to a given forward by ChannelIndex.
fair::mq::TransportFactory * getInputTransport(RouteIndex routeIndex) const
Retrieve the transport associated to a given route.
std::unique_ptr< fair::mq::Message > createInputMessage(RouteIndex routeIndex) const
FairMQDeviceProxy(FairMQDeviceProxy const &)=delete
GLuint64EXT * result
Definition glcorearb.h:5662
GLsizeiptr size
Definition glcorearb.h:659
Defining ITS Vertex explicitly as messageable.
Definition Cartesian.h:288
std::function< std::byte *(fair::mq::shmem::MetaHeader &&)> PointerReconstructor
Definition ASoA.h:52
O2 data header classes and API, v0.1.
Definition DetID.h:49
Forward channel information.
Definition ChannelInfo.h:88
Output channel information.
Definition ChannelInfo.h:73
the main header struct
Definition DataHeader.h:620