DiCE API nvidia_logo_transpbg.gif Up
inode_manager.h
Go to the documentation of this file.
1/***************************************************************************************************
2 * Copyright 2023 NVIDIA Corporation. All rights reserved.
3 **************************************************************************************************/
6
7#ifndef MI_NEURAYLIB_INODE_MANAGER_H
8#define MI_NEURAYLIB_INODE_MANAGER_H
9
11
12namespace mi {
13
14class IString;
15class IMap;
16
17namespace neuraylib {
18
79
86 mi::base::Interface_declare<0x29a6d6a5,0xfaa9,0x48dc,0x87,0xc5,0xee,0xa5,0x83,0x2c,0xe9,0xb3>
87{
88public:
90 virtual const IString* get_address() const = 0;
91
93 virtual bool is_in_cluster() const = 0;
94
112 virtual const IMap* get_properties() const = 0;
113};
114
117 mi::base::Interface_declare<0xf83a075b,0xf3d1,0x46a9,0xb6,0x75,0x91,0x10,0x1c,0xa3,0x5a,0x9f>
118{
119public:
127 virtual const IString* get_multicast_address() const = 0;
128
135 virtual Float64 get_timeout() const = 0;
136
142 virtual const IMap* get_properties() const = 0;
143
145 virtual Size get_number_of_worker_nodes() const = 0;
146
156 virtual const IWorker_node_descriptor* get_worker_node( Size index) const = 0;
157
169 virtual const IWorker_node_descriptor* get_head_node() const = 0;
170
172 virtual Size get_number_of_client_nodes() const = 0;
173};
174
185 mi::base::Interface_declare<0x36a1317b,0xfbc1,0x4ef5,0xbf,0x38,0x57,0x1a,0xca,0x6d,0x22,0x9f>
186{
187public:
196 virtual void property_callback(
197 const ICluster_descriptor* cluster_descriptor, const char* changed_property_name) = 0;
198};
199
210 mi::base::Interface_declare<0x3c14c356,0xde2c,0x4991,0x9a,0x7f,0x50,0x53,0x5d,0x2a,0x9f,0x5a>
211{
212public:
221 virtual void property_callback(
222 const IWorker_node_descriptor* worker_descriptor, const char* changed_property_name) = 0;
223};
224
235 mi::base::Interface_declare<0x441ca19c,0xa7d7,0x46fa,0x92,0xc3,0x14,0xe0,0x4b,0x66,0x13,0x55>
236{
237public:
245 virtual void membership_callback( const char* address, bool flag) = 0;
246};
247
258 mi::base::Interface_declare<0xd5472198,0xf755,0x4db8,0x82,0x49,0x74,0xf7,0x95,0xb5,0x58,0xee>
259{
260public:
268 virtual void membership_callback( IWorker_node_descriptor* worker_descriptor, bool flag) = 0;
269};
270
281 mi::base::Interface_declare<0xf07bba0e,0x249f,0x4c6d,0x97,0x57,0x48,0xa7,0xf8,0xe7,0xe6,0x5a>
282{
283public:
290 virtual void head_node_callback( IWorker_node_descriptor* worker_descriptor) = 0;
291};
292
294
303 mi::base::Interface_declare<0x9e876854,0x04a9,0x467f,0x85,0xe9,0xa4,0xb4,0xd1,0x2d,0x28,0x8d>
304{
305public:
310};
311
320 mi::base::Interface_declare<0xadf38762,0x86db,0x4ba9,0x9d,0xde,0x1d,0x13,0xee,0x85,0xa0,0x45>
321{
322public:
326 virtual void shutdown_cluster_callback(const ICluster_descriptor* cluster) = 0;
327};
328
337 mi::base::Interface_declare<0x42b4ec43,0x9562,0x42fc,0x8b,0x8d,0xc8,0x55,0x6b,0x5e,0x50,0x3c>
338{
339public:
344 virtual void worker_process_started_callback(IWorker_node_descriptor* worker_descriptor) = 0;
345};
346
356 mi::base::Interface_declare<0x0a58b727,0x0ed4,0x4ecf,0x90,0x9a,0x30,0x7c,0x65,0xd4,0x47,0xe8>
357{
358public:
360 virtual const ICluster_descriptor* get_cluster_descriptor() const = 0;
361
366 {
370 CLUSTER_FORCE_32_BIT = 0xffffffffU
371 };
372
375
384 virtual void set_timeout( Float64 timeout) = 0;
385
399 virtual Sint32 set_cluster_property( const char* name, const char* value) = 0;
400
414 virtual Sint32 remove_cluster_property( const char* name) = 0;
415
466 const char* program_name,
467 const char* argument_string,
468 Uint32 child_process_timeout = 0) = 0;
469
480
490
495 virtual void shutdown() = 0;
496
509
519
526
536
543
553
560
570
577
585 virtual void add_head_node_callback( IHead_node_callback* callback) = 0;
586
592 virtual void remove_head_node_callback( IHead_node_callback* callback) = 0;
593
603 virtual const IWorker_node_descriptor* grow() = 0;
604
613 virtual Sint32 shrink(const IWorker_node_descriptor* remove_node) = 0;
614};
615
617
619class ICluster_filter : public
620 mi::base::Interface_declare<0x63a3ced9,0x9ae6,0x4c3a,0x80,0xc2,0x80,0x6b,0x27,0xff,0x40,0xd1>
621{
622public:
627 virtual bool is_eligible( const ICluster_descriptor* cluster_descriptor) = 0;
628};
629
632 mi::base::Interface_declare<0x9af36fa0,0xbe40,0x4fe4,0x89,0x03,0x37,0x7e,0x12,0xaf,0xcb,0xc8>
633{
634public:
640 virtual bool is_eligible( const IWorker_node_descriptor* worker_node_descriptor) = 0;
641};
642
648 mi::base::Interface_declare<0xe8feacc5,0x1f7c,0x4abc,0x8a,0x23,0x50,0x3c,0x56,0xf4,0xa6,0x63>
649{
650public:
663 virtual Sint32 start( const char* listen_address,
664 bool tcp = false,
665 const char* discovery_address = 0,
666 const char* cluster_interface = 0) = 0;
667
671 virtual Sint32 shutdown() = 0;
672
676 virtual const IString* get_listen_address() const = 0;
677
690 virtual Sint32 set_multicast_base_address( const char* base_address) = 0;
691
702 virtual const IString* get_multicast_base_address() const = 0;
703
705 virtual Size get_number_of_worker_nodes() const = 0;
706
716 virtual const IWorker_node_descriptor* get_worker_node( Size index) const = 0;
717
726
735
742 IShutdown_cluster_callback* callback) = 0;
743
751 IShutdown_cluster_callback* callback) = 0;
752
760
768
775 const ICluster_descriptor* cluster_descriptor) = 0;
776
782 static const Uint32 SIGNAL_STARTUP_ONLY = 0xffffffff;
783
878 Size min_number_of_requested_worker_nodes,
879 Size max_number_of_requested_worker_nodes,
880 ICluster_filter* cluster_filter,
881 IWorker_node_filter* worker_node_filter,
882 const char* program_name,
883 const char* argument_string,
884 bool reusable = false,
885 Uint32 child_process_timeout = 0) = 0;
886
888 virtual Size get_number_of_clusters() const = 0;
889
899 virtual const ICluster_descriptor* get_cluster(Size index) const = 0;
900
904 virtual void shutdown_node_managers() = 0;
905
917 virtual void set_head_node_interface( const char* address) = 0;
918
924 virtual const IString* get_head_node_interface() = 0;
925};
926
930 mi::base::Interface_declare<0xbd1ab5cb,0x2794,0x4cd8,0x99,0xa9,0x30,0x36,0x32,0x8a,0xca,0xff>
931{
932public:
946 virtual const IString* resolve_process(
947 const char* program_name, const char* program_arguments) = 0;
948};
949
955 mi::base::Interface_declare<0xeb232bd5,0x0abf,0x4872,0xab,0x18,0x92,0x49,0x31,0x36,0xf9,0x91>
956{
957public:
976 virtual Sint32 start( const char* listen_address = 0,
977 bool tcp = false,
978 const char* discovery_address = 0,
979 const char* cluster_interface = 0) = 0;
980
984 virtual Sint32 shutdown() = 0;
985
989 virtual const IString* get_listen_address() const = 0;
990
1003 virtual Sint32 set_multicast_base_address( const char* base_address) = 0;
1004
1015 virtual const IString* get_multicast_base_address() const = 0;
1016
1028 virtual Sint32 set_property( const char* name, const char* value) = 0;
1029
1037 virtual const IString* get_property( const char* name) const = 0;
1038
1050 virtual Sint32 remove_property( const char* name) = 0;
1051
1060 virtual void set_child_process_resolver( IChild_process_resolver* child_process_resolver) = 0;
1061
1068
1075 IShutdown_node_managers_callback* callback) = 0;
1076
1084 IShutdown_node_managers_callback* callback) = 0;
1085};
1086
1089 mi::base::Interface_declare<0xd54aaa9c,0x4798,0x4405,0xa4,0x58,0xd8,0x63,0x44,0xb4,0xb1,0xdd>
1090{
1091public:
1094
1097};
1098 // end group mi_neuray_node_manager
1100
1101} // namespace neuraylib
1102
1103} // namespace mi
1104
1105#endif // MI_NEURAYLIB_INODE_MANAGER_H
This interface represents maps, i.e., a key-value based data structure.
Definition: imap.h:41
A simple string class.
Definition: istring.h:22
Mixin class template for deriving new interface declarations.
Definition: interface_declare.h:43
A filter used to decide if a command string to start a child process is eligible for execution.
Definition: inode_manager.h:931
virtual const IString * resolve_process(const char *program_name, const char *program_arguments)=0
Indicates whether a command string to start a child process should be executed by the worker node.
Abstract interface for signaling changed cluster members.
Definition: inode_manager.h:236
virtual void membership_callback(const char *address, bool flag)=0
This function is called when a remote client joined or left the cluster.
This interface describes a cluster and its properties.
Definition: inode_manager.h:118
virtual Size get_number_of_worker_nodes() const =0
Returns the number of worker nodes in the cluster.
virtual Size get_number_of_client_nodes() const =0
Returns the number of client nodes connected to the cluster.
virtual Float64 get_timeout() const =0
Returns the keep-alive timeout for the cluster.
virtual const IWorker_node_descriptor * get_worker_node(Size index) const =0
Returns a descriptor for a worker node in the cluster.
virtual const IString * get_multicast_address() const =0
Returns the multicast address reserved for the cluster.
virtual const IMap * get_properties() const =0
Returns the properties of the cluster.
virtual const IWorker_node_descriptor * get_head_node() const =0
Returns the head node.
A filter used to decide whether a cluster is eligible to be joined.
Definition: inode_manager.h:621
virtual bool is_eligible(const ICluster_descriptor *cluster_descriptor)=0
Indicates whether a cluster is eligible to be joined.
Abstract interface for signaling changed cluster properties.
Definition: inode_manager.h:186
virtual void property_callback(const ICluster_descriptor *cluster_descriptor, const char *changed_property_name)=0
This function is called when a cluster property change was communicated.
Abstract interface for signaling a change of the cluster application head node.
Definition: inode_manager.h:282
virtual void head_node_callback(IWorker_node_descriptor *worker_descriptor)=0
This function is called when a cluster node becomes cluster head node.
The node manager client allows to start or join DiCE clusters built from worker nodes.
Definition: inode_manager.h:649
virtual void remove_shutdown_cluster_callback(IShutdown_cluster_callback *callback)=0
Removes a previously added callback to be called when a request to shutdown a cluster is received.
virtual const ICluster_descriptor * get_cluster(Size index) const =0
Returns a descriptor for a cluster.
virtual void set_head_node_interface(const char *address)=0
Set the head node address and subnet qualifier.
virtual void remove_shutdown_node_managers_callback(IShutdown_node_managers_callback *callback)=0
Removes a previously added callback to be called when a request to shutdown all clients and workers i...
virtual const IWorker_node_descriptor * get_worker_node(Size index) const =0
Returns a descriptor for a worker node currently known to the node manager.
virtual const IString * get_multicast_base_address() const =0
Returns the multicast base address.
static const Uint32 SIGNAL_STARTUP_ONLY
Symbolic constant to pass as child_process_timeout to join_or_create_cluster.
Definition: inode_manager.h:782
virtual Sint32 start(const char *listen_address, bool tcp=false, const char *discovery_address=0, const char *cluster_interface=0)=0
Starts the operation of the node manager.
virtual void add_shutdown_cluster_callback(IShutdown_cluster_callback *callback)=0
Adds a callback to be called when a request to shutdown a cluster is received.
virtual const IString * get_head_node_interface()=0
Get the head node address and subnet qualifier.
virtual Sint32 shutdown()=0
Shuts down the operation of the node manager.
virtual Size get_number_of_worker_nodes() const =0
Returns the number of worker nodes currently known to the node manager.
virtual Size get_number_of_clusters() const =0
Returns the number of existing clusters.
virtual const IString * get_listen_address() const =0
Returns the listen address used by the node manager.
virtual INode_manager_cluster * join_or_create_cluster(Size min_number_of_requested_worker_nodes, Size max_number_of_requested_worker_nodes, ICluster_filter *cluster_filter, IWorker_node_filter *worker_node_filter, const char *program_name, const char *argument_string, bool reusable=false, Uint32 child_process_timeout=0)=0
Joins an existing cluster or creates a new one.
virtual Sint32 shutdown_cluster(const ICluster_descriptor *cluster_descriptor)=0
Unconditionally shut down the cluster that cluster_descriptor refers to and release reserved worker n...
virtual void remove_worker_process_started_callback(IWorker_process_started_callback *callback)=0
Removed a callback to be called when a worker process has been fully started.
virtual Sint32 set_multicast_base_address(const char *base_address)=0
Sets the multicast base address.
virtual void shutdown_node_managers()=0
Shuts down all node manager clients and workers which are currently joined.
virtual void add_worker_process_started_callback(IWorker_process_started_callback *callback)=0
Adds a callback to be called when a worker process has been fully started.
virtual void add_shutdown_node_managers_callback(IShutdown_node_managers_callback *callback)=0
Adds a callback to be called when a request to shutdown all clients and workers is received.
The interface to a cluster created and managed by the node manager.
Definition: inode_manager.h:357
virtual void remove_cluster_property_callback(ICluster_property_callback *callback)=0
Removes a previously added callback for cluster property changes.
virtual void set_timeout(Float64 timeout)=0
Sets the keep-alive timeout for the cluster.
virtual Cluster_status get_cluster_status() const =0
Returns the status of the cluster.
virtual void add_client_node_callback(IClient_node_callback *callback)=0
Adds a callback to be called when a client joins or leaves the cluster.
virtual Sint32 shrink(const IWorker_node_descriptor *remove_node)=0
Shrinks the cluster by one node.
virtual void add_head_node_callback(IHead_node_callback *callback)=0
Adds a callback to be called when a new node becomes head node.
virtual IWorker_node_descriptor * get_head_node()=0
Returns the head node.
virtual void shutdown()=0
Initiates the shutdown of the cluster.
virtual Sint32 start_worker_program(const char *program_name, const char *argument_string, Uint32 child_process_timeout=0)=0
Starts a worker program if none has been started when the cluster has been created.
virtual Sint32 shutdown_worker_program()=0
Shuts down the program that was started on all worker nodes when the cluster was created.
Cluster_status
Possible cluster states.
Definition: inode_manager.h:366
@ CLUSTER_ESTABLISHED
The cluster has been successfully established.
Definition: inode_manager.h:367
@ CLUSTER_SHUTDOWN
The cluster has been shutdown.
Definition: inode_manager.h:368
@ CLUSTER_FAILURE
The cluster has failed for unspecified reasons.
Definition: inode_manager.h:369
virtual Sint32 restart_worker_program()=0
Restarts the program that is supposed to run on all workers.
virtual const IWorker_node_descriptor * grow()=0
Grows the cluster by one node, if a worker node is available.
virtual Sint32 set_cluster_property(const char *name, const char *value)=0
Sets a cluster property.
virtual void remove_worker_node_callback(IWorker_node_callback *callback)=0
Removes a previously added callback for joined or left worker nodes.
virtual void remove_head_node_callback(IHead_node_callback *callback)=0
Removes a previously added callback for notification about a new head node.
virtual void remove_worker_property_callback(IWorker_node_property_callback *callback)=0
Removes a previously added callback for property changes of worker nodes.
virtual void add_worker_node_callback(IWorker_node_callback *callback)=0
Adds a callback to be called when a worker node joins or leaves the cluster.
virtual const ICluster_descriptor * get_cluster_descriptor() const =0
Returns the cluster descriptor for the cluster.
virtual Sint32 remove_cluster_property(const char *name)=0
Removes a cluster property.
virtual void add_cluster_property_callback(ICluster_property_callback *callback)=0
Adds a callback to be called when a cluster property changes.
virtual void remove_client_node_callback(IClient_node_callback *callback)=0
Removes a previously added callback for joined or left client nodes.
virtual void add_worker_property_callback(IWorker_node_property_callback *callback)=0
Adds a callback to be called when a property of a worker node changes.
Factory to create node manager client and worker instances.
Definition: inode_manager.h:1090
virtual INode_manager_client * create_client()=0
Creates a node manager client instance.
virtual INode_manager_worker * create_worker()=0
Creates a node manager worker instance.
The node manager worker class allows to set properties and announce them to other nodes.
Definition: inode_manager.h:956
virtual void remove_shutdown_node_managers_callback(IShutdown_node_managers_callback *callback)=0
Removes a previously added callback to be called when a request to shutdown all clients and workers i...
virtual const IString * get_property(const char *name) const =0
Returns a property of a worker node.
virtual const IString * get_listen_address() const =0
Returns the listen address used by the node manager.
virtual IChild_process_resolver * get_child_process_resolver() const =0
Returns the child process resolver.
virtual const IString * get_multicast_base_address() const =0
Returns the multicast base address.
virtual Sint32 remove_property(const char *name)=0
Removes a property of a worker node.
virtual Sint32 shutdown()=0
Shuts down the operation of the node manager.
virtual Sint32 set_multicast_base_address(const char *base_address)=0
Sets the multicast base address.
virtual Sint32 start(const char *listen_address=0, bool tcp=false, const char *discovery_address=0, const char *cluster_interface=0)=0
Starts the operation of the node manager.
virtual void set_child_process_resolver(IChild_process_resolver *child_process_resolver)=0
Sets the child process resolver.
virtual void add_shutdown_node_managers_callback(IShutdown_node_managers_callback *callback)=0
Adds a callback to be called when a request to shutdown all clients and workers is received.
virtual Sint32 set_property(const char *name, const char *value)=0
Sets a property of a worker node.
Abstract interface for signaling a request to shutdown a cluster.
Definition: inode_manager.h:321
virtual void shutdown_cluster_callback(const ICluster_descriptor *cluster)=0
This function is called when a request to shutdown a cluster is being received.
Abstract interface for signaling a request to shutdown all clients and workers.
Definition: inode_manager.h:304
virtual void shutdown_node_managers_callback()=0
This function is called when a request to shutdown all clients and workers is received.
Abstract interface for signaling changed cluster members.
Definition: inode_manager.h:259
virtual void membership_callback(IWorker_node_descriptor *worker_descriptor, bool flag)=0
This function is called when a worker node joined or left the cluster.
This interface describes a worker node and its properties.
Definition: inode_manager.h:87
virtual bool is_in_cluster() const =0
Indicates whether the worker node is currently a member of a cluster.
virtual const IString * get_address() const =0
Returns the IP address of the worker node.
virtual const IMap * get_properties() const =0
Returns the properties of the worker node.
A filter used to decide whether a worker node is eligible to be included in a cluster.
Definition: inode_manager.h:633
virtual bool is_eligible(const IWorker_node_descriptor *worker_node_descriptor)=0
Indicates whether a worker node is eligible to be included in a cluster.
Abstract interface for signaling changed worker node properties.
Definition: inode_manager.h:211
virtual void property_callback(const IWorker_node_descriptor *worker_descriptor, const char *changed_property_name)=0
This function is called when a worker node property change was communicated.
Abstract interface for indicating that a worker process has been fully started.
Definition: inode_manager.h:338
virtual void worker_process_started_callback(IWorker_node_descriptor *worker_descriptor)=0
This function is called when the worker process on the node represented by the worker_descriptor has ...
#define mi_static_assert(expr)
Compile time assertion that raises a compilation error if the constant expression expr evaluates to f...
Definition: assert.h:65
unsigned int Uint32
32-bit unsigned integer.
Definition: types.h:49
Uint64 Size
Unsigned integral type that is large enough to hold the size of all types.
Definition: types.h:112
double Float64
64-bit float.
Definition: types.h:52
signed int Sint32
32-bit signed integer.
Definition: types.h:46
Mixin class template for deriving new interface declarations.
Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH.
Definition: dice.h:89