9 #ifndef FAIR_MQ_PLUGINS_PMIX
10 #define FAIR_MQ_PLUGINS_PMIX
13 #include "PMIxCommands.h"
15 #include <fairmq/Plugin.h>
16 #include <fairmq/Version.h>
17 #include <FairMQLogger.h>
23 #include <sys/types.h>
27 namespace fair::mq::plugins
30 class PMIxPlugin :
public Plugin
33 PMIxPlugin(
const std::string& name,
34 const Plugin::Version version,
35 const std::string& maintainer,
36 const std::string& homepage,
40 auto PMIxClient() const -> std::
string {
return fPMIxClient; };
45 std::string fPMIxClient;
46 std::string fDeviceId;
49 std::set<uint32_t> fStateChangeSubscribers;
50 uint32_t fLastExternalController;
51 bool fExitingAckedByLastExternalController;
52 std::condition_variable fExitingAcked;
53 std::mutex fStateChangeSubscriberMutex;
55 DeviceState fCurrentState;
56 DeviceState fLastState;
59 auto Publish() -> void;
61 auto Fence(
const std::string& label) -> void;
62 auto Lookup() -> void;
64 auto SubscribeForCommands() -> void;
65 auto WaitForExitingAck() -> void;
68 Plugin::ProgOptions PMIxProgramOptions()
70 boost::program_options::options_description options(
"PMIx Plugin");
72 (
"pmix-dummy", boost::program_options::value<int>()->default_value(0),
"Dummy.");
76 REGISTER_FAIRMQ_PLUGIN(
79 (Plugin::Version{FAIRMQ_VERSION_MAJOR,
81 FAIRMQ_VERSION_PATCH}),
82 "FairRootGroup <fairroot@gsi.de>",
83 "https://github.com/FairRootGroup/FairMQ",