neuray API Programmer's Manual

inode_manager.h File Reference

Description

Node manager API.

Code Example

inode_manager.h

‎/***************************************************************************************************
 * Copyright 2023 NVIDIA Corporation. All rights reserved.
 **************************************************************************************************/

#ifndef MI_NEURAYLIB_INODE_MANAGER_H
#define MI_NEURAYLIB_INODE_MANAGER_H

#include <mi/base/interface_declare.h>

namespace mi {

class IString;
class IMap;

namespace neuraylib {



class IWorker_node_descriptor : public
    mi::base::Interface_declare<0x29a6d6a5,0xfaa9,0x48dc,0x87,0xc5,0xee,0xa5,0x83,0x2c,0xe9,0xb3>
{
public:
    virtual const IString* get_address() const = 0;

    virtual bool is_in_cluster() const = 0;

    virtual const IMap* get_properties() const = 0;
};

class ICluster_descriptor : public
    mi::base::Interface_declare<0xf83a075b,0xf3d1,0x46a9,0xb6,0x75,0x91,0x10,0x1c,0xa3,0x5a,0x9f>
{
public:
    virtual const IString* get_multicast_address() const = 0;

    virtual Float64 
               get_timeout() const = 0;

    virtual const IMap* get_properties() const = 0;

    virtual Size 
               get_number_of_worker_nodes() const = 0;

    virtual const IWorker_node_descriptor* get_worker_node( Size index) const = 0;

    virtual const IWorker_node_descriptor* get_head_node() const = 0;

    virtual Size 
               get_number_of_client_nodes() const = 0;
};

class ICluster_property_callback : public
    mi::base::Interface_declare<0x36a1317b,0xfbc1,0x4ef5,0xbf,0x38,0x57,0x1a,0xca,0x6d,0x22,0x9f>
{
public:
    virtual void property_callback(
        const ICluster_descriptor* cluster_descriptor, const char* changed_property_name) = 0;
};

class IWorker_node_property_callback : public
    mi::base::Interface_declare<0x3c14c356,0xde2c,0x4991,0x9a,0x7f,0x50,0x53,0x5d,0x2a,0x9f,0x5a>
{
public:
    virtual void property_callback(
        const IWorker_node_descriptor* worker_descriptor, const char* changed_property_name) = 0;
};

class IClient_node_callback : public
    mi::base::Interface_declare<0x441ca19c,0xa7d7,0x46fa,0x92,0xc3,0x14,0xe0,0x4b,0x66,0x13,0x55>
{
public:
    virtual void membership_callback( const char* address, bool flag) = 0;
};

class IWorker_node_callback : public
    mi::base::Interface_declare<0xd5472198,0xf755,0x4db8,0x82,0x49,0x74,0xf7,0x95,0xb5,0x58,0xee>
{
public:
    virtual void membership_callback( IWorker_node_descriptor* worker_descriptor, bool flag) = 0;
};

class IHead_node_callback : public
    mi::base::Interface_declare<0xf07bba0e,0x249f,0x4c6d,0x97,0x57,0x48,0xa7,0xf8,0xe7,0xe6,0x5a>
{
public:
    virtual void head_node_callback( IWorker_node_descriptor* worker_descriptor) = 0;
};

class INode_manager_cluster;

class IShutdown_node_managers_callback : public
    mi::base::Interface_declare<0x9e876854,0x04a9,0x467f,0x85,0xe9,0xa4,0xb4,0xd1,0x2d,0x28,0x8d>
{
public:
    virtual void shutdown_node_managers_callback() = 0;
};

class IShutdown_cluster_callback : public
    mi::base::Interface_declare<0xadf38762,0x86db,0x4ba9,0x9d,0xde,0x1d,0x13,0xee,0x85,0xa0,0x45>
{
public:
    virtual void shutdown_cluster_callback(const ICluster_descriptor* cluster) = 0;
};

class IWorker_process_started_callback : public
    mi::base::Interface_declare<0x42b4ec43,0x9562,0x42fc,0x8b,0x8d,0xc8,0x55,0x6b,0x5e,0x50,0x3c>
{
public:
    virtual void worker_process_started_callback(IWorker_node_descriptor* worker_descriptor) = 0;
};

class INode_manager_cluster : public
    mi::base::Interface_declare<0x0a58b727,0x0ed4,0x4ecf,0x90,0x9a,0x30,0x7c,0x65,0xd4,0x47,0xe8>
{
public:
    virtual const ICluster_descriptor* get_cluster_descriptor() const = 0;

    enum Cluster_status
    {
        CLUSTER_ESTABLISHED = 0, 
        CLUSTER_SHUTDOWN = 1,    
        CLUSTER_FAILURE = 2,     
        CLUSTER_FORCE_32_BIT = 0xffffffffU
    };

    virtual Cluster_status 
               get_cluster_status() const = 0;

    virtual void set_timeout( Float64 timeout) = 0;

    virtual Sint32 
               set_cluster_property( const char* name, const char* value) = 0;

    virtual Sint32 
               remove_cluster_property( const char* name) = 0;

    virtual Sint32 
               start_worker_program(
        const char* program_name,
        const char* argument_string,
        Uint32 child_process_timeout = 0) = 0;

    virtual Sint32 
               shutdown_worker_program() = 0;

    virtual Sint32 
               restart_worker_program() = 0;

    virtual void shutdown() = 0;

    virtual IWorker_node_descriptor* get_head_node() = 0;

    virtual void add_worker_property_callback( IWorker_node_property_callback* callback) = 0;

    virtual void remove_worker_property_callback( IWorker_node_property_callback* callback) = 0;

    virtual void add_cluster_property_callback( ICluster_property_callback* callback) = 0;

    virtual void remove_cluster_property_callback( ICluster_property_callback* callback) = 0;

    virtual void add_worker_node_callback( IWorker_node_callback* callback) = 0;

    virtual void remove_worker_node_callback( IWorker_node_callback* callback) = 0;

    virtual void add_client_node_callback( IClient_node_callback* callback) = 0;

    virtual void remove_client_node_callback( IClient_node_callback* callback) = 0;

    virtual void add_head_node_callback( IHead_node_callback* callback) = 0;

    virtual void remove_head_node_callback( IHead_node_callback* callback) = 0;

    virtual const IWorker_node_descriptor* grow() = 0;

    virtual Sint32 
               shrink(const IWorker_node_descriptor* remove_node) = 0;
};

mi_static_assert( sizeof( INode_manager_cluster::Cluster_status) == sizeof( Uint32));

class ICluster_filter : public
    mi::base::Interface_declare<0x63a3ced9,0x9ae6,0x4c3a,0x80,0xc2,0x80,0x6b,0x27,0xff,0x40,0xd1>
{
public:
    virtual bool is_eligible( const ICluster_descriptor* cluster_descriptor) = 0;
};

class IWorker_node_filter : public
    mi::base::Interface_declare<0x9af36fa0,0xbe40,0x4fe4,0x89,0x03,0x37,0x7e,0x12,0xaf,0xcb,0xc8>
{
public:
    virtual bool is_eligible( const IWorker_node_descriptor* worker_node_descriptor) = 0;
};

class INode_manager_client : public
    mi::base::Interface_declare<0xe8feacc5,0x1f7c,0x4abc,0x8a,0x23,0x50,0x3c,0x56,0xf4,0xa6,0x63>
{
public:
    virtual Sint32 
               start( const char* listen_address,
                          bool tcp = false,
                          const char* discovery_address = 0,
                          const char* cluster_interface = 0) = 0;

    virtual Sint32 
               shutdown() = 0;

    virtual const IString* get_listen_address() const = 0;

    virtual Sint32 
               set_multicast_base_address( const char* base_address) = 0;

    virtual const IString* get_multicast_base_address() const = 0;

    virtual Size 
               get_number_of_worker_nodes() const = 0;

    virtual const IWorker_node_descriptor* get_worker_node( Size index) const = 0;

    virtual void add_shutdown_node_managers_callback(
        IShutdown_node_managers_callback* callback) = 0;

    virtual void remove_shutdown_node_managers_callback(
        IShutdown_node_managers_callback* callback) = 0;

    virtual void add_shutdown_cluster_callback(
        IShutdown_cluster_callback* callback) = 0;

    virtual void remove_shutdown_cluster_callback(
        IShutdown_cluster_callback* callback) = 0;

    virtual void add_worker_process_started_callback(
        IWorker_process_started_callback* callback) = 0;

    virtual void remove_worker_process_started_callback(
        IWorker_process_started_callback* callback) = 0;

    virtual Sint32 
               shutdown_cluster(
        const ICluster_descriptor* cluster_descriptor) = 0;

    static const Uint32 
               SIGNAL_STARTUP_ONLY = 0xffffffff;

    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;

    virtual Size 
               get_number_of_clusters() const = 0;

    virtual const ICluster_descriptor* get_cluster(Size index) const = 0;

    virtual void shutdown_node_managers() = 0;

    virtual void set_head_node_interface( const char* address) = 0;

    virtual const IString* get_head_node_interface() = 0;
};

class IChild_process_resolver : public
    mi::base::Interface_declare<0xbd1ab5cb,0x2794,0x4cd8,0x99,0xa9,0x30,0x36,0x32,0x8a,0xca,0xff>
{
public:
    virtual const IString* resolve_process(
        const char* program_name, const char* program_arguments) = 0;
};

class INode_manager_worker : public
    mi::base::Interface_declare<0xeb232bd5,0x0abf,0x4872,0xab,0x18,0x92,0x49,0x31,0x36,0xf9,0x91>
{
public:
    virtual Sint32 
               start( const char* listen_address = 0,
                          bool tcp = false,
                          const char* discovery_address = 0,
                          const char* cluster_interface = 0) = 0;

    virtual Sint32 
               shutdown() = 0;

    virtual const IString* get_listen_address() const = 0;

    virtual Sint32 
               set_multicast_base_address( const char* base_address) = 0;

    virtual const IString* get_multicast_base_address() const = 0;

    virtual Sint32 
               set_property( const char* name, const char* value) = 0;

    virtual const IString* get_property( const char* name) const = 0;

    virtual Sint32 
               remove_property( const char* name) = 0;

    virtual void set_child_process_resolver( IChild_process_resolver* child_process_resolver) = 0;

    virtual IChild_process_resolver* get_child_process_resolver() const = 0;

    virtual void add_shutdown_node_managers_callback(
        IShutdown_node_managers_callback* callback) = 0;

    virtual void remove_shutdown_node_managers_callback(
        IShutdown_node_managers_callback* callback) = 0;
};

class INode_manager_factory : public
    mi::base::Interface_declare<0xd54aaa9c,0x4798,0x4405,0xa4,0x58,0xd8,0x63,0x44,0xb4,0xb1,0xdd>
{
public:
    virtual INode_manager_client* create_client() = 0;

    virtual INode_manager_worker* create_worker() = 0;
};
 // end group mi_neuray_node_manager

} // namespace neuraylib

} // namespace mi

#endif // MI_NEURAYLIB_INODE_MANAGER_H

Namespaces

namespace 
Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH. More...
namespace 
Namespace for the neuray API. More...

Classes

class 
A filter used to decide if a command string to start a child process is eligible for execution. More...
class 
Abstract interface for signaling changed cluster members. More...
class 
This interface describes a cluster and its properties. More...
class 
A filter used to decide whether a cluster is eligible to be joined. More...
class 
Abstract interface for signaling changed cluster properties. More...
class 
Abstract interface for signaling a change of the cluster application head node. More...
class 
The node manager client allows to start or join clusters built from worker nodes. More...
class 
The interface to a cluster created and managed by the node manager. More...
class 
Factory to create node manager client and worker instances. More...
class 
The node manager worker class allows to set properties and announce them to other nodes. More...
class 
Abstract interface for signaling a request to shutdown a cluster. More...
class 
Abstract interface for signaling a request to shutdown all clients and workers. More...
class 
Abstract interface for signaling changed cluster members. More...
class 
This interface describes a worker node and its properties. More...
class 
A filter used to decide whether a worker node is eligible to be included in a cluster. More...
class 
Abstract interface for signaling changed worker node properties. More...
class 
Abstract interface for indicating that a worker process has been fully started. More...