ATLAS Offline Software
Control
AthenaKernel
AthenaKernel
ClusterMessage.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
#ifndef ATHENAKERNEL_CLUSTERMESSAGE_H
5
#define ATHENAKERNEL_CLUSTERMESSAGE_H
6
7
#include <array>
8
#include <optional>
9
#include <variant>
10
11
#include "GaudiKernel/StatusCode.h"
16
enum class
ClusterMessageType
{
17
RequestEvent
,
18
ProvideEvent
,
19
EventsDone
,
20
FinalWorkerStatus
,
21
WorkerError
,
22
EmergencyStop
,
23
Data
,
24
EMPTY
25
};
26
30
struct
ClusterMessage
{
31
32
// Wire message consists of a header and an optional body.
33
// If message type is Data, FinalWorkerStatus or WorkerError, payload
34
// in header indicates tag used to send body.
35
// message type, source, int payload
36
using
WireMsgHdr
= std::array<int, 3>;
// three ints for the three components of the header
37
using
WireMsgBody
= std::array<int, 10>;
// 320 bit max body length (for a DataDescr)
38
using
WireMsg
= std::tuple<WireMsgHdr, std::optional<WireMsgBody>>;
39
40
int
source
= -1;
// Filled in when it is sent
41
ClusterMessageType
messageType
{
ClusterMessageType::EMPTY
};
42
43
struct
WorkerStatus
{
44
StatusCode
status
{};
45
int
createdEvents
= 0;
46
int
skippedEvents
= 0;
47
int
finishedEvents
= 0;
48
};
49
50
struct
DataDescr
{
51
void
*
ptr
=
nullptr
;
52
std::size_t
len
= 0;
53
std::size_t
align
= 0;
54
55
bool
received
=
false
;
// set if this DataDescr was received and therefore
56
// owns its memory
57
std::size_t
evtNumber
= 0;
58
std::size_t
fileNumber
= 0;
59
60
template
<
typename
T>
61
DataDescr
(
const
T
*
ptr
, std::size_t
count
= 1)
62
:
ptr
((void*)
ptr
),
len
(
count
* sizeof(
T
)),
align
(alignof(
T
)) {}
63
64
DataDescr
(
DataDescr
&& rhs) noexcept;
65
66
DataDescr
(
const
WireMsgBody
& body);
67
68
DataDescr
&
operator=
(
DataDescr
&& rhs) noexcept;
69
70
~DataDescr
();
71
};
72
73
// A payload is used with:
74
// ProvideEvent: an int indicating the event index
75
// ProvideStatus and WorkerError: a WorkerStatus
76
// Data: DataDescr for miscellaneous data (variable size)
77
using
Payload_t
= std::variant<std::monostate, int, WorkerStatus, DataDescr>;
78
Payload_t
payload
{};
79
80
ClusterMessage
();
81
82
ClusterMessage
(
ClusterMessageType
mType);
83
84
ClusterMessage
(
ClusterMessageType
mType,
int
payload
);
85
86
ClusterMessage
(
ClusterMessageType
mType,
WorkerStatus
payload
);
87
88
ClusterMessage
(
ClusterMessageType
mType,
DataDescr
&&
payload
);
89
90
ClusterMessage
(
const
WireMsg
&);
91
92
[[nodiscard]]
WireMsg
wire_msg
()
const
;
93
};
94
95
#include "
ClusterMessage.icc
"
96
#endif // ATHENAKERNEL_CLUSTERMESSAGE_H
ClusterMessage::payload
Payload_t payload
Definition:
ClusterMessage.h:78
ClusterMessageType::Data
@ Data
ClusterMessage.icc
ClusterMessage::WorkerStatus
Definition:
ClusterMessage.h:43
ClusterMessage::DataDescr::align
std::size_t align
Definition:
ClusterMessage.h:53
ClusterMessage::DataDescr::DataDescr
DataDescr(const T *ptr, std::size_t count=1)
Definition:
ClusterMessage.h:61
ClusterMessageType::RequestEvent
@ RequestEvent
ClusterMessage::WorkerStatus::status
StatusCode status
Definition:
ClusterMessage.h:44
ClusterMessageType
An enum class defining what type of message this is.
ClusterMessage::WorkerStatus::skippedEvents
int skippedEvents
Definition:
ClusterMessage.h:46
ClusterMessage::WorkerStatus::finishedEvents
int finishedEvents
Definition:
ClusterMessage.h:47
XMLtoHeader.count
count
Definition:
XMLtoHeader.py:84
ClusterMessage::ClusterMessage
ClusterMessage()
ClusterMessage::DataDescr::len
std::size_t len
Definition:
ClusterMessage.h:52
ClusterMessageType::EmergencyStop
@ EmergencyStop
ClusterMessage::DataDescr::evtNumber
std::size_t evtNumber
Definition:
ClusterMessage.h:57
ClusterMessage::WireMsgBody
std::array< int, 10 > WireMsgBody
Definition:
ClusterMessage.h:37
ClusterMessage::DataDescr::fileNumber
std::size_t fileNumber
Definition:
ClusterMessage.h:58
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition:
PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ClusterMessage::DataDescr::operator=
DataDescr & operator=(DataDescr &&rhs) noexcept
Definition:
ClusterMessage.cxx:34
ClusterMessage::Payload_t
std::variant< std::monostate, int, WorkerStatus, DataDescr > Payload_t
Definition:
ClusterMessage.h:77
ClusterMessageType::FinalWorkerStatus
@ FinalWorkerStatus
ClusterMessage::wire_msg
WireMsg wire_msg() const
Definition:
ClusterMessage.cxx:118
ClusterMessage
A class describing a message sent between nodes in a cluster.
Definition:
ClusterMessage.h:30
ClusterMessage::messageType
ClusterMessageType messageType
Definition:
ClusterMessage.h:41
ClusterMessage::DataDescr::~DataDescr
~DataDescr()
Definition:
ClusterMessage.cxx:28
ClusterMessage::source
int source
Definition:
ClusterMessage.h:40
ClusterMessage::WorkerStatus::createdEvents
int createdEvents
Definition:
ClusterMessage.h:45
ClusterMessageType::WorkerError
@ WorkerError
ClusterMessage::DataDescr
Definition:
ClusterMessage.h:50
ClusterMessageType::EMPTY
@ EMPTY
ClusterMessage::WireMsgHdr
std::array< int, 3 > WireMsgHdr
Definition:
ClusterMessage.h:36
ClusterMessageType::EventsDone
@ EventsDone
ClusterMessage::WireMsg
std::tuple< WireMsgHdr, std::optional< WireMsgBody > > WireMsg
Definition:
ClusterMessage.h:38
ClusterMessage::DataDescr::ptr
void * ptr
Definition:
ClusterMessage.h:51
ClusterMessageType::ProvideEvent
@ ProvideEvent
TSU::T
unsigned long long T
Definition:
L1TopoDataTypes.h:35
ClusterMessage::DataDescr::received
bool received
Definition:
ClusterMessage.h:55
Generated on Fri Sep 5 2025 21:07:50 for ATLAS Offline Software by
1.8.18