org.apache.ignite.internal.cluster

## Class IgniteClusterImpl

- java.lang.Object
- - org.apache.ignite.internal.cluster.ClusterGroupAdapter
  - - org.apache.ignite.internal.cluster.IgniteClusterImpl

All Implemented Interfaces:
  Externalizable, Serializable, ClusterGroup, IgniteCluster, ClusterGroupEx, IgniteClusterEx, IgniteAsyncSupport

    public class IgniteClusterImpl
    extends ClusterGroupAdapter
    implements IgniteClusterEx, Externalizable

See Also:
  Serialized Form

### Field Summary

### Fields inherited from class org.apache.ignite.internal.cluster.ClusterGroupAdapter

`ctx, p, subjId`

### Constructor Summary

Constructors
Constructor and Description
`IgniteClusterImpl()` Required by `Externalizable`.
`IgniteClusterImpl(GridKernalContext ctx)`

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `active()` Checks Ignite grid is active or not active.
`void` `active(boolean active)` Changes Ignite grid state to active or inactive.
`void` `clearNodeMap()` Clears node local map.
`void` `clearStatistics(Collection<String> caches)` Clear statistics for caches cluster wide.
`IgniteFuture<?>` `clientReconnectFuture()` If local client node disconnected from cluster returns future that will be completed when client reconnected.
`void` `clientReconnectFuture(IgniteFuture<?> reconnecFut)`
`Collection<BaselineNode>` `currentBaselineTopology()` Gets current baseline topology.
`boolean` `disableWal(String cacheName)` Disables write-ahead logging for specified cache.
`void` `enableStatistics(Collection<String> caches, boolean enabled)` Enables/disables statistics for caches cluster wide.
`boolean` `enableWal(String cacheName)` Enables write-ahead logging for specified cache.
`ClusterGroup` `forLocal()` Gets a cluster group consisting from the local node.
`<R> IgniteFuture<R>` `future()` Gets and resets future for previous asynchronous operation.
`boolean` `isAsync()`
`boolean` `isWalEnabled(String cacheName)` Checks if write-ahead logging is enabled for specified cache.
`ClusterNode` `localNode()` Gets local grid node.
`<K,V> ConcurrentMap<K,V>` `nodeLocalMap()` Gets node-local storage instance.
`boolean` `pingNode(UUID nodeId)` Pings a remote node.
`void` `readExternal(ObjectInput in)`
`protected Object` `readResolve()` Reconstructs object on unmarshalling.
`void` `resetMetrics()` Resets local I/O, job, and task execution metrics.
`void` `restartNodes()` Restarts nodes satisfying optional set of predicates.
`void` `restartNodes(Collection<UUID> ids)` Restarts nodes defined by provided IDs.
`void` `setBaselineTopology(Collection<? extends BaselineNode> baselineTop)` Sets baseline topology.
`void` `setBaselineTopology(long topVer)` Sets baseline topology constructed from the cluster topology of the given version (the method succeeds only if the cluster topology has not changed).
`void` `setTxTimeoutOnPartitionMapExchange(long timeout)` Sets transaction timeout on partition map exchange.
`Collection<ClusterStartNodeResult>` `startNodes(Collection<Map<String,Object>> hosts, Map<String,Object> dflts, boolean restart, int timeout, int maxConn)` Starts one or more nodes on remote host(s).
`Collection<ClusterStartNodeResult>` `startNodes(File file, boolean restart, int timeout, int maxConn)` Starts one or more nodes on remote host(s).
`IgniteFuture<Collection<ClusterStartNodeResult>>` `startNodesAsync(Collection<Map<String,Object>> hosts, Map<String,Object> dflts, boolean restart, int timeout, int maxConn)` Starts one or more nodes on remote host(s) asynchronously.
`IgniteFuture<Collection<ClusterStartNodeResult>>` `startNodesAsync(File file, boolean restart, int timeout, int maxConn)` Starts one or more nodes on remote host(s) asynchronously.
`void` `stopNodes()` Stops nodes satisfying optional set of predicates.
`void` `stopNodes(Collection<UUID> ids)` Stops nodes defined by provided IDs.
`Collection<ClusterNode>` `topology(long topVer)` Gets a topology by version.
`long` `topologyVersion()` Gets current topology version.
`String` `toString()`
`IgniteCluster` `withAsync()` Gets instance of this component with asynchronous mode enabled.
`void` `writeExternal(ObjectOutput out)`

