org.apache.ignite.cluster

## Interface ClusterGroup

All Known Subinterfaces:
  ClusterGroupEx, IgniteCluster, IgniteClusterEx

All Known Implementing Classes:
  ClusterGroupAdapter, IgniteClusterAsyncImpl, IgniteClusterImpl

    public interface ClusterGroup

Defines a cluster group which contains all or a subset of cluster nodes. The `IgniteCluster` interface itself also extends `ClusterGroup` which makes an instance of `IgniteCluster` into a cluster group containing all cluster nodes.

# Clustering

Cluster group allows to group cluster nodes into various subgroups to perform distributed operations on them. All `'forXXX(...)'` methods will create a child cluster group from the existing cluster group. If you create a new cluster group from the current one, then the resulting cluster group will include a subset of nodes from the current one. The following code shows how to create and nest cluster groups:

     Ignite ignite = Ignition.ignite();

     IgniteCluster cluster = ignite.cluster();

     // Cluster group over remote nodes.
     ClusterGroup remoteNodes = cluster.forRemotes();

     // Cluster group over random remote node.
     ClusterGroup randomNode = remoteNodes.forRandom();

     // Cluster group over all nodes with cache named "myCache" enabled.
     ClusterGroup cacheNodes = cluster.forCacheNodes("myCache");

     // Cluster group over all nodes that have the user attribute "group" set to the value "worker".
     ClusterGroup workerNodes = cluster.forAttribute("group", "worker");

### Method Summary

All Methods Instance Methods Abstract Methods
`ClusterGroup` `forAttribute(String name, Object 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` `forHost(String host, String... hosts)` Gets cluster group consisting from the nodes running on the hosts specified.
`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.
`Collection<String>` `hostNames()` Gets the read-only collection of hostnames in this cluster group.
`Ignite` `ignite()` Gets instance of grid.
`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 nid)` Gets a node for given ID from this cluster group.
`Collection<ClusterNode>` `nodes()` Gets the read-only collection of nodes in this cluster group.
`IgnitePredicate<ClusterNode>` `predicate()` Gets predicate that defines a subset of nodes for this cluster group.

### Method Detail

#### ignite

    Ignite ignite()

Gets instance of grid.

Returns:
  Grid instance.

#### forNodes

    ClusterGroup forNodes(Collection<? extends ClusterNode> nodes)

Creates a cluster group over a given set of nodes.

Parameters:
  `nodes` - Collection of nodes to create the cluster group from.
Returns:
  Cluster group for the provided grid nodes.

#### forNode

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

Creates a cluster group for the given node.

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

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

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

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

    ClusterGroup forOthers(ClusterGroup prj)

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

Parameters:
  `prj` - Cluster group to exclude from the new cluster group.
Returns:
  Cluster group for nodes not included into the given cluster group.

#### forNodeIds

    ClusterGroup forNodeIds(Collection<UUID> ids)

Creates a cluster group over nodes with specified node IDs.

Parameters:
  `ids` - Collection of node IDs.
Returns:
  Cluster group over nodes with the specified node IDs.

#### forNodeId

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

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

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

    ClusterGroup forPredicate(IgnitePredicate<ClusterNode> p)

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

Parameters:
  `p` - Predicate filter for nodes to include into the cluster group.
Returns:
  Cluster group for nodes that passed the predicate filter.

#### forAttribute

    ClusterGroup forAttribute(String name,
                              @Nullable
                              Object 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.

Parameters:
  `name` - Name of the attribute.
  `val` - Optional attribute value to match.
Returns:
  Cluster group for nodes containing specified attribute.

#### forServers

    ClusterGroup forServers()

Creates a cluster group of nodes started in server mode.

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

#### forClients

    ClusterGroup forClients()

Creates a cluster group of nodes started in client mode.

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

#### forCacheNodes

    ClusterGroup forCacheNodes(String cacheName)

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

Parameters:
  `cacheName` - Cache name.
Returns:
  Cluster group over nodes that have specified cache running.

#### forDataNodes

    ClusterGroup forDataNodes(String cacheName)

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

Parameters:
  `cacheName` - Cache name.
Returns:
  Cluster group over nodes that have the cache with the specified name running.

#### forClientNodes

    ClusterGroup forClientNodes(String cacheName)

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

Parameters:
  `cacheName` - Cache name.
Returns:
  Cluster group over nodes that have the specified cache running.

#### forRemotes

    ClusterGroup forRemotes()

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

Returns:
  Cluster group consisting from the nodes in this cluster group excluding the local node.

#### forHost

    ClusterGroup forHost(ClusterNode node)

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

Parameters:
  `node` - Node to select the host for.
Returns:
  Cluster group for nodes residing on the same host as the specified node.

#### forHost

    ClusterGroup forHost(String host,
                         String... hosts)

Gets cluster group consisting from the nodes running on the hosts specified.

Parameters:
  `host` - Host name to get nodes to put in cluster
  `hosts` - Host names to get nodes to put in cluster.
Returns:
  Cluster group for nodes residing on the hosts specified.

#### forDaemons

    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.

Returns:
  Cluster group consisting from the daemon nodes.

#### forRandom

    ClusterGroup forRandom()

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

Returns:
  Cluster group containing one random node from the current cluster group.

#### forOldest

    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 `node()` method to get the oldest node.

Returns:
  Cluster group containing one oldest node from the current cluster group.

#### forYoungest

    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.

Returns:
  Cluster group containing one youngest node from the current cluster group.

#### nodes

    Collection<ClusterNode> nodes()

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

Returns:
  All nodes in this cluster group.

#### node

    ClusterNode node(UUID nid)

Gets a node for given ID from this cluster group.

Parameters:
  `nid` - Node ID.
Returns:
  Node with given ID from this cluster group or `null`, if such node does not exist.

#### node

    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.

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

#### hostNames

    Collection<String> hostNames()

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

Returns:
  All hostnames in this cluster group.

#### predicate

    IgnitePredicate<ClusterNode> predicate()

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

Returns:
  Predicate that defines a subset of nodes for this cluster group.

#### metrics

    ClusterMetrics metrics()
                    throws IgniteException

Gets a metrics snapshot for this cluster group.

Returns:
  Metrics snapshot.
Throws:
  `IgniteException` - If this cluster group is empty.

2018 Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Database and Caching Platform | : ver. 2.7.5
Release Date | : June 4 2019