Node Deploy Configuration

This article describes the node deploy configuration file. It provides an overview of how node deploy configuration files are used, a conceptual model of the node deploy configuration file, and a detailed description of all configuration values.

This chapter assumes that you are familiar with the configuration file syntax described in HOCON Syntax Reference.

Overview

The node deploy configuration file is used to define deployment-time values, and to also override, and possibly augment, default application configuration. Deployment time configuration can be specified for multiple nodes in a single node deploy configuration file. The nodes can be in the same or different clusters. The node configuration to use from the node deploy configuration file when installing a node is determined by matching the node name being installed with a node name in the node deploy configuration file. This is shown in Example 1, “Node configuration selection”.

Example 1. Node configuration selection

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy
    {
        //
        //    Define a cluster X with three nodes
        //    
        nodes =
         {
            //
            //    Node A.X configuration
            //
            "A.X" = { }

            //
            //    Node B.X configuration
            //
            "B.X" = { }

            //
            //    Node C.X configuration
            //
            "C.X" = { }
        }
    }
}

//
//  Install node A.x - use A.X node configuration in nodedeploy.conf
//
epadmin install node --nodename=A.X ... --nodedeploy=nodedeploy.conf

Node deployment configuration files can be specified on the install node command line, or they can be packaged in an application archive. Packing a node deployment configuration in an application archive provides an easy mechanism to ship application specific default node deploy configuration values.

In addition to the configuration data defined in a node deploy configuration file, the node deploy configuration can also contain arbitrary configuration. There are two sections in the node deploy configuration file for this configuration:

  • global — applies to all nodes defined in the node deployment configuration file. See NodeDeploy for details.

  • per-node — applies to a specific node in the node deployment configuration file. See Node for details.

Warning

Configuration embedded in the global and per-node sections of a node deployment configuration file are only processed when the node deployment configuration file is passed to install node. Any configuration in these sections is ignored when loading and activating configuration using the load and activate configuration commands.

Configuration files can also be contained in the fragments in an application archive and in the application itself.

See 2 for details on configuration load order.


Audits

The node deploy configuration is audited whenever it changes state, such as load to active. There are detailed audits for each of the configuration objects in the node deploy configuration file. These are described in Configuration Objects. There are also these audits enforced on node deploy configuration during application installation.

  • Node deploy configuration can only be contained in an application archive. Node deploy configurations cannot be contained in fragment archives. Node deploy configurations found in a fragment archive will cause an audit failure during application installation.

  • There can only be a single node deploy configuration in an application archive. Multiple node deploy configurations in an application archive will cause an audit failure during application installation.

  • All node deploy configurations loaded when a node is installed must have the same configuration name. Node deploy configurations with different configuration names will cause an audit failure during application installation.

Configuration Map

Figure 1, “Node deployment configuration map” shows a map of the relationships between all of the configuration objects in a node deployment configuration file. It also shows all external relationships to the application definition configuration and the application archive.

Node deployment configuration map

Node deployment configuration map

See the following slices of this map, blown up to readable size. First, the left side:

The center:

And the right side:

The node deploy configuration has a configuration type of com.tibco.ep.dtm.configuration.node.

Configuration Objects

This section provides detailed descriptions for all properties in each node deploy configuration object. A snippet is also provided for each configuration object showing the syntax for specifying all of the configuration values.

NodeDeploy

The NodeDeploy object is the top-level container for all of the node deploy configuration. Figure 2, “NodeDeploy relationships” shows the relationships to other configuration objects.

NodeDeploy relationships

NodeDeploy relationships

A detailed description of the configuration object properties is in NodeDeploy object properties and a snippet for these properties is in Example 2, “NodeDeploy object snippet”.

NodeDeploy object properties

Name Type Description
nodes Associative array of Node objects keyed by fully qualified node service name. Nodes (see Node) configured in this file. The nodes may be in the same or different clusters. At least one node must be defined.
availabilityZones Associative array of AvailabilityZone objects keyed by availability zone name. Availability zone configurations (see AvailabilityZone). Optional. No default.
globalConfiguration String [ ] Array of configuration data that applies to all configured nodes. Optional. No default.

