ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Control
AthenaKernel
AthenaKernel
ClusterMessage.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 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 <cstdint>
9
#include <optional>
10
#include <variant>
11
12
#include "GaudiKernel/StatusCode.h"
16
17
enum class
ClusterMessageType
{
18
RequestEvent
,
19
ProvideEvent
,
20
EventsDone
,
21
FinalWorkerStatus
,
22
WorkerError
,
23
EmergencyStop
,
24
Data
,
25
EMPTY
26
};
27
31
struct
ClusterMessage
{
32
33
// Wire message consists of a header and an optional body.
34
// If message type is Data, FinalWorkerStatus or WorkerError, payload
35
// in header indicates tag used to send body.
36
// message type, source, int payload
37
using
WireMsgHdr
= std::array<std::uint32_t, 3>;
// three ints for the three
38
// components of the header
39
using
WireMsgBody
= std::array<std::uint32_t, 10>;
// 320 bit max body length
40
// (for a DataDescr)
41
using
WireMsg
= std::tuple<WireMsgHdr, std::optional<WireMsgBody>>;
42
43
int
source
= -1;
// Filled in when it is sent
44
ClusterMessageType
messageType
{ClusterMessageType::EMPTY};
45
46
struct
WorkerStatus
{
47
StatusCode
status
{};
48
int
createdEvents
= 0;
49
int
skippedEvents
= 0;
50
int
finishedEvents
= 0;
51
};
52
53
struct
DataDescr
{
54
void
*
ptr
=
nullptr
;
55
std::size_t
len
= 0;
56
std::size_t
align
= 0;
57
58
bool
received
=
false
;
// set if this DataDescr was received and therefore
59
// owns its memory
60
std::size_t
evtNumber
= 0;
61
std::size_t
fileNumber
= 0;
62
63
template
<
typename
T>
64
DataDescr
(
const
T*
ptr
, std::size_t
count
= 1)
65
:
ptr
((void*)
ptr
),
len
(
count
* sizeof(T)),
align
(alignof(T)) {}
66
67
DataDescr
(
DataDescr
&& rhs)
noexcept
;
68
69
DataDescr
(
const
DataDescr
&) =
delete
;
70
DataDescr
&
operator=
(
const
DataDescr
&) =
delete
;
71
72
DataDescr
(
const
WireMsgBody
& body);
73
74
DataDescr
&
operator=
(
DataDescr
&& rhs)
noexcept
;
75
76
~DataDescr
();
77
};
78
79
// A payload is used with:
80
// ProvideEvent: an int indicating the event index
81
// ProvideStatus and WorkerError: a WorkerStatus
82
// Data: DataDescr for miscellaneous data (variable size)
83
using
Payload_t
= std::variant<std::monostate, int, WorkerStatus, DataDescr>;
84
Payload_t
payload
{};
85
86
ClusterMessage
();
87
88
ClusterMessage
(
ClusterMessageType
mType);
89
90
ClusterMessage
(
ClusterMessageType
mType,
int
payload
);
91
92
ClusterMessage
(
ClusterMessageType
mType,
WorkerStatus
payload
);
93
94
ClusterMessage
(
ClusterMessageType
mType,
DataDescr
&&
payload
);
95
96
ClusterMessage
(
const
WireMsg
&);
97
98
[[nodiscard]]
WireMsg
wire_msg
()
const
;
99
};
100
101
#include "
ClusterMessage.icc
"
102
#endif
// ATHENAKERNEL_CLUSTERMESSAGE_H
Data
@ Data
Definition
BaseObject.h:11
ClusterMessageType
ClusterMessageType
Definition
ClusterMessage.h:17
ClusterMessageType::FinalWorkerStatus
@ FinalWorkerStatus
Definition
ClusterMessage.h:21
ClusterMessageType::RequestEvent
@ RequestEvent
Definition
ClusterMessage.h:18
ClusterMessageType::ProvideEvent
@ ProvideEvent
Definition
ClusterMessage.h:19
ClusterMessageType::EventsDone
@ EventsDone
Definition
ClusterMessage.h:20
ClusterMessageType::EMPTY
@ EMPTY
Definition
ClusterMessage.h:25
ClusterMessageType::EmergencyStop
@ EmergencyStop
Definition
ClusterMessage.h:23
ClusterMessageType::WorkerError
@ WorkerError
Definition
ClusterMessage.h:22
ClusterMessage.icc
ClusterMessageType
An enum class defining what type of message this is.
count
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
Definition
hcg.cxx:148
ClusterMessage::DataDescr
Definition
ClusterMessage.h:53
ClusterMessage::DataDescr::ptr
void * ptr
Definition
ClusterMessage.h:54
ClusterMessage::DataDescr::fileNumber
std::size_t fileNumber
Definition
ClusterMessage.h:61
ClusterMessage::DataDescr::DataDescr
DataDescr(const T *ptr, std::size_t count=1)
Definition
ClusterMessage.h:64
ClusterMessage::DataDescr::received
bool received
Definition
ClusterMessage.h:58
ClusterMessage::DataDescr::~DataDescr
~DataDescr()
Definition
ClusterMessage.cxx:29
ClusterMessage::DataDescr::len
std::size_t len
Definition
ClusterMessage.h:55
ClusterMessage::DataDescr::operator=
DataDescr & operator=(const DataDescr &)=delete
ClusterMessage::DataDescr::align
std::size_t align
Definition
ClusterMessage.h:56
ClusterMessage::DataDescr::evtNumber
std::size_t evtNumber
Definition
ClusterMessage.h:60
ClusterMessage::DataDescr::DataDescr
DataDescr(const DataDescr &)=delete
ClusterMessage::WorkerStatus
Definition
ClusterMessage.h:46
ClusterMessage::WorkerStatus::status
StatusCode status
Definition
ClusterMessage.h:47
ClusterMessage::WorkerStatus::skippedEvents
int skippedEvents
Definition
ClusterMessage.h:49
ClusterMessage::WorkerStatus::createdEvents
int createdEvents
Definition
ClusterMessage.h:48
ClusterMessage::WorkerStatus::finishedEvents
int finishedEvents
Definition
ClusterMessage.h:50
ClusterMessage::messageType
ClusterMessageType messageType
Definition
ClusterMessage.h:44
ClusterMessage::payload
Payload_t payload
Definition
ClusterMessage.h:84
ClusterMessage::WireMsg
std::tuple< WireMsgHdr, std::optional< WireMsgBody > > WireMsg
Definition
ClusterMessage.h:41
ClusterMessage::WireMsgHdr
std::array< std::uint32_t, 3 > WireMsgHdr
Definition
ClusterMessage.h:37
ClusterMessage::wire_msg
WireMsg wire_msg() const
Definition
ClusterMessage.cxx:122
ClusterMessage::WireMsgBody
std::array< std::uint32_t, 10 > WireMsgBody
Definition
ClusterMessage.h:39
ClusterMessage::source
int source
Definition
ClusterMessage.h:43
ClusterMessage::Payload_t
std::variant< std::monostate, int, WorkerStatus, DataDescr > Payload_t
Definition
ClusterMessage.h:83
ClusterMessage::ClusterMessage
ClusterMessage()
Generated on
for ATLAS Offline Software by
1.17.0