WRENCH  1.11
Cyberinfrastructure Simulation Workbench
Overview Installation Getting Started WRENCH 101 WRENCH 102
NetworkProximityService.h
1 
10 #ifndef WRENCH_NETWORKPROXIMITYSERVICE_H
11 #define WRENCH_NETWORKPROXIMITYSERVICE_H
12 
13 #include <cfloat>
14 #include <complex>
15 #include <random>
16 #include "wrench/services/Service.h"
17 #include "wrench/services/network_proximity/NetworkProximityServiceProperty.h"
18 #include "wrench/services/network_proximity/NetworkProximityDaemon.h"
19 
20 namespace wrench {
21 
27 
28  private:
29  WRENCH_PROPERTY_COLLECTION_TYPE default_property_values = {
38  };
39 
40  WRENCH_MESSAGE_PAYLOADCOLLECTION_TYPE default_messagepayload_values = {
48  };
49 
50  public:
51  /***********************/
53  /***********************/
54 
59  static constexpr double NOT_AVAILABLE = DBL_MAX;
60 
61  ~NetworkProximityService() override;
62 
63  /***********************/
65  /***********************/
66 
67  NetworkProximityService(std::string db_hostname,
68  std::vector<std::string> hosts_in_network,
69  WRENCH_PROPERTY_COLLECTION_TYPE property_list = {},
70  WRENCH_MESSAGE_PAYLOADCOLLECTION_TYPE messagepayload_list = {}
71  );
72 
73  /***********************/
75  /***********************/
76 
77  std::vector<std::string> getHostnameList();
78 
79  std::pair<double, double> getHostPairDistance(std::pair<std::string, std::string> hosts);
80 
81  std::pair<std::pair<double, double>, double> getHostCoordinate(std::string);
82 
83  std::string getNetworkProximityServiceType();
84 
85  /***********************/
87  /***********************/
88 
89  private:
90  friend class Simulation;
91 
92  std::vector<std::shared_ptr<NetworkProximityDaemon>> network_daemons;
93  std::vector<std::string> hosts_in_network;
94 
95  std::default_random_engine master_rng;
96 
97  int main() override;
98 
99  bool processNextMessage();
100 
101  void addEntryToDatabase(std::pair<std::string, std::string> pair_hosts, double proximity_value);
102 
103  std::map<std::pair<std::string, std::string>, std::pair<double, double>> entries;
104 
105  std::map<std::string, std::pair<std::complex<double>, double>> coordinate_lookup_table;
106 
107  std::shared_ptr<NetworkProximityDaemon>
108  getCommunicationPeer(const std::shared_ptr<NetworkProximityDaemon> sender_daemon);
109 
110  void vivaldiUpdate(double proximityValue, std::string sender_hostname, std::string peer_hostname);
111 
112  void validateProperties();
113  };
114 }
115 
116 #endif //WRENCH_NETWORKPROXIMITYSERVICE_H
wrench::NetworkProximityServiceProperty::NETWORK_PROXIMITY_MEASUREMENT_PERIOD
static const std::string NETWORK_PROXIMITY_MEASUREMENT_PERIOD
The inter-measurement period (in seconds) to be used (default: 60)
Definition: NetworkProximityServiceProperty.h:37
wrench::Service::property_list
WRENCH_PROPERTY_COLLECTION_TYPE property_list
The service's property list.
Definition: Service.h:110
wrench::NetworkProximityServiceProperty::NETWORK_PROXIMITY_MESSAGE_SIZE
static const std::string NETWORK_PROXIMITY_MESSAGE_SIZE
The message size (in bytes) to be used in RTT measurements (default: 1024)
Definition: NetworkProximityServiceProperty.h:34
wrench::NetworkProximityServiceMessagePayload::NETWORK_DAEMON_CONTACT_ANSWER_PAYLOAD
static const std::string NETWORK_DAEMON_CONTACT_ANSWER_PAYLOAD
The number of bytes in the message sent by the service to a network proximity daemon in answer to a r...
Definition: NetworkProximityServiceMessagePayload.h:37
wrench::ServiceMessagePayload::DAEMON_STOPPED_MESSAGE_PAYLOAD
static const std::string DAEMON_STOPPED_MESSAGE_PAYLOAD
The number of bytes in the control message sent by the daemon to confirm it has terminated.
Definition: ServiceMessagePayload.h:37
wrench::NetworkProximityService::NOT_AVAILABLE
static constexpr double NOT_AVAILABLE
A convenient constant that is returned as a latency between two hosts when no latency estimates are a...
Definition: NetworkProximityService.h:59
wrench::NetworkProximityServiceProperty::NETWORK_PROXIMITY_MEASUREMENT_PERIOD_NOISE_SEED
static const std::string NETWORK_PROXIMITY_MEASUREMENT_PERIOD_NOISE_SEED
The seed for the noise random number generator.
Definition: NetworkProximityServiceProperty.h:44
wrench::NetworkProximityService::getHostCoordinate
std::pair< std::pair< double, double >, double > getHostCoordinate(std::string)
Look up the current (x,y) coordinates of a given host (only for a Vivaldi network service type)
Definition: NetworkProximityService.cpp:80
wrench::NetworkProximityServiceMessagePayload::NETWORK_DAEMON_CONTACT_REQUEST_PAYLOAD
static const std::string NETWORK_DAEMON_CONTACT_REQUEST_PAYLOAD
The number of bytes in the message sent by a network proximity daemon to the network proximity servic...
Definition: NetworkProximityServiceMessagePayload.h:32
wrench::NetworkProximityService::NetworkProximityService
NetworkProximityService(std::string db_hostname, std::vector< std::string > hosts_in_network, WRENCH_PROPERTY_COLLECTION_TYPE property_list={}, WRENCH_MESSAGE_PAYLOADCOLLECTION_TYPE messagepayload_list={})
Constructor.
Definition: NetworkProximityService.cpp:48
wrench::NetworkProximityServiceProperty::NETWORK_PROXIMITY_PEER_LOOKUP_SEED
static const std::string NETWORK_PROXIMITY_PEER_LOOKUP_SEED
The random (integer) number generator seed used by the service to pick RTT measurement peers (default...
Definition: NetworkProximityServiceProperty.h:50
wrench::Service::messagepayload_list
WRENCH_MESSAGE_PAYLOADCOLLECTION_TYPE messagepayload_list
The service's messagepayload list.
Definition: Service.h:113
wrench
Definition: Action.cpp:28
wrench::NetworkProximityServiceMessagePayload::NETWORK_DB_LOOKUP_ANSWER_MESSAGE_PAYLOAD
static const std::string NETWORK_DB_LOOKUP_ANSWER_MESSAGE_PAYLOAD
The number of bytes in the message sent by the service in answer to a request for a proximity value l...
Definition: NetworkProximityServiceMessagePayload.h:27
wrench::NetworkProximityServiceMessagePayload::NETWORK_DAEMON_MEASUREMENT_REPORTING_PAYLOAD
static const std::string NETWORK_DAEMON_MEASUREMENT_REPORTING_PAYLOAD
The number of bytes in the message sent by a network proximity daemon to the network proximity servic...
Definition: NetworkProximityServiceMessagePayload.h:41
wrench::NetworkProximityService::getNetworkProximityServiceType
std::string getNetworkProximityServiceType()
Get the network proximity service type.
Definition: NetworkProximityService.cpp:483
wrench::NetworkProximityServiceMessagePayload::NETWORK_DB_LOOKUP_REQUEST_MESSAGE_PAYLOAD
static const std::string NETWORK_DB_LOOKUP_REQUEST_MESSAGE_PAYLOAD
The number of bytes in the message sent to the service to request a proximity value lookup.
Definition: NetworkProximityServiceMessagePayload.h:24
wrench::NetworkProximityServiceProperty::NETWORK_PROXIMITY_MEASUREMENT_PERIOD_MAX_NOISE
static const std::string NETWORK_PROXIMITY_MEASUREMENT_PERIOD_MAX_NOISE
The maximum random uniformly distributed noise (in seconds) to be added to the measurement period (us...
Definition: NetworkProximityServiceProperty.h:41
wrench::NetworkProximityServiceProperty::NETWORK_DAEMON_COMMUNICATION_COVERAGE
static const std::string NETWORK_DAEMON_COMMUNICATION_COVERAGE
The percentage of other network proximity daemons that each network proximity daemon will conduct RTT...
Definition: NetworkProximityServiceProperty.h:47
wrench::NetworkProximityServiceProperty::LOOKUP_OVERHEAD
static const std::string LOOKUP_OVERHEAD
The overhead, in seconds, of looking up entries for a file (default: 0)
Definition: NetworkProximityServiceProperty.h:25
wrench::NetworkProximityService::getHostPairDistance
std::pair< double, double > getHostPairDistance(std::pair< std::string, std::string > hosts)
Look up a proximity value in database.
Definition: NetworkProximityService.cpp:131
wrench::ServiceMessagePayload::STOP_DAEMON_MESSAGE_PAYLOAD
static const std::string STOP_DAEMON_MESSAGE_PAYLOAD
The number of bytes in the control message sent to the daemon to terminate it.
Definition: ServiceMessagePayload.h:35
wrench::NetworkProximityService::getHostnameList
std::vector< std::string > getHostnameList()
Gets the list of hosts monitored by this service (does not involve simulated network communications w...
Definition: NetworkProximityService.cpp:554
wrench::Service
A service that can be added to the simulation and that can be used by a WMS when executing a workflow...
Definition: Service.h:31
wrench::NetworkProximityService
A network proximity service that continuously estimates inter-host latencies and can be queried for s...
Definition: NetworkProximityService.h:26
wrench::NetworkProximityServiceProperty::NETWORK_PROXIMITY_SERVICE_TYPE
static const std::string NETWORK_PROXIMITY_SERVICE_TYPE
The type of network proximity implementation to be used:
Definition: NetworkProximityServiceProperty.h:31
wrench::NetworkProximityService::~NetworkProximityService
~NetworkProximityService() override
Destructor.
Definition: NetworkProximityService.cpp:36