Example 2. NodeDeploy object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        globalConfiguration = 
        [
            """
            name = "mysecurity"
            type = "com.acme.security.keystore"
            version = "1.0.0"
            configuration =
            {
                CommunicationSecurity =
                {
                    keyStore = "myKeyStore.jks"
                    keyStorePassword = "secret"
                }
            }
            """
        ]

        nodes =
        {
            "A.X" = { ... }
            "B.X" = { ... }
            "C.X" = { ... }
        }

        availabilityZones = 
        {
           "elastic-credit" = { ... }
           "elastic-debit" = { ... }
        }
    }
}


Node

The Node object defines the configuration for a specific node. Figure 3, “Node relationships” shows the relationships to other configuration objects.

Node relationships

Node relationships

A detailed description of the configuration object properties is in Node object properties and a snippet for these properties is in Example 3, “Node object snippet”.

Node object properties

Name Type Description
nodeType String The node's type, as defined in the application definition configuration. Optional. Default value is a built-in node type of default.
description String Node description. Optional. Default value is node name.
engines Associative array of EngineBinding objects keyed by engine name. Engine bindings (see EngineBinding) for this node. Optional. Default runs a single engine for each top-level fragment in the node type being deployed on the node.
communication Communication configuration object. Network communication configuration for the node. Optional. See Communication for default values.
configuration String [ ] Array of configuration data that applies to this node. Optional. No default.
availabilityZoneMemberships Associative array of AvailabilityZoneMembership objects keyed by availability zone names. Availability zone membership for the node (see AvailabilityZoneMembership). The availability zone must be defined in NodeDeploy.availabilityZones. Optional. No default.
routerBindings RouterBinding [ ] Router bindings for the node (see RouterBinding). Optional. No default.

Example 3. Node object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes =
        {
            "A.X" =
            {
                nodeType = "large-resources"
                description = "My application node"
                engines =
                {
                    "settlement-engine" = { ... }
                }
                communication = { ... }
                configuration = 
                [
                    """
                    name = "mysecurity"
                    type = "com.acme.security.keystore"
                    version = "1.0.0"              
                    configuration =                           
                    {   
                        CommunicationSecurity =                                            
                        {                                                                                  
                            keyStore = "myKeyStore.jks"                                                                        
                            keyStorePassword = "secret"                                                                                            
                        }   
                    }
                    """,
                    """
                    name = "myusers"
                    type = "com.acme.security.users"
                    version = "1.0.0"              
                    configuration =                            
                    {   
                        Principal =                                            
                        {                                                                                  
                            principal = "road-runner"                                                                                            
                        }   
                    }
                    """ 
                ]  
                availabilityZoneMemberships =
                {
                    "cross-data-center" = { ... }
                }
                routerBinding =
                [
                   { ... }
                ]
            }
        }   
    }       
}

EngineBinding

The EngineBinding object associates an engine name with it's fragment and optional engine specific configuration. Figure 4, “EngineBinding relationships” shows the relationships to other configuration objects.

EngineBinding relationships

EngineBinding relationships

A detailed description of the configuration object properties is in EngineBinding object properties and a snippet for these properties is in Example 4, “EngineBinding object snippet”.

EngineBinding object properties

Name Type Description
fragmentIdentifier String Fragment to run on this engine. A fragment with this identifier must exist in the application archive. Required.
configuration String [ ] Array of configuration data that applies to this engine. Optional. No default.

Example 4. EngineBinding object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
                engines =
                {
                    "settlement-engine" = 
                    {
                        fragmentIdentifier = "settlement-engine-fragment"
                        configuration =
                        [
                           """
                           name = "my-engine-stuff"
                           type = "com.acme.engine"
                           version = "1.0.0"              
                           configuration =                           
                           {   
                               AcmeEngine =                                            
                               {                                                                                  
                                  name = "value"
                               }
                           }
                           """
                        ]
                    }
                }
            }   
        }
    }
}

RouterBinding

The RouterBinding object associates a router with a node and optionally an availability zone. Figure 5, “RouterBinding relationships” shows the relationships to other configuration objects.

RouterBinding relationships

RouterBinding relationships