### Methods inherited from class org.apache.ignite.internal.cluster.ClusterGroupAdapter

`compute, events, executorService, forAttribute, forCacheNodes, forCacheNodes, forClientNodes, forClients, forDaemons, forDataNodes, forHost, forHost, forIgfsMetadataDataNodes, forNode, forNodeId, forNodeIds, forNodes, forOldest, forOthers, forOthers, forPredicate, forRandom, forRemotes, forServers, forSubjectId, forYoungest, guard, hostNames, ignite, message, metrics, node, node, nodes, predicate, services, setKernalContext, unguard`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.apache.ignite.internal.cluster.ClusterGroupEx

`forCacheNodes, forIgfsMetadataDataNodes, forSubjectId`

### Methods inherited from interface org.apache.ignite.cluster.ClusterGroup

`forAttribute, forCacheNodes, forClientNodes, forClients, forDaemons, forDataNodes, forHost, forHost, forNode, forNodeId, forNodeIds, forNodes, forOldest, forOthers, forOthers, forPredicate, forRandom, forRemotes, forServers, forYoungest, hostNames, ignite, metrics, node, node, nodes, predicate`

### Constructor Detail

#### IgniteClusterImpl

    public IgniteClusterImpl()

Required by `Externalizable`.

#### IgniteClusterImpl

    public IgniteClusterImpl(GridKernalContext ctx)

Parameters:
  `ctx` - Kernal context.

### Method Detail

#### forLocal

    public ClusterGroup forLocal()

Gets a cluster group consisting from the local node.

Specified by:
  `forLocal` in interface `IgniteCluster`
Returns:
  Cluster group consisting from the local node.

#### localNode

    public ClusterNode localNode()

Gets local grid node.

Specified by:
  `localNode` in interface `IgniteCluster`
Returns:
  Local grid node.

#### nodeLocalMap

    public <K,V> ConcurrentMap<K,V> nodeLocalMap()

Gets node-local storage instance.

Node-local values are similar to thread locals in a way that these values are not distributed and kept only on local node (similar like thread local values are attached to the current thread only). Node-local values are used primarily by closures executed from the remote nodes to keep intermediate state on the local node between executions.

There's only one instance of node local storage per local node. Node local storage is based on `ConcurrentMap` and is safe for multi-threaded access.

Specified by:
  `nodeLocalMap` in interface `IgniteCluster`
Returns:
  Node local storage instance for the local node.

#### pingNode

    public boolean pingNode(UUID nodeId)

Pings a remote node.

Discovery SPIs usually have some latency in discovering failed nodes. Hence, communication to remote nodes may fail at times if an attempt was made to establish communication with a failed node. This method can be used to check if communication has failed due to node failure or due to some other reason.

Specified by:
  `pingNode` in interface `IgniteCluster`
Parameters:
  `nodeId` - ID of a node to ping.
Returns:
  `true` if node for a given ID is alive, `false` otherwise.
See Also:
  `DiscoverySpi`

#### topologyVersion

    public long topologyVersion()

Gets current topology version. In case of TCP discovery (see `TcpDiscoverySpi`) topology versions are sequential - they start from `'1'` and get incremented every time whenever a node joins or leaves. For other discovery SPIs topology versions may not be (and likely are not) sequential.

Specified by:
  `topologyVersion` in interface `IgniteCluster`
Returns:
  Current topology version.

#### topology

    public Collection<ClusterNode> topology(long topVer)
                                     throws UnsupportedOperationException

Gets a topology by version. Returns `null` if topology history storage doesn't contain specified topology version (history currently keeps last `1000` snapshots).

