org.apache.ignite.internal.cluster

## Class IgniteClusterAsyncImpl

- java.lang.Object
- - org.apache.ignite.internal.AsyncSupportAdapter<IgniteCluster>
  - - org.apache.ignite.internal.cluster.IgniteClusterAsyncImpl

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

    public class IgniteClusterAsyncImpl
    extends AsyncSupportAdapter<IgniteCluster>
    implements IgniteCluster, Externalizable

See Also:
  Serialized Form

### Field Summary

### Fields inherited from class org.apache.ignite.internal.AsyncSupportAdapter

`curFut`

### Constructor Summary

Constructors
Constructor and Description
`IgniteClusterAsyncImpl()` Required by `Externalizable`.
`IgniteClusterAsyncImpl(IgniteClusterImpl cluster)`

### Method Summary

Methods
`ClusterGroup` `forAttribute(String name, String val)` Creates a new cluster group for nodes containing given name and value specified in user attributes.
`ClusterGroup` `forCacheNodes(String cacheName)` Creates a cluster group for all nodes that have cache with specified name, either in client or server modes.
`ClusterGroup` `forClientNodes(String cacheName)` Creates a cluster group for all client nodes that access cache with the specified name.
`ClusterGroup` `forClients()` Creates a cluster group of nodes started in client mode.
`ClusterGroup` `forDaemons()` Gets a cluster group consisting from the daemon nodes.
`ClusterGroup` `forDataNodes(String cacheName)` Creates a cluster group for all data nodes that have the cache with the specified name running.
`ClusterGroup` `forHost(ClusterNode node)` Gets cluster group consisting from the nodes in this cluster group residing on the same host as the given node.
`ClusterGroup` `forLocal()` Gets a cluster group consisting from the local node.
`ClusterGroup` `forNode(ClusterNode node, ClusterNode... nodes)` Creates a cluster group for the given node.
`ClusterGroup` `forNodeId(UUID id, UUID... ids)` Creates a cluster group for a node with the specified ID.
`ClusterGroup` `forNodeIds(Collection<UUID> ids)` Creates a cluster group over nodes with specified node IDs.
`ClusterGroup` `forNodes(Collection<? extends ClusterNode> nodes)` Creates a cluster group over a given set of nodes.
`ClusterGroup` `forOldest()` Creates a cluster group with one oldest node from the current cluster group.
`ClusterGroup` `forOthers(ClusterGroup prj)` Creates a cluster group for nodes not included into the given cluster group.
`ClusterGroup` `forOthers(ClusterNode node, ClusterNode... nodes)` Creates a cluster group for nodes other than the given nodes.
`ClusterGroup` `forPredicate(IgnitePredicate<ClusterNode> p)` Creates a new cluster group which includes all nodes that pass the given predicate filter.
`ClusterGroup` `forRandom()` Creates a cluster group with one random node from the current cluster group.
`ClusterGroup` `forRemotes()` Gets cluster group consisting from the nodes in this cluster group excluding the local node.
`ClusterGroup` `forServers()` Creates a cluster group of nodes started in server mode.
`ClusterGroup` `forYoungest()` Creates a cluster group with one youngest node in the current cluster group.
`Ignite` `ignite()` Gets instance of grid.
`ClusterNode` `localNode()` Gets local grid node.
`<K> Map<ClusterNode,Collection<K>>` `mapKeysToNodes(String cacheName, Collection<? extends K> keys)` This method provides ability to detect which cache keys are mapped to which nodes on cache instance with given name.
`<K> ClusterNode` `mapKeyToNode(String cacheName, K key)` This method provides ability to detect which cache keys are mapped to which nodes on cache instance with given name.
`ClusterMetrics` `metrics()` Gets a metrics snapshot for this cluster group.
`ClusterNode` `node()` Gets first node from the list of nodes in this cluster group.
`ClusterNode` `node(UUID id)` Gets a node for given ID from this cluster group.
`<K,V> ConcurrentMap<K,V>` `nodeLocalMap()` Gets node-local storage instance.
`Collection<ClusterNode>` `nodes()` Gets the read-only collection of nodes in this cluster group.
`boolean` `pingNode(UUID nodeId)` Pings a remote node.
`IgnitePredicate<ClusterNode>` `predicate()` Gets predicate that defines a subset of nodes for this cluster group.
`void` `readExternal(ObjectInput in)`
`protected Object` `readResolve()`
`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.
`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).
`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.
`void` `writeExternal(ObjectOutput out)`

### Methods inherited from class org.apache.ignite.internal.AsyncSupportAdapter

`createAsyncInstance, createFuture, future, future, isAsync, saveOrGet, withAsync`

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

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

### Methods inherited from interface org.apache.ignite.IgniteCluster

`withAsync`

### Methods inherited from interface org.apache.ignite.lang.IgniteAsyncSupport

`future, isAsync`

### Constructor Detail

#### IgniteClusterAsyncImpl

    public IgniteClusterAsyncImpl()

Required by `Externalizable`.

#### IgniteClusterAsyncImpl

    public IgniteClusterAsyncImpl(IgniteClusterImpl cluster)

Parameters:
  `cluster` - Cluster.

### Method Detail

#### localNode

    public ClusterNode localNode()

Gets local grid node.

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

#### 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.

#### 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

    @Nullable
    public Collection<ClusterNode> topology(long topVer)

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.

#### mapKeysToNodes

    public <K> Map<ClusterNode,Collection<K>> mapKeysToNodes(@Nullable
                                                    String cacheName,
                                                    @Nullable
                                                    Collection<? extends K> keys)

This method provides ability to detect which cache keys are mapped to which nodes on cache instance with given name. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys.

This method works as following:

- For local caches it returns only local node mapped to all keys.
- For fully replicated caches, `AffinityFunction` is used to determine which keys are mapped to which groups of nodes.
- For partitioned caches, the returned map represents node-to-key affinity.

Specified by:
  `mapKeysToNodes` in interface `IgniteCluster`
Parameters:
  `cacheName` - Cache name, if `null`, then default cache instance is used.
  `keys` - Cache keys to map to nodes.
Returns:
  Map of nodes to cache keys or empty map if there are no alive nodes for this cache.

#### mapKeyToNode

    @Nullable
    public <K> ClusterNode mapKeyToNode(@Nullable
                                        String cacheName,
                                        K key)

This method provides ability to detect which cache keys are mapped to which nodes on cache instance with given name. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys.

This method works as following:

- For local caches it returns only local node ID.
- For fully replicated caches first node ID returned by `AffinityFunction` is returned.
- For partitioned caches, the returned node ID is the primary node for the key.

Specified by:
  `mapKeyToNode` in interface `IgniteCluster`
Parameters:
  `cacheName` - Cache name, if `null`, then default cache instance is used.
  `key` - Cache key to map to a node.
Returns:
  Primary node for the key or `null` if cache with given name is not present in the grid.

#### startNodes

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

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).

#### startNodes

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

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).

#### stopNodes

    public void stopNodes()

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`