A detailed description of the configuration object properties is in RouterBinding object properties and a snippet for these properties is in Example 5, “RouterBinding object snippet”.

RouterBinding object properties

Name Type Description
routerName String Router to associate with this node. A router with this name must exist in the application definition configuration. Required.
availabilityZone Reference to AvailabilityZone object. Associate a router with an availability zone (see AvailabilityZone). If specified, the availability zone must exist in the node deploy configuration file. Optional. Router is not associated with an availability zone by default.

Example 5. RouterBinding object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
                routerBindings =
                [
                    {
                        routerName = "my-partition-router"
                        availabilityZone = "active-active"
                    }
                    {
                        routerName = "my-round-robin-router"
                    }
                ]
            }   
        }
    }
}

Communication

The Communication object defines all connectivity options for a node. Figure 6, “Communication relationships” shows the relationships to other configuration objects.

Communication relationships

Communication relationships

A detailed description of the configuration object properties is in Communication object properties and a snippet for these properties is in Example 6, “Communication object snippet”.

Communication object properties

Name Type Description
administration Administration configuration object. Administration network communication configuration for the node. Optional. See Administration for the default values.
discoveryPort long Broadcast discovery port. Optional. Default value is 54321.
discoveryRequestAddresses String [ ] An array of broadcast discovery network request addresses. The addresses are specified as either IPV4 or DNS host names. Discovery requests are broadcast to the discoveryPort on the network interface associated with each network address. Optional. Default value is a single network address which is the system host name.
distributionListenerInterfaces DistributionListenerInterface [ ] of configuration objects. Distribution network communication configuration for the node. Optional. See DistributionListenerInterface for the default values.
numberSearchPorts long The number of ports to allocate to the node for distribution listeners. Ports are allocated from this range when migrating the distribution listener between engines or when a duplicate port error is detected starting a listener. Port allocation is started at the configured dataTransportPort for each distribution listener interface (see DistributionListenerInterface). The minimum value that can be specified is the total number of engines plus one. If a port cannot be allocated from this range, the distribution listener will fail to start. Optional. Default value is 20.
proxyDiscovery ProxyDiscovery configuration object. Proxy discovery configuration for the node (see ProxyDiscovery). Optional. No default.
secureCommunicationProfileName String Name of a secure communication server profile (see ????) to use to configure secure communications for the node's administration, data transport, and web server listeners. The secure communication server profile must include a truststore. The truststore is used to validate certificates sent from other nodes in the cluster. Optional. No default.

Example 6. Communication object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
                communication =
                {
                    numberSearchPorts = 10
                    discoveryPort = 4321
                    discoveryRequestAddresses = ["myhost.com"]
                    distributionListenerInterfaces = [ ... ]
                    administration = { ... }
                    proxyDiscovery = { ... }
                    secureCommunicationProfileName = "my-secure-communication-server-profile-name"
                }
            }   
        }
    }
}

DistributionListenerInterface

The DistributionListenerInterface object defines the network communication options for a node's distribution connectivity. Figure 7, “DistributionListenerInterface relationships” shows the relationships to other configuration objects.

DistributionListenerInterface relationships

DistributionListenerInterface relationships

A detailed description of the configuration object properties is in DistributionListenerInterface object properties and a snippet for these properties is in Example 7, “DistributionListenerInterface object snippet”.

Warning

IP addresses specified in the address configuration property must be quoted. See Example 7, “DistributionListenerInterface object snippet”.

DistributionListenerInterface object properties

Name Type Description
dataTransportPort long Distribution listener port number. This field is required and cannot have a value of 0 if the Node configuration (see Node) containing the DistributionListenerInterface object is referenced in ProxyDiscovery configuration (see ProxyDiscovery), otherwise optional. Default value is 0, which causes the distribution port to be auto-assigned when the node is installed.
secure boolean Deprecated secure-transport indicator. Use the secureCommunicationProfileName property in Communication to control data transport security characteristics. The secure property is ignored if there is a value in the secureCommunicationProfileName property. If true, use TLS to secure communication to the host, if false do not. Optional. Default value is false.
address String Distribution listener interface address. This address can be specified as an IPv4 address, IPv6 address, or DNS name. DNS names can only be used to bind to an IPv4 address. A special prefix of IPoSDP: indicates that the address is an Infiniband sockets direct protocol interface (Linux only). This field is required and cannot have a value of 0.0.0.0 or an empty string ("") if the Node configuration (see epadmin-node(1)) containing the DistributionListenerInterface object is referenced in ProxyDiscovery configuration (see ProxyDiscovery), otherwise optional. Default value is an empty string which will bind the listener to all interfaces.