Specified by:
  `topology` in interface `IgniteCluster`
Parameters:
  `topVer` - Topology version.
Returns:
  Collection of grid nodes which represented by specified topology version, if it is present in history storage, `null` otherwise.
Throws:
  `UnsupportedOperationException` - If underlying SPI implementation does not support topology history. Currently only `TcpDiscoverySpi` supports topology history.

#### startNodes

    public Collection<ClusterStartNodeResult> startNodes(File file,
                                                         boolean restart,
                                                         int timeout,
                                                         int maxConn)
                                                  throws IgniteException

Starts one or more nodes on remote host(s).

This method takes INI file which defines all startup parameters. It can contain one or more sections, each for a host or for range of hosts (note that they must have different names) and a special '`defaults`' section with default values. They are applied to undefined parameters in host's sections.

Returned result is collection of tuples. Each tuple corresponds to one node start attempt and contains hostname, success flag and error message if attempt was not successful. Note that successful attempt doesn't mean that node was actually started and joined topology. For large topologies (> 100s nodes) it can take over 10 minutes for all nodes to start. See individual node logs for details.

Supports asynchronous execution (see `IgniteAsyncSupport`).

Specified by:
  `startNodes` in interface `IgniteCluster`
Parameters:
  `file` - Configuration file.
  `restart` - Whether to stop existing nodes. If `true`, all existing nodes on the host will be stopped before starting new ones. If `false`, nodes will be started only if there are less nodes on the host than expected.
  `timeout` - Connection timeout.
  `maxConn` - Number of parallel SSH connections to one host.
Returns:
  Collection of start node results, each containing host name, result (success or failure) and error message (if any).
Throws:
  `IgniteException` - In case of error.

#### startNodesAsync

    public IgniteFuture<Collection<ClusterStartNodeResult>> startNodesAsync(File file,
                                                                            boolean restart,
                                                                            int timeout,
                                                                            int maxConn)
                                                                     throws IgniteException

Starts one or more nodes on remote host(s) asynchronously.

This method takes INI file which defines all startup parameters. It can contain one or more sections, each for a host or for range of hosts (note that they must have different names) and a special '`defaults`' section with default values. They are applied to undefined parameters in host's sections.

Completed future contains collection of tuples. Each tuple corresponds to one node start attempt and contains hostname, success flag and error message if attempt was not successful. Note that successful attempt doesn't mean that node was actually started and joined topology. For large topologies (> 100s nodes) it can take over 10 minutes for all nodes to start. See individual node logs for details.

Specified by:
  `startNodesAsync` in interface `IgniteCluster`
Parameters:
  `file` - Configuration file.
  `restart` - Whether to stop existing nodes. If `true`, all existing nodes on the host will be stopped before starting new ones. If `false`, nodes will be started only if there are less nodes on the host than expected.
  `timeout` - Connection timeout.
  `maxConn` - Number of parallel SSH connections to one host.
Returns:
  a Future representing pending completion of the starting nodes.
Throws:
  `IgniteException` - In case of error.

#### startNodes

    public Collection<ClusterStartNodeResult> startNodes(Collection<Map<String,Object>> hosts,
                                                         @Nullable
                                                         Map<String,Object> dflts,
                                                         boolean restart,
                                                         int timeout,
                                                         int maxConn)
                                                  throws IgniteException

Starts one or more nodes on remote host(s).

Each map in `hosts` collection defines startup parameters for one host or for a range of hosts. The following parameters are supported:

Name | Type | Description
--- | --- | ---
host | String | Hostname (required). Can define several hosts if their IPs are sequential. E.g., `10.0.0.1~5` defines range of five IP addresses. Other parameters are applied to all hosts equally.
port | Integer | Port number (default is `22`).
uname | String | Username (if not defined, current local username will be used).
passwd | String | Password (if not defined, private key file must be defined).
key | File | Private key file (if not defined, password must be defined).
nodes | Integer | Expected number of nodes on the host. If some nodes are started already, then only remaining nodes will be started. If current count of nodes is equal to this number, and `restart` flag is `false`, then nothing will happen.
igniteHome | String | Path to Ignite installation folder. If not defined, IGNITE_HOME environment variable must be set on remote hosts.
cfg | String | Path to configuration file (relative to `igniteHome`).
script | String | Custom startup script file name and path (relative to `igniteHome`). You can also specify a space-separated list of parameters in the same string (for example: `"bin/my-custom-script.sh -v"`).

