 |
helics
3.0.1
|
9 #include "../common/JsonBuilder.hpp"
10 #include "ActionMessage.hpp"
11 #include "BasicHandleInfo.hpp"
14 #include "FederateIdExtra.hpp"
15 #include "HandleManager.hpp"
16 #include "TimeDependencies.hpp"
17 #include "UnknownHandleManager.hpp"
18 #include "gmlc/concurrency/DelayedObjects.hpp"
19 #include "gmlc/concurrency/TriggerVariable.hpp"
20 #include "gmlc/containers/AirLock.hpp"
21 #include "gmlc/containers/DualMappedVector.hpp"
22 #include "gmlc/containers/SimpleQueue.hpp"
34 #include <unordered_map>
46 request_disconnect = 48,
58 bool nonCounting{
false};
59 explicit BasicFedInfo(
const std::string& fedname):
name(fedname) {}
72 connection_state::connected};
81 bool _observer{
false};
87 class TimeCoordinator;
99 std::atomic<bool> _isRoot{
false};
101 bool connectionEstablished{
false};
103 gmlc::containers::DualMappedVector<BasicFedInfo, std::string, GlobalFederateId>
105 gmlc::containers::DualMappedVector<BasicBrokerInfo, std::string, GlobalBrokerId>
108 previous_local_broker_identifier;
110 HandleManager handles;
111 UnknownHandleManager unknownHandles;
112 std::vector<std::pair<std::string, GlobalFederateId>>
114 std::unordered_map<GlobalFederateId, LocalFederateId>
115 global_id_translation;
116 std::unordered_map<GlobalFederateId, route_id>
118 std::unordered_map<std::string, route_id>
119 knownExternalEndpoints;
120 std::unordered_map<std::string, std::string> global_values;
122 std::mutex name_mutex_;
123 std::atomic<int> queryCounter{1};
124 gmlc::concurrency::DelayedObjects<std::string> activeQueries;
125 std::vector<std::tuple<fileops::JsonMapBuilder, std::vector<ActionMessage>,
bool>> mapBuilders;
128 std::deque<std::pair<int32_t, decltype(std::chrono::steady_clock::now())>> queryTimeouts;
130 std::vector<ActionMessage> earlyMessages;
131 gmlc::concurrency::TriggerVariable disconnection;
132 std::unique_ptr<TimeoutMonitor>
134 std::atomic<uint16_t> nextAirLock{0};
135 std::array<gmlc::containers::AirLock<std::any>, 3>
141 virtual void processCommand(ActionMessage&& command)
override;
147 void processPriorityCommand(ActionMessage&& command)
override;
150 void processBrokerConfigureCommands(ActionMessage& cmd);
152 gmlc::containers::SimpleQueue<ActionMessage>
156 void transmitDelayedMessages();
160 void routeMessage(ActionMessage& cmd, GlobalFederateId dest);
161 void routeMessage(ActionMessage&& cmd, GlobalFederateId dest);
164 void routeMessage(
const ActionMessage& cmd);
165 void routeMessage(ActionMessage&& cmd);
167 void transmitToParent(ActionMessage&& cmd);
169 void propagateError(ActionMessage&& cmd);
171 void broadcast(ActionMessage& cmd);
173 route_id fillMessageRouteInformation(ActionMessage& mess);
176 void executeInitializationOperations();
178 uint16_t getNextAirlockIndex();
181 bool verifyBrokerKey(ActionMessage& mess)
const;
184 bool verifyBrokerKey(
const std::string& key)
const;
189 virtual bool connect() override final;
207 virtual
bool isRoot() const override final {
return _isRoot; };
212 setLoggingCallback(
const std::function<
void(
int, std::string_view, std::string_view)>&
213 logFunction)
override final;
216 std::chrono::milliseconds msToWait = std::chrono::milliseconds(0)) const override final;
222 virtual
void globalError(int32_t errorCode, const std::
string& errorString) override final;
227 virtual
bool brokerConnect() = 0;
230 virtual
void brokerDisconnect() = 0;
256 virtual
void addRoute(
route_id rid,
int interfaceId, const std::
string& routeInfo) = 0;
265 explicit
CoreBroker(
bool setAsRootBroker = false) noexcept;
267 explicit
CoreBroker(const std::
string& broker_name);
271 virtual
void configure(const std::
string& configureString) override final;
289 virtual const std::string&
getAddress() const override final;
291 virtual
void setLogFile(const std::
string& lfile) override final;
293 query(const std::
string& target,
294 const std::
string& queryStr,
296 virtual
void setGlobal(const std::
string& valueName, const std::
string& value) override final;
297 virtual
void sendCommand(const std::
string& target,
298 const std::
string& commandStr,
301 virtual
void linkEndpoints(const std::
string& source, const std::
string& target) override final;
302 virtual
void dataLink(const std::
string& publication, const std::
string& input) override final;
305 const std::
string& endpoint) override final;
308 const std::
string& endpoint) override final;
314 int getCountableFederates() const;
316 void checkDependencies();
344 void checkQueryTimeouts();
350 std::
string generateQueryAnswer(const std::
string& request,
bool force_ordering);
356 std::
string getNameList(std::
string gidString) const;
362 const BasicBrokerInfo* getBrokerById(GlobalBrokerId brokerid)
const;
364 BasicBrokerInfo* getBrokerById(GlobalBrokerId brokerid);
366 void addLocalInfo(BasicHandleInfo& handleInfo,
const ActionMessage& m);
367 void addPublication(ActionMessage& m);
368 void addInput(ActionMessage& m);
369 void addEndpoint(ActionMessage& m);
370 void addFilter(ActionMessage& m);
372 void brokerRegistration(ActionMessage&& command);
375 void fedRegistration(ActionMessage&& command);
379 void initializeMapBuilder(
const std::string& request,
382 bool force_ordering);
384 std::string generateGlobalStatus(fileops::JsonMapBuilder& builder);
387 void sendErrorToImmediateBrokers(
int errorCode);
389 void sendDisconnect();
391 std::string generateFederationSummary()
const;
393 void labelAsDisconnected(GlobalBrokerId brkid);
396 void generateTimeBarrier(ActionMessage& m);
397 int generateMapObjectCounter()
const;
398 friend class TimeoutMonitor;
constexpr Time timeZero
Definition: helicsTime.hpp:31
void clearFederateUnknowns(GlobalFederateId id)
Definition: UnknownHandleManager.cpp:295
virtual void linkEndpoints(const std::string &source, const std::string &target) override final
Definition: CoreBroker.cpp:171
virtual std::string query(const std::string &target, const std::string &queryStr, HelicsSequencingModes mode=HELICS_SEQUENCING_MODE_FAST) override final
Definition: CoreBroker.cpp:2689
bool isRunning() const
Definition: BrokerBase.hpp:190
int32_t minBrokerCount
Definition: BrokerBase.hpp:49
void name(std::string_view name)
Definition: ActionMessage.hpp:107
constexpr uint16_t slow_responding_flag
overload of extra_flag4 indicating a federate, core or broker is slow responding
Definition: flagOperations.hpp:37
GlobalBrokerId higher_broker_id
the id code of the broker 1 level about this broker
Definition: BrokerBase.hpp:41
bool useJsonSerialization
Definition: BrokerBase.hpp:136
std::string brokerKey
Definition: BrokerBase.hpp:63
virtual bool sendToLogger(GlobalFederateId federateID, int logLevel, std::string_view name, std::string_view message) const
Definition: BrokerBase.cpp:396
Time timeout
timeout to wait to establish a broker connection before giving up
Definition: BrokerBase.hpp:56
virtual std::shared_ptr< helicsCLI11App > generateCLI() override
Definition: CoreBroker.cpp:1896
std::vector< std::string > checkForEndpointLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:114
@ HELICS_SEQUENCING_MODE_ORDERED
Definition: helics_enums.h:367
virtual void configureFromVector(std::vector< std::string > args) override final
Definition: CoreBroker.cpp:1881
bool enable_profiling
indicator that profiling is enabled
Definition: BrokerBase.hpp:137
virtual void setLogFile(const std::string &lfile) override final
Definition: CoreBroker.cpp:2683
std::shared_ptr< Broker > findBroker(const std::string &brokerName)
Definition: BrokerFactory.cpp:182
constexpr IdentifierBaseType gGlobalBrokerIdShift
Definition: GlobalFederateId.hpp:22
virtual void addSourceFilterToEndpoint(const std::string &filter, const std::string &endpoint) override final
Definition: CoreBroker.cpp:187
virtual void removeRoute(route_id rid)=0
void clearPublication(const std::string &newPublication)
Definition: UnknownHandleManager.cpp:275
GlobalBrokerId getGlobalId() const
Definition: BrokerBase.hpp:199
bool hasTimeDependency
set to true if the broker has Time dependencies
Definition: BrokerBase.hpp:127
base helics enumerations for C++ API's, a namespace wrapper for the definitions defined in helics_enu...
void unregisterBroker(const std::string &name)
Definition: BrokerFactory.cpp:301
route_id route
the routing information for data to be sent to the federate
Definition: CoreBroker.hpp:55
bool _sent_disconnect_ack
indicator that the disconnect ack has been sent
Definition: CoreBroker.hpp:79
virtual void disconnect() override final
Definition: CoreBroker.cpp:2040
connection_state getAllConnectionState() const
Definition: CoreBroker.cpp:3678
std::vector< std::string > checkForLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:108
bool _disable_ping
indicator that the broker doesn't respond to pings
Definition: CoreBroker.hpp:80
virtual void configure(const std::string &configureString) override final
Definition: CoreBroker.cpp:1851
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
constexpr BaseType baseValue() const
Definition: GlobalFederateId.hpp:34
const std::string name
name of the federate
Definition: CoreBroker.hpp:53
std::atomic< GlobalBrokerId > global_id
Definition: BrokerBase.hpp:38
virtual void setLoggingCallback(const std::function< void(int, std::string_view, std::string_view)> &logFunction) override final
Definition: CoreBroker.cpp:111
Definition: GlobalFederateId.hpp:68
Definition: ActionMessage.hpp:30
bool uuid_like
will be set to true if the name looks like a uuid
Definition: BrokerBase.hpp:134
constexpr GlobalBrokerId parent_broker_id
Definition: GlobalFederateId.hpp:60
Definition: CoreBroker.hpp:63
@ FILTER
handle to a filter
const friend std::string & brokerStateName(BrokerState state)
Definition: BrokerBase.cpp:946
const std::string name
the name of the broker
Definition: CoreBroker.hpp:65
int parseArgs(int argc, char *argv[])
Definition: BrokerBase.cpp:312
@ INPUT
handle to a input interface
std::atomic< bool > haltOperations
flag indicating that no further message should be processed
Definition: BrokerBase.hpp:77
bool hasUnknowns() const
Definition: UnknownHandleManager.cpp:145
virtual void setGlobal(const std::string &valueName, const std::string &value) override final
Definition: CoreBroker.cpp:2754
Definition: helicsCLI11.hpp:41
constexpr auto versionString
Definition: helicsVersion.hpp:16
virtual void configureBase()
Definition: BrokerBase.cpp:339
uint16_t counter
26 counter for filter tracking or message counter
Definition: ActionMessage.hpp:41
@ ERROR_LEVEL
only print errors
Definition: loggingHelper.hpp:22
std::unique_ptr< ForwardingTimeCoordinator > timeCoord
object managing the time control
Definition: BrokerBase.hpp:101
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:85
int32_t minChildCount
Definition: BrokerBase.hpp:53
virtual void transmit(route_id route, const ActionMessage &command)=0
bool no_ping
indicator that the broker is not very responsive to ping requests
Definition: BrokerBase.hpp:133
bool _core
if set to true the broker is a core, false is a broker
Definition: CoreBroker.hpp:76
virtual const std::string & getIdentifier() const override final
Definition: CoreBroker.hpp:288
void setIdentifier(const std::string &name)
Definition: CoreBroker.cpp:62
virtual ~CoreBroker()
Definition: CoreBroker.cpp:56
Definition: core-exceptions.hpp:47
bool hasRequiredUnknowns() const
Definition: UnknownHandleManager.cpp:186
GlobalFederateId global_id
the identification code for the federate
Definition: CoreBroker.hpp:54
GlobalBrokerId global_id
the global identifier for the broker
Definition: CoreBroker.hpp:67
std::vector< targetInfo > checkForPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:103
Definition: CoreBroker.hpp:51
virtual void setLoggingLevel(int logLevel) override final
Definition: CoreBroker.cpp:2674
constexpr GlobalBrokerId root_broker_id
Definition: GlobalFederateId.hpp:62
virtual bool connect() override final
Definition: CoreBroker.cpp:1913
void addActionMessage(const ActionMessage &m)
Definition: BrokerBase.cpp:572
virtual std::string generateLocalAddressString() const =0
void clearInput(const std::string &newInput)
Definition: UnknownHandleManager.cpp:269
constexpr uint16_t child_flag
overload of extra_flag4 indicating a message is from a child object
Definition: flagOperations.hpp:49
virtual void sendCommand(const std::string &target, const std::string &commandStr, HelicsSequencingModes mode) override final
Definition: CoreBroker.cpp:2763
virtual bool isRoot() const override final
Definition: CoreBroker.hpp:207
Definition: GlobalFederateId.hpp:168
virtual void clearTimeBarrier() override final
Definition: CoreBroker.cpp:1970
void clearEndpoint(const std::string &newEndpoint)
Definition: UnknownHandleManager.cpp:281
@ clone_flag
flag indicating the filter is a clone filter or the data needs to be cloned
Definition: flagOperations.hpp:25
std::vector< targetInfo > checkForFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:128
virtual void setTimeBarrier(Time barrierTime) override final
Definition: CoreBroker.cpp:1959
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:100
constexpr uint16_t observer_flag
overload of optional_flag indicating that a federate is an observer only
Definition: flagOperations.hpp:43
virtual void processDisconnect(bool skipUnregister=false) override final
Definition: CoreBroker.cpp:2003
virtual bool isOpenToNewFederates() const override
Definition: CoreBroker.cpp:220
int32_t messageID
8 – message ID for a variety of purposes
Definition: ActionMessage.hpp:36
GlobalBrokerId parent
the id of the parent broker/core
Definition: CoreBroker.hpp:56
virtual bool isConnected() const override final
Definition: CoreBroker.cpp:1988
std::size_t currentMessageCounter() const
Definition: BrokerBase.hpp:273
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:21
Definition: BasicHandleInfo.hpp:30
virtual const std::string & getAddress() const override final
Definition: CoreBroker.cpp:71
@ use_json_serialization_flag
flag to indicate it should use the json packetization
Definition: flagOperations.hpp:22
bool allInitReady() const
Definition: CoreBroker.cpp:3705
std::string routeInfo
string describing the connection information for the route
Definition: CoreBroker.hpp:83
bool enteredExecutionMode
flag indicating that the broker has entered execution mode
Definition: BrokerBase.hpp:128
Definition: GlobalFederateId.hpp:26
std::vector< targetInfo > checkForEndpoints(const std::string &newEndpoint) const
Definition: UnknownHandleManager.cpp:121
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:77
constexpr uint16_t cancel_flag
overload of extra_flag3 indicating an operation is canceled
Definition: flagOperations.hpp:40
SmallBuffer payload
buffer to contain the data payload
Definition: ActionMessage.hpp:48
bool terminate_on_error
flag indicating that the federation should halt on any error
Definition: BrokerBase.hpp:81
GlobalFederateId dest_id
20 fed_id for a targeted message
Definition: ActionMessage.hpp:39
HelicsSequencingModes
Definition: helics_enums.h:363
BasicHandleInfo * getEndpoint(std::string_view name)
Definition: HandleManager.cpp:204
virtual bool waitForDisconnect(std::chrono::milliseconds msToWait=std::chrono::milliseconds(0)) const override final
Definition: CoreBroker.cpp:1994
std::string prettyPrintString(const ActionMessage &command)
Definition: ActionMessage.cpp:841
@ empty_flag
flag indicating the message is empty
Definition: flagOperations.hpp:33
@ configured
the broker itself has been configured and is ready to connect
constexpr uint16_t parent_flag
overload of extra_flag3 indicating the message is from a parent object
Definition: flagOperations.hpp:46
GlobalBrokerId parent
the id of the parent broker/core
Definition: CoreBroker.hpp:69
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:20
constexpr uint16_t non_counting_flag
overload of nameless_interface_flag indicating that a federate should not count in any totals
Definition: flagOperations.hpp:52
void setLoggingFile(const std::string &lfile)
Definition: BrokerBase.cpp:514
bool _gateway
set to true if this broker should act as a gateway.
Definition: CoreBroker.hpp:97
@ configuring
the broker is in the processing of configuring
Time actionTime
40 the time an action took place or will take place //32
Definition: ActionMessage.hpp:44
virtual void setAsRoot() override final
Definition: CoreBroker.cpp:1905
@ terminated
the termination process has started
void setDestination(GlobalHandle hand)
Definition: ActionMessage.hpp:99
bool _route_key
indicator that the broker has a unique route id
Definition: CoreBroker.hpp:78
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:17
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
@ ENDPOINT
handle to an endpoint
@ connecting
the connection process has started
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:18
virtual void addRoute(route_id rid, int interfaceId, const std::string &routeInfo)=0
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:24
void clearFilter(const std::string &newFilter)
Definition: UnknownHandleManager.cpp:288
connection_state state
specify the current status of the broker
Definition: CoreBroker.hpp:71
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:365
bool _nonLocal
indicator that the broker has a subbroker as a parent.
Definition: CoreBroker.hpp:77
Time queryTimeout
Definition: BrokerBase.hpp:58
void processRequiredUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:242
@ terminating
the termination process has started
@ connected
the connection process has completed
@ core_flag
flag indicating that message comes from a core vs a broker
Definition: flagOperations.hpp:19
virtual void globalError(int32_t errorCode, const std::string &errorString) override final
Definition: CoreBroker.cpp:1979
std::vector< targetInfo > checkForInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:97
constexpr IdentifierBaseType gGlobalFederateIdShift
Definition: GlobalFederateId.hpp:20
bool _hasTimeDependency
flag indicating that a broker has general endpoints it is coordinating
Definition: CoreBroker.hpp:74
virtual void dataLink(const std::string &publication, const std::string &input) override final
Definition: CoreBroker.cpp:179
void setTickForwarding(TickForwardingReasons reason, bool value=true)
Definition: BrokerBase.cpp:866
virtual void configureFromArgs(int argc, char *argv[]) override final
Definition: CoreBroker.cpp:1866
Definition: TimeoutMonitor.h:27
route_id route
the identifier for the route to take to the broker
Definition: CoreBroker.hpp:68
void logFlush()
Definition: BrokerBase.cpp:552
Definition: CoreBroker.hpp:95
void toggleActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:107
Definition: core/Broker.hpp:18
@ operating
normal operating conditions
void processNonOptionalUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:212
@ WARNING
print/log warning and errors
Definition: loggingHelper.hpp:24
gmlc::containers::BlockingPriorityQueue< ActionMessage > actionQueue
primary routing queue
Definition: BrokerBase.hpp:102
virtual void addDestinationFilterToEndpoint(const std::string &filter, const std::string &endpoint) override final
Definition: CoreBroker.cpp:195
int32_t minFederateCount
Definition: BrokerBase.hpp:47
std::string identifier
an identifier for the broker
Definition: BrokerBase.hpp:62
connection_state
Definition: CoreBroker.hpp:41
Definition: BrokerBase.hpp:34
void setErrorState(int eCode, std::string_view estring)
Definition: BrokerBase.cpp:496
bool isPriorityCommand(const ActionMessage &command) noexcept
Definition: ActionMessage.hpp:232
const std::string & state_string(operation_state state)
Definition: CommonCore.cpp:49
@ errored
an error was encountered
@ created
the broker has been created
std::string address
network location of the broker
Definition: BrokerBase.hpp:68
virtual void makeConnections(const std::string &file) override final
Definition: CoreBroker.cpp:162
@ NEXT_STEP
indicator that the iterations have completed
@ PUBLICATION
handle to output interface
GlobalFederateId source_id
12 – for federate_id or route_id
Definition: ActionMessage.hpp:37
bool hasNonOptionalUnknowns() const
Definition: UnknownHandleManager.cpp:152
GlobalBrokerId global_broker_id_local
Definition: BrokerBase.hpp:39
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:132
void unregister()
Definition: CoreBroker.cpp:2022
std::string generateJsonErrorResponse(JsonErrorCodes code, const std::string &message)
Definition: JsonGeneration.hpp:36