Example 7. DistributionListenerInterface object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
                communication =
                {
                    distributionListenerInterfaces = 
                    [
                        {
                             dataTransportPort = 1234
                             secure = true
                             address = "myhost.com"
                        }
                        {
                             address = "127.0.0.1"
                        }
                        {
                             address = "IPoSDP:192.168.1.101"
                        }
                        {
                             secure = true
                             address = "fe80::8a63:dfff:fec3:7abd"
                        }
                    ]
                }
            }   
        }
    }
}

Administration

The Administration object defines the network communication options for a node's administration connectivity. Figure 8, “Administration relationships” shows the relationships to other configuration objects.

Administration relationships

Administration relationships

A detailed description of the configuration object properties is in Administration object properties and a snippet for these properties is in Example 8, “Administration object snippet”.

Warning

IP addresses specified in the address configuration property must be quoted. See Example 8, “Administration object snippet”.

Administration object properties

Name Type Description
address String Administration listener interface address. This address can be specified as an IPv4, IPv6, or DNS name. An empty string ("") will listen on all installed interfaces. If a DNS name is specified, the listener is bound to an IPv6 address if available, otherwise an IPv4 address is used. This field is required and cannot have a value of 0.0.0.0 or an empty string if the Node configuration (see epadmin-node(1)) containing the Administration object is referenced in ProxyDiscovery configuration (see ProxyDiscovery), otherwise optional. Default value is all interfaces on the local machine.
transportPort long Administration transport port number. A value of 0 causes the node to auto-generate the port number. This field is required and cannot have a value of 0 if the Node configuration (see epadmin-node(1)) containing the Administration object is referenced in ProxyDiscovery configuration (see ProxyDiscovery), otherwise optional. Default value is 0.
webAuditLogDisableUrlPaths String [ ] Disable audit logging for specific URL paths. Multiple partial path values can be specified. All paths starting with the configured values do not generate audit log entries. Optional. No default value.
webEnable boolean Enable administration web server if value is true. A value of false disables the administration web server. Optional. Default value is true.
webFileCacheTimeHandling An enumeration with valid values of CACHE_FOREVER, DO_NOT_CACHE, or TIMED_CACHE. Controls the caching of downloaded files. CACHE_FOREVER stores the files forever — they are never deleted. DO_NOT_CACHE never stores downloaded files on the node — they are immediately deleted after use. TIMED_CACHE caches the files for the amount of time specified in webMaximumFileCacheTimeMinutes. Optional. Default value is TIMED_CACHE.
webFileSizeHandling An enumeration with valid values of FILE_UPLOAD_NOT_ALLOWED, LIMITED_FILE_SIZE, or UNLIMITED_FILE_SIZE. Controls the maximum size of downloaded files. FILE_UPLOAD_NOT_ALLOWED disables file downloads. LIMITED_FILE_SIZE restricts file size to the value specified in webMaximumFileSizeMegabytes. UNLIMITED_FILE_SIZE sets no limit on downloaded file size. Optional. Default value is LIMITED_FILE_SIZE.
webMaximumFileCacheTimeMinutes long Time in minutes to cache downloaded files if webFileCacheTimeHandling is set to TIMED_CACHE. Value must be > 0. Optional. Default value is 15.
webMaximumFileSizeMegabytes long Maximum file size in megabytes for downloaded files if webFileSizeHandling is set to LIMITED_FILE_SIZE. Value must be > 0. Optional. Default value is 5.
webPort long Administration web server port number. A value of 0 causes the node to auto-generate the port number starting from 8008. Optional. Default value is 0.
webServiceBindings Associative array of WebServiceBinding configuration objects keyed by web service name names. An associative array of WebServiceBinding (see WebServiceBinding) configuration objects indexed by web service names. Optional.
webUIEnable boolean Enable Web UI for configured web service endpoints if value is true. A value of false disables the Web UI. Optional. Default value is true.