`dflts` map defines default values. They are applied to undefined parameters in `hosts` collection.

Returned result is collection of tuples. Each tuple corresponds to one node start attempt and contains hostname, success flag and error message if attempt was not successful. Note that successful attempt doesn't mean that node was actually started and joined topology. For large topologies (> 100s nodes) it can take over 10 minutes for all nodes to start. See individual node logs for details.

Supports asynchronous execution (see `IgniteAsyncSupport`).

Specified by:
  `startNodes` in interface `IgniteCluster`
Parameters:
  `hosts` - Startup parameters.
  `dflts` - Default values.
  `restart` - Whether to stop existing nodes. If `true`, all existing nodes on the host will be stopped before starting new ones. If `false`, nodes will be started only if there are less nodes on the host than expected.
  `timeout` - Connection timeout in milliseconds.
  `maxConn` - Number of parallel SSH connections to one host.
Returns:
  Collection of start node results, each containing host name, result (success or failure) and error message (if any).
Throws:
  `IgniteException` - In case of error.

#### startNodesAsync

    public IgniteFuture<Collection<ClusterStartNodeResult>> startNodesAsync(Collection<Map<String,Object>> hosts,
                                                                            @Nullable
                                                                            Map<String,Object> dflts,
                                                                            boolean restart,
                                                                            int timeout,
                                                                            int maxConn)
                                                                     throws IgniteException

Starts one or more nodes on remote host(s) asynchronously.

Each map in `hosts` collection defines startup parameters for one host or for a range of hosts. The following parameters are supported:

Name | Type | Description
--- | --- | ---
host | String | Hostname (required). Can define several hosts if their IPs are sequential. E.g., `10.0.0.1~5` defines range of five IP addresses. Other parameters are applied to all hosts equally.
port | Integer | Port number (default is `22`).
uname | String | Username (if not defined, current local username will be used).
passwd | String | Password (if not defined, private key file must be defined).
key | File | Private key file (if not defined, password must be defined).
nodes | Integer | Expected number of nodes on the host. If some nodes are started already, then only remaining nodes will be started. If current count of nodes is equal to this number, and `restart` flag is `false`, then nothing will happen.
igniteHome | String | Path to Ignite installation folder. If not defined, IGNITE_HOME environment variable must be set on remote hosts.
cfg | String | Path to configuration file (relative to `igniteHome`).
script | String | Custom startup script file name and path (relative to `igniteHome`). You can also specify a space-separated list of parameters in the same string (for example: `"bin/my-custom-script.sh -v"`).

`dflts` map defines default values. They are applied to undefined parameters in `hosts` collection.

Completed future contains collection of tuples. Each tuple corresponds to one node start attempt and contains hostname, success flag and error message if attempt was not successful. Note that successful attempt doesn't mean that node was actually started and joined topology. For large topologies (> 100s nodes) it can take over 10 minutes for all nodes to start. See individual node logs for details.

Specified by:
  `startNodesAsync` in interface `IgniteCluster`
Parameters:
  `hosts` - Startup parameters.
  `dflts` - Default values.
  `restart` - Whether to stop existing nodes. If `true`, all existing nodes on the host will be stopped before starting new ones. If `false`, nodes will be started only if there are less nodes on the host than expected.
  `timeout` - Connection timeout in milliseconds.
  `maxConn` - Number of parallel SSH connections to one host.
Returns:
  a Future representing pending completion of the starting nodes.
Throws:
  `IgniteException` - In case of error.

#### stopNodes

    public void stopNodes()
                   throws IgniteException

