NVIDIA Iray API Home  Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
inode_manager.h
Go to the documentation of this file.
1 //*****************************************************************************
2 // Copyright 1986, 2016 NVIDIA Corporation. All rights reserved.
3 //*****************************************************************************
6 //*****************************************************************************
7 
8 #ifndef MI_NEURAYLIB_INODE_MANAGER_H
9 #define MI_NEURAYLIB_INODE_MANAGER_H
10 
12 #include <mi/neuraylib/version.h>
13 
14 namespace mi {
15 
16 class IString;
17 class IMap;
18 
19 namespace neuraylib {
20 
81 
86 class IWorker_node_descriptor : public
88  mi::base::Interface_declare<0x29a6d6a5,0xfaa9,0x48dc,0x87,0xc5,0xee,0xa5,0x83,0x2c,0xe9,0xb3>
89 {
90 public:
92  virtual const IString* get_address() const = 0;
93 
95  virtual bool is_in_cluster() const = 0;
96 
114  virtual const IMap* get_properties() const = 0;
115 };
116 
118 class ICluster_descriptor : public
119  mi::base::Interface_declare<0xf83a075b,0xf3d1,0x46a9,0xb6,0x75,0x91,0x10,0x1c,0xa3,0x5a,0x9f>
120 {
121 public:
129  virtual const IString* get_multicast_address() const = 0;
130 
137  virtual Float64 get_timeout() const = 0;
138 
144  virtual const IMap* get_properties() const = 0;
145 
147  virtual Size get_number_of_worker_nodes() const = 0;
148 
158  virtual const IWorker_node_descriptor* get_worker_node( Size index) const = 0;
159 
171  virtual const IWorker_node_descriptor* get_head_node() const = 0;
172 
174  virtual Size get_number_of_client_nodes() const = 0;
175 };
176 
187  mi::base::Interface_declare<0x36a1317b,0xfbc1,0x4ef5,0xbf,0x38,0x57,0x1a,0xca,0x6d,0x22,0x9f>
188 {
189 public:
198  virtual void property_callback(
199  const ICluster_descriptor* cluster_descriptor, const char* changed_property_name) = 0;
200 };
201 
212  mi::base::Interface_declare<0x3c14c356,0xde2c,0x4991,0x9a,0x7f,0x50,0x53,0x5d,0x2a,0x9f,0x5a>
213 {
214 public:
223  virtual void property_callback(
224  const IWorker_node_descriptor* worker_descriptor, const char* changed_property_name) = 0;
225 };
226 
236 class IClient_node_callback : public
237  mi::base::Interface_declare<0x441ca19c,0xa7d7,0x46fa,0x92,0xc3,0x14,0xe0,0x4b,0x66,0x13,0x55>
238 {
239 public:
247  virtual void membership_callback( const char* address, bool flag) = 0;
248 };
249 
259 class IWorker_node_callback : public
260  mi::base::Interface_declare<0xd5472198,0xf755,0x4db8,0x82,0x49,0x74,0xf7,0x95,0xb5,0x58,0xee>
261 {
262 public:
270  virtual void membership_callback( IWorker_node_descriptor* worker_descriptor, bool flag) = 0;
271 };
272 
282 class IHead_node_callback : public
283  mi::base::Interface_declare<0xf07bba0e,0x249f,0x4c6d,0x97,0x57,0x48,0xa7,0xf8,0xe7,0xe6,0x5a>
284 {
285 public:
292  virtual void head_node_callback( IWorker_node_descriptor* worker_descriptor) = 0;
293 };
294 
296 
305  mi::base::Interface_declare<0x9e876854,0x04a9,0x467f,0x85,0xe9,0xa4,0xb4,0xd1,0x2d,0x28,0x8d>
306 {
307 public:
311  virtual void shutdown_node_managers_callback() = 0;
312 };
313 
322  mi::base::Interface_declare<0xadf38762,0x86db,0x4ba9,0x9d,0xde,0x1d,0x13,0xee,0x85,0xa0,0x45>
323 {
324 public:
328  virtual void shutdown_cluster_callback(const ICluster_descriptor* cluster) = 0;
329 };
330 
339  mi::base::Interface_declare<0x42b4ec43,0x9562,0x42fc,0x8b,0x8d,0xc8,0x55,0x6b,0x5e,0x50,0x3c>
340 {
341 public:
346  virtual void worker_process_started_callback(IWorker_node_descriptor* worker_descriptor) = 0;
347 };
348 
357 class INode_manager_cluster : public
358  mi::base::Interface_declare<0x0a58b727,0x0ed4,0x4ecf,0x90,0x9a,0x30,0x7c,0x65,0xd4,0x47,0xe8>
359 {
360 public:
362  virtual const ICluster_descriptor* get_cluster_descriptor() const = 0;
363 
368  {
372  CLUSTER_FORCE_32_BIT = 0xffffffffU
373  };
374 
376  virtual Cluster_status get_cluster_status() const = 0;
377 
386  virtual void set_timeout( Float64 timeout) = 0;
387 
401  virtual Sint32 set_cluster_property( const char* name, const char* value) = 0;
402 
416  virtual Sint32 remove_cluster_property( const char* name) = 0;
417 
466  const char* program_name,
467  const char* argument_string,
468  Uint32 child_process_timeout = 0) = 0;
469 
479  virtual Sint32 shutdown_worker_program() = 0;
480 
489  virtual Sint32 restart_worker_program() = 0;
490 
495  virtual void shutdown() = 0;
496 
508  virtual IWorker_node_descriptor* get_head_node() = 0;
509 
519 
526 
535  virtual void add_cluster_property_callback( ICluster_property_callback* callback) = 0;
536 
543 
552  virtual void add_worker_node_callback( IWorker_node_callback* callback) = 0;
553 
559  virtual void remove_worker_node_callback( IWorker_node_callback* callback) = 0;
560 
569  virtual void add_client_node_callback( IClient_node_callback* callback) = 0;
570 
576  virtual void remove_client_node_callback( IClient_node_callback* callback) = 0;
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 };
594 
596 
598 class ICluster_filter : public
599  mi::base::Interface_declare<0x63a3ced9,0x9ae6,0x4c3a,0x80,0xc2,0x80,0x6b,0x27,0xff,0x40,0xd1>
600 {
601 public:
606  virtual bool is_eligible( const ICluster_descriptor* cluster_descriptor) = 0;
607 };
608 
610 class IWorker_node_filter : public
611  mi::base::Interface_declare<0x9af36fa0,0xbe40,0x4fe4,0x89,0x03,0x37,0x7e,0x12,0xaf,0xcb,0xc8>
612 {
613 public:
619  virtual bool is_eligible( const IWorker_node_descriptor* worker_node_descriptor) = 0;
620 };
621 
626 class INode_manager_client : public
627  mi::base::Interface_declare<0xe8feacc5,0x1f7c,0x4abc,0x8a,0x23,0x50,0x3c,0x56,0xf4,0xa6,0x63>
628 {
629 public:
642  virtual Sint32 start( const char* listen_address,
643  bool tcp = false,
644  const char* discovery_address = NULL,
645  const char* cluster_interface = NULL) = 0;
646 
650  virtual Sint32 shutdown() = 0;
651 
655  virtual const IString* get_listen_address() const = 0;
656 
669  virtual Sint32 set_multicast_base_address( const char* base_address) = 0;
670 
681  virtual const IString* get_multicast_base_address() const = 0;
682 
684  virtual Size get_number_of_worker_nodes() const = 0;
685 
695  virtual const IWorker_node_descriptor* get_worker_node( Size index) const = 0;
696 
704  IShutdown_node_managers_callback* callback) = 0;
705 
713  IShutdown_node_managers_callback* callback) = 0;
714 
720  virtual void add_shutdown_cluster_callback(
721  IShutdown_cluster_callback* callback) = 0;
722 
730  IShutdown_cluster_callback* callback) = 0;
731 
738  IWorker_process_started_callback* callback) = 0;
739 
746  IWorker_process_started_callback* callback) = 0;
747 
753  virtual Sint32 shutdown_cluster(
754  const ICluster_descriptor* cluster_descriptor) = 0;
755 
761  static const Uint32 SIGNAL_STARTUP_ONLY = 0xffffffff;
762 
854  Size min_number_of_requested_worker_nodes,
855  Size max_number_of_requested_worker_nodes,
856  ICluster_filter* cluster_filter,
857  IWorker_node_filter* worker_node_filter,
858  const char* program_name,
859  const char* argument_string,
860  bool reusable = false,
861  Uint32 child_process_timeout = 0) = 0;
862 
864  virtual Size get_number_of_clusters() const = 0;
865 
875  virtual const ICluster_descriptor* get_cluster(Size index) const = 0;
876 
880  virtual void shutdown_node_managers() = 0;
881 
893  virtual void set_head_node_interface( const char* address) = 0;
894 
900  virtual const IString* get_head_node_interface() = 0;
901 };
902 
905 class IChild_process_resolver : public
906  mi::base::Interface_declare<0xbd1ab5cb,0x2794,0x4cd8,0x99,0xa9,0x30,0x36,0x32,0x8a,0xca,0xff>
907 {
908 public:
922  virtual const IString* resolve_process(
923  const char* program_name, const char* program_arguments) = 0;
924 };
925 
930 class INode_manager_worker : public
931  mi::base::Interface_declare<0xeb232bd5,0x0abf,0x4872,0xab,0x18,0x92,0x49,0x31,0x36,0xf9,0x91>
932 {
933 public:
952  virtual Sint32 start( const char* listen_address = NULL,
953  bool tcp = false,
954  const char* discovery_address = NULL,
955  const char* cluster_interface = NULL) = 0;
956 
960  virtual Sint32 shutdown() = 0;
961 
965  virtual const IString* get_listen_address() const = 0;
966 
979  virtual Sint32 set_multicast_base_address( const char* base_address) = 0;
980 
991  virtual const IString* get_multicast_base_address() const = 0;
992 
1004  virtual Sint32 set_property( const char* name, const char* value) = 0;
1005 
1013  virtual const IString* get_property( const char* name) const = 0;
1014 
1026  virtual Sint32 remove_property( const char* name) = 0;
1027 
1036  virtual void set_child_process_resolver( IChild_process_resolver* child_process_resolver) = 0;
1037 
1044 
1051  IShutdown_node_managers_callback* callback) = 0;
1052 
1060  IShutdown_node_managers_callback* callback) = 0;
1061 };
1062 
1064 class INode_manager_factory : public
1065  mi::base::Interface_declare<0xd54aaa9c,0x4798,0x4405,0xa4,0x58,0xd8,0x63,0x44,0xb4,0xb1,0xdd>
1066 {
1067 public:
1069  virtual INode_manager_client* create_client() = 0;
1070 
1072  virtual INode_manager_worker* create_worker() = 0;
1073 };
1074  // end group mi_neuray_node_manager
1076 
1077 } // namespace neuraylib
1078 
1079 } // namespace mi
1080 
1081 #endif // MI_NEURAYLIB_INODE_MANAGER_H