Example 8. Administration object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {
                communication =
                {
                    administration =
                    {
                        address = "myhost.com"
                        transportPort = 1234
                        webPort = 9876
                        webEnable = true
                        webUIEnable = true
                        webAuditLogDisableUrlPaths = ["prometheus-metrics", "healthcheck"]
                        webFileCacheTimeHandling = TIMED_CACHE
                        webMaximumFileCacheTimeMinutes = 5
                        webFileSizeHandling = LIMITED_FILE_SIZE
                        webMaximumFileSizeMegabytes = 10
                        webServiceBindings =
                        {
                            "admin" = { ... }
                            "metrics" = { ... }
                        }
                    }
                }
            } 
        }
    }
}

WebServiceBinding

The WebServiceBinding object defines the authentication realm associated with a web service. This provides a mechanism to override the default node administration authentication realm for a specific web service. Figure 9, “WebServiceBinding relationships” shows the relationships to other configuration objects.

WebServiceBinding relationships

WebServiceBinding relationships

A detailed description of the configuration object properties is in WebServiceBinding object properties and a snippet for these properties is in Example 9, “WebServiceBinding object snippet”.

WebServiceBinding object properties

Name Type Description
authenticationRealmName String Name of an authentication realm (see ????) to use for authentication for this web service. An empty value disables authentication for the web service. Optional.

Example 9. WebServiceBinding object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
                communication =
                {
                    administration =
                    {
                        webServiceBindings =
                        {
                            "admin" =
                            {
                                authenticationRealmName = "my-local-auth-realm"
                            }
                            "metrics" =
                            {
                                authenticationRealmName = "my-other-local-auth-realm"
                            }
                            //
                            //   Disable authentication for healthcheck
                            //
                            "healthcheck" = { }
                        }
                    }
                }
            }   
        }
    }
}

ProxyDiscovery

The ProxyDiscovery object defines the nodes for which this node is providing proxy discovery services. Figure 10, “ProxyDiscovery relationships” shows the relationships to other configuration objects.

Additional audits are applied to the remote nodes specified in the remoteNodes property, specifically:

Any audit failures will cause the node deploy configuration to fail activation.

ProxyDiscovery relationships

ProxyDiscovery relationships

A detailed description of the configuration object properties is in ProxyDiscovery object properties and a snippet for these properties is in Example 10, “ProxyDiscovery object snippet”.

ProxyDiscovery object properties

Name Type Description
remoteNodes String [ ] List of remote nodes for which to provide proxy discovery services. All of the specified nodes in this property must be defined in the NodeDeploy.nodes property (see NodeDeploy) and be in the same cluster as the node in which they are contained . See the Javadoc for java.util.regex.Pattern for the syntax of the regular expressions that can be used. Optional. No default.

Example 10. ProxyDiscovery object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {
                communication =
                {
                    //  
                    //    Node A.X will provide proxy  
                    //    discovery for B.X and C.X  
                    //    The data transport and administration 
                    //    address and port number must be
                    //    configured for B.X and C.X  
                    //    in the same node deploy configuration
                    //    as A.X  
                    //  
                    proxyDiscovery = 
                    {
                        remoteNodes = ["B.X", "C.X"]
                    }
                }
            }
   
            //
            //  administration and distribution
            //  listener addresses and ports must be 
            //  configured for node B.X and C.X
            //  so that they are available
            //  for node A.X to provide proxy information
            //
            "B.X" = 
            {
                communication =
                {
                    administration =
                    {
                        address = "myhost.com"
                        transportPort = 1234
                    }
                    distributionListenerInterfaces = 
                    [
                        {
                             dataTransportPort = 6789
                             address = "myhost.com"
                        }
                    ]
                } 
            }

           "C.X" = 
            {
                communication =
                {
                    administration =
                    {
                        address = "myotherhost.com"
                        transportPort = 1234
                    }
                    distributionListenerInterfaces = 
                    [
                        {
                             dataTransportPort = 6789
                             address = "myotherhost.com"
                        }
                    ]
                } 
            }
        }
    }
}