Stops nodes satisfying optional set of predicates.

NOTE: `System.exit(Ignition.KILL_EXIT_CODE)` will be executed on each stopping node. If you have other applications running in the same JVM along with Ignition, those applications will be stopped as well.

Specified by:
  `stopNodes` in interface `IgniteCluster`
Throws:
  `IgniteException` - In case of error.

#### stopNodes

    public void stopNodes(Collection<UUID> ids)
                   throws IgniteException

Stops nodes defined by provided IDs.

NOTE: `System.exit(Ignition.KILL_EXIT_CODE)` will be executed on each stopping node. If you have other applications running in the same JVM along with Ignition, those applications will be stopped as well.

Specified by:
  `stopNodes` in interface `IgniteCluster`
Parameters:
  `ids` - IDs defining nodes to stop.
Throws:
  `IgniteException` - In case of error.

#### restartNodes

    public void restartNodes()
                      throws IgniteException

Restarts nodes satisfying optional set of predicates.

NOTE: this command only works for grid nodes started with Ignition `ignite.sh` or `ignite.bat` scripts.

Specified by:
  `restartNodes` in interface `IgniteCluster`
Throws:
  `IgniteException` - In case of error.

#### restartNodes

    public void restartNodes(Collection<UUID> ids)
                      throws IgniteException

Restarts nodes defined by provided IDs.

NOTE: this command only works for grid nodes started with Ignition `ignite.sh` or `ignite.bat` scripts.

Specified by:
  `restartNodes` in interface `IgniteCluster`
Parameters:
  `ids` - IDs defining nodes to restart.
Throws:
  `IgniteException` - In case of error.

#### resetMetrics

    public void resetMetrics()

Resets local I/O, job, and task execution metrics.

Specified by:
  `resetMetrics` in interface `IgniteCluster`

#### active

    public boolean active()

Checks Ignite grid is active or not active.

Specified by:
  `active` in interface `IgniteCluster`
Returns:
  `True` if grid is active. `False` If grid is not active.

#### active

    public void active(boolean active)

Changes Ignite grid state to active or inactive.

Specified by:
  `active` in interface `IgniteCluster`
Parameters:
  `active` - If `True` start activation process. If `False` start deactivation process.

#### currentBaselineTopology

    @Nullable
    public Collection<BaselineNode> currentBaselineTopology()

Gets current baseline topology. If baseline topology was not set, will return `null`.

Specified by:
  `currentBaselineTopology` in interface `IgniteCluster`
Returns:
  Collection of nodes included to the current baseline topology.

#### setBaselineTopology

    public void setBaselineTopology(Collection<? extends BaselineNode> baselineTop)

Sets baseline topology. The cluster must be activated for this method to be called.

Specified by:
  `setBaselineTopology` in interface `IgniteCluster`
Parameters:
  `baselineTop` - A collection of nodes to be included to the baseline topology.

#### setBaselineTopology

    public void setBaselineTopology(long topVer)

Sets baseline topology constructed from the cluster topology of the given version (the method succeeds only if the cluster topology has not changed). All client and daemon nodes will be filtered out of the resulting baseline.

Specified by:
  `setBaselineTopology` in interface `IgniteCluster`
Parameters:
  `topVer` - Topology version to set.

#### enableStatistics

    public void enableStatistics(Collection<String> caches,
                                 boolean enabled)

Enables/disables statistics for caches cluster wide.

Specified by:
  `enableStatistics` in interface `IgniteCluster`
Parameters:
  `caches` - Collection of cache names.
  `enabled` - Statistics enabled flag.

#### clearStatistics

    public void clearStatistics(Collection<String> caches)

Clear statistics for caches cluster wide.

Specified by:
  `clearStatistics` in interface `IgniteCluster`
Parameters:
  `caches` - Collection of cache names.

#### setTxTimeoutOnPartitionMapExchange

    public void setTxTimeoutOnPartitionMapExchange(long timeout)

Sets transaction timeout on partition map exchange.

Specified by:
  `setTxTimeoutOnPartitionMapExchange` in interface `IgniteCluster`