#### stopNodes

    public void stopNodes(Collection<UUID> ids)

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.

#### restartNodes

    public void restartNodes()

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`

#### restartNodes

    public void restartNodes(Collection<UUID> ids)

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.

#### resetMetrics

    public void resetMetrics()

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

Specified by:
  `resetMetrics` in interface `IgniteCluster`

#### ignite

    public Ignite ignite()

Gets instance of grid.

Specified by:
  `ignite` in interface `ClusterGroup`
Returns:
  Grid instance.

#### forNodes

    public ClusterGroup forNodes(Collection<? extends ClusterNode> nodes)

Creates a cluster group over a given set of nodes.

Specified by:
  `forNodes` in interface `ClusterGroup`
Parameters:
  `nodes` - Collection of nodes to create the cluster group from.
Returns:
  Cluster group for the provided grid nodes.

#### forNode

    public ClusterGroup forNode(ClusterNode node,
                       ClusterNode... nodes)

Creates a cluster group for the given node.

Specified by:
  `forNode` in interface `ClusterGroup`
Parameters:
  `node` - Node to create cluster group for.
  `nodes` - Optional additional nodes to include into the cluster group.
Returns:
  Cluster group for the given nodes.

#### forOthers

    public ClusterGroup forOthers(ClusterNode node,
                         ClusterNode... nodes)

Creates a cluster group for nodes other than the given nodes.

Specified by:
  `forOthers` in interface `ClusterGroup`
Parameters:
  `node` - Node to exclude from the new cluster group.
  `nodes` - Optional additional nodes to exclude from the cluster group.
Returns:
  Cluster group that will contain all nodes from the original cluster group excluding the given nodes.

#### forOthers

    public ClusterGroup forOthers(ClusterGroup prj)

Creates a cluster group for nodes not included into the given cluster group.

Specified by:
  `forOthers` in interface `ClusterGroup`
Parameters:
  `prj` - Cluster group to exclude from the new cluster group.
Returns:
  Cluster group for nodes not included into the given cluster group.

#### forNodeIds

    public ClusterGroup forNodeIds(Collection<UUID> ids)

Creates a cluster group over nodes with specified node IDs.

Specified by:
  `forNodeIds` in interface `ClusterGroup`
Parameters:
  `ids` - Collection of node IDs.
Returns:
  Cluster group over nodes with the specified node IDs.

#### forNodeId

    public ClusterGroup forNodeId(UUID id,
                         UUID... ids)

Creates a cluster group for a node with the specified ID.

Specified by:
  `forNodeId` in interface `ClusterGroup`
Parameters:
  `id` - Node ID to get the cluster group for.
  `ids` - Optional additional node IDs to include into the cluster group.
Returns:
  Cluster group over the node with the specified node IDs.

#### forPredicate

    public ClusterGroup forPredicate(IgnitePredicate<ClusterNode> p)

Creates a new cluster group which includes all nodes that pass the given predicate filter.

Specified by:
  `forPredicate` in interface `ClusterGroup`
Parameters:
  `p` - Predicate filter for nodes to include into the cluster group.
Returns:
  Cluster group for nodes that passed the predicate filter.

#### forAttribute

    public ClusterGroup forAttribute(String name,
                            @Nullable
                            String val)

Creates a new cluster group for nodes containing given name and value specified in user attributes.

User attributes for every node are optional and can be specified in grid node configuration. See `IgniteConfiguration.getUserAttributes()` for more information.

Specified by:
  `forAttribute` in interface `ClusterGroup`
Parameters:
  `name` - Name of the attribute.
  `val` - Optional attribute value to match.
Returns:
  Cluster group for nodes containing specified attribute.

#### forServers

    public ClusterGroup forServers()

Creates a cluster group of nodes started in server mode.

Specified by:
  `forServers` in interface `ClusterGroup`
Returns:
  Cluster group of nodes started in server mode.
See Also:
  `Ignition.setClientMode(boolean)`, `IgniteConfiguration.setClientMode(boolean)`

#### forClients

    public ClusterGroup forClients()

Creates a cluster group of nodes started in client mode.

Specified by:
  `forClients` in interface `ClusterGroup`
Returns:
  Cluster group of nodes started in client mode.
See Also:
  `Ignition.setClientMode(boolean)`, `IgniteConfiguration.setClientMode(boolean)`

#### forCacheNodes

    public ClusterGroup forCacheNodes(String cacheName)

Creates a cluster group for all nodes that have cache with specified name, either in client or server modes.

Specified by:
  `forCacheNodes` in interface `ClusterGroup`
Parameters:
  `cacheName` - Cache name.
Returns:
  Cluster group over nodes that have specified cache running.

#### forDataNodes

    public ClusterGroup forDataNodes(String cacheName)

Creates a cluster group for all data nodes that have the cache with the specified name running.

Specified by:
  `forDataNodes` in interface `ClusterGroup`
Parameters:
  `cacheName` - Cache name.
Returns:
  Cluster group over nodes that have the cache with the specified name running.

#### forClientNodes

    public ClusterGroup forClientNodes(String cacheName)

Creates a cluster group for all client nodes that access cache with the specified name.

Specified by:
  `forClientNodes` in interface `ClusterGroup`
Parameters:
  `cacheName` - Cache name.
Returns:
  Cluster group over nodes that have the specified cache running.

#### forRemotes

    public ClusterGroup forRemotes()

Gets cluster group consisting from the nodes in this cluster group excluding the local node.

Specified by:
  `forRemotes` in interface `ClusterGroup`
Returns:
  Cluster group consisting from the nodes in this cluster group excluding the local node.

#### forHost

    public ClusterGroup forHost(ClusterNode node)

Gets cluster group consisting from the nodes in this cluster group residing on the same host as the given node.

Specified by:
  `forHost` in interface `ClusterGroup`
Parameters:
  `node` - Node to select the host for.
Returns:
  Cluster group for nodes residing on the same host as the specified node.

#### forDaemons

    public ClusterGroup forDaemons()

Gets a cluster group consisting from the daemon nodes.

Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster group. The only way to see daemon nodes is to use this method.

Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology, but also needs to be excluded from the "normal" topology, so that it won't participate in the task execution or in-memory data grid storage.

Specified by:
  `forDaemons` in interface `ClusterGroup`
Returns:
  Cluster group consisting from the daemon nodes.

#### forRandom

    public ClusterGroup forRandom()

Creates a cluster group with one random node from the current cluster group.

Specified by:
  `forRandom` in interface `ClusterGroup`
Returns:
  Cluster group containing one random node from the current cluster group.

#### forOldest

    public ClusterGroup forOldest()

Creates a cluster group with one oldest node from the current cluster group. The resulting cluster group is dynamic and will always pick the next oldest node if the previous one leaves topology even after the cluster group has been created.

Use `ClusterGroup.node()` method to get the oldest node.

Specified by:
  `forOldest` in interface `ClusterGroup`
Returns:
  Cluster group containing one oldest node from the current cluster group.

#### forYoungest

    public ClusterGroup forYoungest()

Creates a cluster group with one youngest node in the current cluster group. The resulting cluster group is dynamic and will always pick the newest node in the topology, even if more nodes entered after the cluster group has been created.

Specified by:
  `forYoungest` in interface `ClusterGroup`
Returns:
  Cluster group containing one youngest node from the current cluster group.

#### nodes

    public Collection<ClusterNode> nodes()

Gets the read-only collection of nodes in this cluster group.

Specified by:
  `nodes` in interface `ClusterGroup`
Returns:
  All nodes in this cluster group.

#### node

    @Nullable
    public ClusterNode node(UUID id)

Gets a node for given ID from this cluster group.

Specified by:
  `node` in interface `ClusterGroup`
Parameters:
  `id` - Node ID.
Returns:
  Node with given ID from this cluster group or `null`, if such node does not exist.

#### node

    @Nullable
    public ClusterNode node()

Gets first node from the list of nodes in this cluster group. This method is specifically useful for cluster groups with one node only.

Specified by:
  `node` in interface `ClusterGroup`
Returns:
  First node from the list of nodes in this cluster group or `null` if the cluster group is empty.

#### predicate

    public IgnitePredicate<ClusterNode> predicate()

Gets predicate that defines a subset of nodes for this cluster group.

Specified by:
  `predicate` in interface `ClusterGroup`
Returns:
  Predicate that defines a subset of nodes for this cluster group.

#### metrics

    public ClusterMetrics metrics()

Gets a metrics snapshot for this cluster group.

Specified by:
  `metrics` in interface `ClusterGroup`
Returns:
  Metrics snapshot.

#### readExternal

    public void readExternal(ObjectInput in)
                      throws IOException,
                             ClassNotFoundException

Specified by:
  `readExternal` in interface `Externalizable`
Throws:
  `IOException`
  `ClassNotFoundException`

#### writeExternal

    public void writeExternal(ObjectOutput out)
                       throws IOException

Specified by:
  `writeExternal` in interface `Externalizable`
Throws:
  `IOException`

#### readResolve

    protected Object readResolve()
                          throws ObjectStreamException

Returns:
  Cluster async instance.
Throws:
  `ObjectStreamException` - If failed.

2015 Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Fabric | : ver. 1.2.0-incubating
Release Date | : June 16 2015