AvailabilityZoneMembership

The AvailabilityZoneMembership object defines the availability zone membership for a node. Figure 11, “AvailabilityZoneMembership relationships” shows the relationships to other configuration objects.

AvailabilityZoneMembership relationships

AvailabilityZoneMembership relationships

A detailed description of the configuration object properties is in AvailabilityZoneMembership object properties and a snippet for these properties is in Example 11, “AvailabilityZoneMembership object snippet”.

AvailabilityZoneMembership object properties

Name Type Description
votes long Number of quorum votes for this node in the specified availability zone. Optional. Default value is 1.
dynamicPartitionBinding DynamicPartitionBinding configuration object. Dynamic partition binding (see DynamicPartitionBinding). This property can only be specified if the associated availability zone is using a dynamic data distribution policy. Optional. No default value.
staticPartitionBindings Associative array of StaticPartitionBinding objects keyed by partition names. Static partition binding for the node (see StaticPartitionBinding). This property can only be specified if the associated availability zone is using a static data distribution policy. The availability zone must be defined in <availability-zone-name>.staticPartitionPolicy.staticPartitions. Optional. No default.

Example 11. AvailabilityZoneMembership object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
                availabilityZoneMemberships =
                {
                    "active-active" =
                    {
                        votes = 2
                        staticPartitionBindings = { ... }
                    }
                }
            }   
        }

        availabilityZones =
        {
            "active-active" = { ... }
        }
    }
}

StaticPartitionBinding

The StaticPartitionBinding object defines the static partition binding for a node. Figure 12, “StaticPartitionBinding relationships” shows the relationships to other configuration objects.

StaticPartitionBinding relationships

StaticPartitionBinding relationships

A detailed description of the configuration object properties is in StaticPartitionBinding object properties and a snippet for these properties is in Example 12, “StaticPartitionBinding object snippet”.

StaticPartitionBinding object properties

Name Type Description
type Enumeration with valid values of ACTIVE and REPLICA. Active or replica partitions. Configuration activation will fail if an ACTIVE partition cannot be enabled. Configuration activation is allowed if a REPLICA partition cannot be enabled. Required.
replication Enumeration with valid values of SYNCHRONOUS and ASYNCHRONOUS. Replication type. Optional. Default value is SYNCHRONOUS.

Example 12. StaticPartitionBinding object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
                 availabilityZoneMemberships =
                {
                    "active-active" =
                    {
                        staticPartitionBindings =
                        {
                            "P1" =
                            {
                                type = "ACTIVE"
                                replication = "SYNCHRONOUS"
                            },
                            "P2" =
                            {
                                type = "REPLICA"
                                replication = "ASYNCHRONOUS"
                            }
                        }
                    }
                }
            }  
        }

        availabilityZones =
        {
            "active-active" =
            {
                dataDistributionPolicy = "static-data-distribution-policy"
                staticPartitionPolicy =
                {
                    staticPartitions =
                    {
                        "P1" = { },
                        "P2" = { },
                    }
                }
            }
        }

    }
}

DynamicPartitionBinding

The DynamicPartitionBinding object defines a dynamic partition binding for a node. Dynamic partitions can also be bound to a node using the primaryMemberPattern and the backupMemberPattern properties in the DynamicPartitionPolicy configuration object (see DynamicPartitionPolicy). Figure 13, “DynamicPartitionBinding relationships” shows the relationships to other configuration objects.

DynamicPartitionBinding relationships

DynamicPartitionBinding relationships

A detailed description of the configuration object properties is in DynamicPartitionBinding object properties and a snippet for these properties is in Example 13, “DynamicPartitionBinding object snippet”.

DynamicPartitionBinding object properties

Name Type Description
type Enumeration with valid values of PRIMARY and BACKUP. Primary or backup node binding. Required.

