| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.ignite.cluster; |
| |
| import java.util.Collection; |
| import java.util.UUID; |
| import org.apache.ignite.Ignite; |
| import org.apache.ignite.IgniteCluster; |
| import org.apache.ignite.IgniteException; |
| import org.apache.ignite.Ignition; |
| import org.apache.ignite.configuration.IgniteConfiguration; |
| import org.apache.ignite.lang.IgnitePredicate; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * Defines a cluster group which contains all or a subset of cluster nodes. |
| * The {@link IgniteCluster} interface itself also extends {@code ClusterGroup} which makes |
| * an instance of {@link IgniteCluster} into a cluster group containing all cluster nodes. |
| * <h1 class="header">Clustering</h1> |
| * Cluster group allows to group cluster nodes into various subgroups to perform distributed |
| * operations on them. All {@code '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: |
| * <pre name="code" class="java"> |
| * 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"); |
| * </pre> |
| */ |
| public interface ClusterGroup { |
| /** |
| * Gets instance of grid. |
| * |
| * @return Grid instance. |
| */ |
| public Ignite ignite(); |
| |
| /** |
| * Creates a cluster group over a given set of nodes. |
| * |
| * @param nodes Collection of nodes to create the cluster group from. |
| * @return Cluster group for the provided grid nodes. |
| */ |
| public ClusterGroup forNodes(Collection<? extends ClusterNode> nodes); |
| |
| /** |
| * Creates a cluster group for the given node. |
| * |
| * @param node Node to create cluster group for. |
| * @param nodes Optional additional nodes to include into the cluster group. |
| * @return Cluster group for the given nodes. |
| */ |
| public ClusterGroup forNode(ClusterNode node, ClusterNode... nodes); |
| |
| /** |
| * Creates a cluster group for nodes other than the given nodes. |
| * |
| * @param node Node to exclude from the new cluster group. |
| * @param nodes Optional additional nodes to exclude from the cluster group. |
| * @return Cluster group that will contain all nodes from the original cluster group excluding |
| * the given nodes. |
| */ |
| public ClusterGroup forOthers(ClusterNode node, ClusterNode... nodes); |
| |
| /** |
| * Creates a cluster group for nodes not included into the given cluster group. |
| * |
| * @param prj Cluster group to exclude from the new cluster group. |
| * @return Cluster group for nodes not included into the given cluster group. |
| */ |
| public ClusterGroup forOthers(ClusterGroup prj); |
| |
| /** |
| * Creates a cluster group over nodes with specified node IDs. |
| * |
| * @param ids Collection of node IDs. |
| * @return Cluster group over nodes with the specified node IDs. |
| */ |
| public ClusterGroup forNodeIds(Collection<UUID> ids); |
| |
| /** |
| * Creates a cluster group for a node with the specified ID. |
| * |
| * @param id Node ID to get the cluster group for. |
| * @param ids Optional additional node IDs to include into the cluster group. |
| * @return Cluster group over the node with the specified node IDs. |
| */ |
| public ClusterGroup forNodeId(UUID id, UUID... ids); |
| |
| /** |
| * Creates a new cluster group which includes all nodes that pass the given predicate filter. |
| * |
| * @param p Predicate filter for nodes to include into the cluster group. |
| * @return Cluster group for nodes that passed the predicate filter. |
| */ |
| public ClusterGroup forPredicate(IgnitePredicate<ClusterNode> p); |
| |
| /** |
| * Creates a new cluster group for nodes containing given name and value |
| * specified in user attributes. |
| * <p> |
| * User attributes for every node are optional and can be specified in |
| * grid node configuration. See {@link IgniteConfiguration#getUserAttributes()} |
| * for more information. |
| * |
| * @param name Name of the attribute. |
| * @param val Optional attribute value to match. |
| * @return Cluster group for nodes containing specified attribute. |
| */ |
| public ClusterGroup forAttribute(String name, @Nullable Object val); |
| |
| /** |
| * Creates a cluster group of nodes started in server mode. |
| * |
| * @see Ignition#setClientMode(boolean) |
| * @see IgniteConfiguration#setClientMode(boolean) |
| * @return Cluster group of nodes started in server mode. |
| */ |
| public ClusterGroup forServers(); |
| |
| /** |
| * Creates a cluster group of nodes started in client mode. |
| |
| * @see Ignition#setClientMode(boolean) |
| * @see IgniteConfiguration#setClientMode(boolean) |
| * @return Cluster group of nodes started in client mode. |
| */ |
| public ClusterGroup forClients(); |
| |
| /** |
| * Creates a cluster group for all nodes that have cache with specified name, either in client or server modes. |
| * |
| * @param cacheName Cache name. |
| * @return Cluster group over nodes that have specified cache running. |
| */ |
| public ClusterGroup forCacheNodes(String cacheName); |
| |
| /** |
| * Creates a cluster group for all data nodes that have the cache with the specified name running. |
| * |
| * @param cacheName Cache name. |
| * @return Cluster group over nodes that have the cache with the specified name running. |
| */ |
| public ClusterGroup forDataNodes(String cacheName); |
| |
| /** |
| * Creates a cluster group for all client nodes that access cache with the specified name. |
| * |
| * @param cacheName Cache name. |
| * @return Cluster group over nodes that have the specified cache running. |
| */ |
| public ClusterGroup forClientNodes(String cacheName); |
| |
| /** |
| * Gets cluster group consisting from the nodes in this cluster group excluding the local node. |
| * |
| * @return Cluster group consisting from the nodes in this cluster group excluding the local node. |
| */ |
| public ClusterGroup forRemotes(); |
| |
| /** |
| * Gets cluster group consisting from the nodes in this cluster group residing on the |
| * same host as the given node. |
| * |
| * @param node Node to select the host for. |
| * @return Cluster group for nodes residing on the same host as the specified node. |
| */ |
| public ClusterGroup forHost(ClusterNode node); |
| |
| /** |
| * Gets cluster group consisting from the nodes running on the hosts specified. |
| * |
| * @param host Host name to get nodes to put in cluster |
| * @param hosts Host names to get nodes to put in cluster. |
| * @return Cluster group for nodes residing on the hosts specified. |
| */ |
| public ClusterGroup forHost(String host, String... hosts); |
| |
| /** |
| * Gets a cluster group consisting from the daemon nodes. |
| * <p> |
| * 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. |
| * <p> |
| * 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. |
| * |
| * @return Cluster group consisting from the daemon nodes. |
| */ |
| public ClusterGroup forDaemons(); |
| |
| /** |
| * Creates a cluster group with one random node from the current cluster group. |
| * |
| * @return Cluster group containing one random node from the current cluster group. |
| */ |
| public ClusterGroup forRandom(); |
| |
| /** |
| * 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. |
| * <p> |
| * Use {@link #node()} method to get the oldest node. |
| * |
| * @return Cluster group containing one oldest node from the current cluster group. |
| */ |
| public ClusterGroup forOldest(); |
| |
| /** |
| * 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. |
| * |
| * @return Cluster group containing one youngest node from the current cluster group. |
| */ |
| public ClusterGroup forYoungest(); |
| |
| /** |
| * Gets the read-only collection of nodes in this cluster group. |
| * |
| * @return All nodes in this cluster group. |
| */ |
| public Collection<ClusterNode> nodes(); |
| |
| /** |
| * Gets a node for given ID from this cluster group. |
| * |
| * @param nid Node ID. |
| * @return Node with given ID from this cluster group or {@code null}, if such node does not exist. |
| */ |
| public ClusterNode node(UUID nid); |
| |
| /** |
| * Gets first node from the list of nodes in this cluster group. This method is specifically |
| * useful for cluster groups with one node only. |
| * |
| * @return First node from the list of nodes in this cluster group or {@code null} if the cluster group is empty. |
| */ |
| public ClusterNode node(); |
| |
| /** |
| * Gets the read-only collection of hostnames in this cluster group. |
| * |
| * @return All hostnames in this cluster group. |
| */ |
| public Collection<String> hostNames(); |
| |
| /** |
| * Gets predicate that defines a subset of nodes for this cluster group. |
| * |
| * @return Predicate that defines a subset of nodes for this cluster group. |
| */ |
| public IgnitePredicate<ClusterNode> predicate(); |
| |
| /** |
| * Gets a metrics snapshot for this cluster group. |
| * |
| * @return Metrics snapshot. |
| * @throws IgniteException If this cluster group is empty. |
| */ |
| public ClusterMetrics metrics() throws IgniteException; |
| } |