Parameters:
  `timeout` - Transaction timeout on partition map exchange in milliseconds.

#### withAsync

    public IgniteCluster withAsync()

Gets instance of this component with asynchronous mode enabled.

Specified by:
  `withAsync` in interface `IgniteCluster`
Specified by:
  `withAsync` in interface `IgniteAsyncSupport`
Returns:
  Instance of this component with asynchronous mode enabled.

#### enableWal

    public boolean enableWal(String cacheName)
                      throws IgniteException

Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to `IgniteCluster.disableWal(String)`.

Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all data is persisted to disk.

WAL state can be changed only for persistent caches.

Specified by:
  `enableWal` in interface `IgniteCluster`
Parameters:
  `cacheName` - Cache name.
Returns:
  Whether WAL enabled by this call.
Throws:
  `IgniteException` - If error occurs.
See Also:
  `IgniteCluster.disableWal(String)`, `IgniteCluster.isWalEnabled(String)`

#### disableWal

    public boolean disableWal(String cacheName)
                       throws IgniteException

Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk. This significantly improves cache update speed. The drawback is absence of local crash-recovery guarantees. If node is crashed, local content of WAL-disabled cache will be cleared on restart to avoid data corruption.

Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk.

WAL state can be changed only for persistent caches.

Specified by:
  `disableWal` in interface `IgniteCluster`
Parameters:
  `cacheName` - Cache name.
Returns:
  Whether WAL disabled by this call.
Throws:
  `IgniteException` - If error occurs.
See Also:
  `IgniteCluster.enableWal(String)`, `IgniteCluster.isWalEnabled(String)`

#### isWalEnabled

    public boolean isWalEnabled(String cacheName)

Checks if write-ahead logging is enabled for specified cache.

Specified by:
  `isWalEnabled` in interface `IgniteCluster`
Parameters:
  `cacheName` - Cache name.
Returns:
  `True` if WAL is enabled for cache.
See Also:
  `IgniteCluster.disableWal(String)`, `IgniteCluster.enableWal(String)`

#### isAsync

    public boolean isAsync()

Specified by:
  `isAsync` in interface `IgniteAsyncSupport`
Returns:
  `True` if asynchronous mode is enabled.

#### future

    public <R> IgniteFuture<R> future()

Gets and resets future for previous asynchronous operation.

Specified by:
  `future` in interface `IgniteAsyncSupport`
Returns:
  Future for previous asynchronous operation.

#### clearNodeMap

    public void clearNodeMap()

Clears node local map.

#### clientReconnectFuture

    public void clientReconnectFuture(IgniteFuture<?> reconnecFut)

Parameters:
  `reconnecFut` - Reconnect future.

#### clientReconnectFuture

    @Nullable
    public IgniteFuture<?> clientReconnectFuture()

If local client node disconnected from cluster returns future that will be completed when client reconnected.

Specified by:
  `clientReconnectFuture` in interface `IgniteCluster`
Returns:
  Future that will be completed when client reconnected.

#### readExternal

    public void readExternal(ObjectInput in)
                      throws IOException,
                             ClassNotFoundException

Specified by:
  `readExternal` in interface `Externalizable`
Overrides:
  `readExternal` in class `ClusterGroupAdapter`
Throws:
  `IOException`
  `ClassNotFoundException`

#### writeExternal

    public void writeExternal(ObjectOutput out)
                       throws IOException

Specified by:
  `writeExternal` in interface `Externalizable`
Overrides:
  `writeExternal` in class `ClusterGroupAdapter`
Throws:
  `IOException`

#### readResolve

    protected Object readResolve()
                          throws ObjectStreamException

Reconstructs object on unmarshalling.

Overrides:
  `readResolve` in class `ClusterGroupAdapter`
Returns:
  Reconstructed object.
Throws:
  `ObjectStreamException` - Thrown in case of unmarshalling error.

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`

${current.year} Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Database and Caching Platform | : ver. 2.7.6
Release Date | : September 11 2019