Example 13. DynamicPartitionBinding object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        nodes = 
        {
            "A.X" =
            {   
               availabilityZoneMemberships =
               {
                    "elastic-credit" =
                    {
                        dynamicPartitionBinding =
                        {
                            type = "PRIMARY"
                        }
                    }
               }
            }
        }

        availabilityZones =
        {
            "elastic-credit" =
            {
                dataDistributionPolicy = "dynamic-credit-distribution-policy"
            }
        }
    }
}

AvailabilityZone

The AvailabilityZone object defines an availability zone. There is always a default availability zone defined even if this configuration object is not specified. See Default Availability Zone for details. Figure 14, “AvailabilityZone relationships” shows the relationships to other configuration objects.

AvailabilityZone relationships

AvailabilityZone relationships

A detailed description of the configuration object properties is in AvailabilityZone object properties and a snippet for these properties is in Example 14, “AvailabilityZone object snippet”.

AvailabilityZone object properties

Name Type Description
percentageOfVotes Long Minimum percentage of node votes to maintain a quorum. This property is mutually exclusive of the minimumNumberOfVotes property. If neither this property or the minimumNumberOfVotes property is set, quorums are disabled. Optional. No default value.
minimumNumberOfVotes Long Minimum number nodes to maintain a quorum. This property is mutually exclusive of the percentageOfVotes property. If neither this property or the percentageOfVotes property is set, quorums are disabled. Optional. No default value.
dataDistributionPolicy String The data distribution policy for this availability zone, as defined in the application definition configuration. Optional. No default value.
dynamicPartitionPolicy DynamicPartitionPolicy configuration object. Dynamic partition policy configuration (see DynamicPartitionPolicy). A dynamic data distribution policy must be specified in the dataDistributionPolicy property if this property is set. Optional. No default value.
staticPartitionPolicy StaticPartitionPolicy configuration object. Static partition policy configuration (see StaticPartitionBinding). A static data distribution policy must be specified in the dataDistributionPolicy property if this property is set. Optional. No default value.
quorumMemberPattern String A regular expression describing which nodes are part of a quorum. All nodes matching this regular expression are part of the quorum. Such members get a single quorum vote. Quorum membership can be expressed in one or both of two ways: via this regular expression or explicitly by each node. See the Javadoc for java.util.regex.Pattern for the syntax of the regular expressions that can be used. Optional. No default value.

Example 14. AvailabilityZone object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        availabilityZones =
        {
           "active-active" =
            {
                dataDistributionPolicy = "static-data-distribution-policy"
                staticPartitionPolicy = { ... }
            }
            "elastic-dr" =
            {
                dataDistributionPolicy = "dynamic-data-distribution-policy"
                dynamicPartitionPolicy = { ... }
            }
            "west-coast-quorum" =
            {
                minimiumNumberOfVotes = 2
                quorumMemberPattern = ".*\\.west\\.X"
            }
        }
    }
}

DynamicPartitionPolicy

The DynamicPartitionPolicy object defines a dynamic partition policy for an availability zone. Figure 15, “DynamicPartitionPolicy relationships” shows the relationships to other configuration objects.

DynamicPartitionPolicy relationships

DynamicPartitionPolicy relationships

A detailed description of the configuration object properties is in DynamicPartitionPolicy object properties and a snippet for these properties is in Example 15, “DynamicPartitionPolicy object snippet”.

DynamicPartitionPolicy object properties

Name Type Description
primaryMemberPattern String A regular expression describing the primary node membership for this dynamic partition policy. Membership can be expressed in one, or both, of two ways: via this regular expression or explicitly for each node (see DynamicPartitionBinding). The bindings are additive. See the Javadoc for java.util.regex.Pattern for the syntax of the regular expressions that can be used. Optional. Default value is all nodes in a cluster, unless backupMemberPattern is specified, in which case, there is no default value. A regular expression that does not match any nodes in the cluster must be specified to disable this binding if backupMemberPattern is not specified.
backupMemberPattern String A regular expression describing the backup node membership for this dynamic partition policy. Membership can be expressed in one, or both, of two ways: via this regular expression or explicitly for each node (see DynamicPartitionBinding). The bindings are additive. If backup nodes are defined, all primary nodes must be explicitly defined; that is, setting this property disables the primaryMemberPattern default value. See the Javadoc for java.util.regex.Pattern for the syntax of the regular expressions that can be used. Optional. No default.

Example 15. DynamicPartitionPolicy object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
         availabilityZones =
        {
            "elastic-dr" =
            {
                dataDistributionPolicy = "dynamic-data-distribution-policy"
                dynamicPartitionPolicy =
                {
                    primaryMemberPattern = ".*\\.west\\.X"
                    backupMemberPattern = ".*\\.east\\.X"
                }
            }
        }
    }
}

StaticPartitionPolicy

The StaticPartitionPolicy object defines a static partition policy for an availability zone. Figure 16, “StaticPartitionPolicy relationships” shows the relationships to other configuration objects.

StaticPartitionPolicy relationships

StaticPartitionPolicy relationships

A detailed description of the configuration object properties is in StaticPartitionPolicy object properties and a snippet for these properties is in Example 16, “StaticPartitionPolicy object snippet”.

StaticPartitionPolicy object properties

Name Type Description
disableOrder Enumeration. Valid values are REVERSE_CONFIGURATION and REVERSE_LOCAL_THEN_REMOTE. REVERSE_CONFIGURATION disables the partitions in reverse order based on the order they appear in the configuration file. REVERSE_LOCAL_THEN_REMOTE disables all partitions that have the local node as the active node, then disable all partitions where a remote node is the active node. Optional. Default value is REVERSE_CONFIGURATION.
enableOrder Enumeration. Valid values are CONFIGURATION and REMOTE_THEN_LOCAL. CONFIGURATION enables the partitions based on the order they appear in the configuration file. REMOTE_THEN_LOCAL enables all partitions that have a remote node as the active node, then enables the partitions where the active node is the local node. Optional. Default value is CONFIGURATION.
staticPartitions Associative array of StaticPartition objects keyed by partition name. StaticPartition configuration objects. Optional. No default.
loadOnNodesPattern String A regular expression describing which nodes know about the partitions in this static partition policy. These nodes may or may not be hosting the partitions defined in the static partition policy. The complete set of nodes that know about these partitions is defined by this regular expression and explicit node binding (see StaticPartitionBinding). See the Javadoc for java.util.regex.Pattern for the syntax of the regular expressions that can be used. Optional. Default value is the explicit partition binding in the containing availability zone.

Example 16. StaticPartitionPolicy object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        availabilityZones =
        {
            "active-active" =
            {
                dataDistributionPolicy = "static-data-distribution-policy"
                staticPartitionPolicy =
                {
                    enableOrder = "CONFIGURATION"
                    disableOrder = "REVERSE_CONFIGURATION"
                    loadOnNodesPattern = ".*\\.east\\.X"
                    staticPartitions =
                    {
                        "P1" = { },
                        "P2" = { },
                    }
                }
            }
        }
    }
}

StaticPartition

The StaticPartition object defines a static partition. Figure 17, “StaticPartition relationships” shows the relationships to other configuration objects.

StaticPartition relationships

StaticPartition relationships

A detailed description of the configuration object properties is in StaticPartition object properties and a snippet for these properties is in Example 17, “StaticPartition object snippet”.

StaticPartition object properties

Name Type Description
rank long The static partition's ranking number for enable and disable order. When the StaticPartitionPolicy.enableOrder or StaticPartitionPolicy.disableOrder is set to CONFIGURATION, this rank specifies the order. Static partitions with a lower ranking number are enabled before those with a higher ranking number. If multiple static partitions share the same ranking number, their enable order is indeterminate. Disable order always reverses the rankings, with higher numbers disabled ahead of lower numbers. Optional. Default value is 1.

Example 17. StaticPartition object snippet

name = "my.application"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.node"
configuration =
{
    NodeDeploy =
    {
        availabilityZones =
        {
            "active-active" =
            {
                dataDistributionPolicy = "static-data-distribution-policy"
                staticPartitionPolicy =
                {
                    staticPartitions =
                    {
                        "P1" = 
                        {
                            rank = 2
                        },
                        "P2" = 
                        {
                            rank = 1
                        }
                    }
                }
            }
        }
    }
}