| /* |
| * 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; |
| |
| import java.util.Collection; |
| import java.util.List; |
| import java.util.UUID; |
| import org.apache.ignite.cluster.ClusterGroup; |
| import org.apache.ignite.events.Event; |
| import org.apache.ignite.lang.IgniteAsyncSupport; |
| import org.apache.ignite.lang.IgniteAsyncSupported; |
| import org.apache.ignite.lang.IgniteBiPredicate; |
| import org.apache.ignite.lang.IgniteFuture; |
| import org.apache.ignite.lang.IgnitePredicate; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * Provides functionality for local and remote event notifications on nodes defined by {@link #clusterGroup()}. |
| * There are {@code 2} ways to subscribe to event listening, {@code local} and {@code remote}. |
| * <p> |
| * Instance of {@code IgniteEvents} is obtained from {@link Ignite} as follows: |
| * <pre class="brush:java"> |
| * Ignite ignite = Ignition.ignite(); |
| * |
| * IgniteEvents evts = ignite.events(); |
| * </pre> |
| * You can also obtain an instance of the events facade over a specific cluster group: |
| * <pre class="brush:java"> |
| * // Cluster group over remote nodes (excluding the local node). |
| * ClusterGroup remoteNodes = ignite.cluster().forRemotes(); |
| * |
| * // Events instance spanning all remote cluster nodes. |
| * IgniteEvents evts = ignite.events(remoteNodes); |
| * </pre> |
| * <p> |
| * Local subscription, defined by {@link #localListen(IgnitePredicate, int...)} method, will add |
| * a listener for specified events on local node only. This listener will be notified whenever any |
| * of subscribed events happen on local node regardless of whether local node belongs to underlying |
| * cluster group or not. |
| * <p> |
| * Remote subscription, defined by {@link #remoteListen(IgniteBiPredicate, IgnitePredicate, int...)}, will add an |
| * event listener for specified events on all nodes in the cluster group (possibly including local node if |
| * it belongs to the cluster group as well). All cluster group nodes will then be notified of the subscribed events. |
| * If the events pass the remote event filter, the events will be sent to local node for local listener notification. |
| * <p> |
| * Note that by default, all events in Ignite are disabled for performance reasons. You must only enable |
| * events that you need within your logic. You can enable/disable events either by calling {@link #enableLocal(int...)} |
| * or {@link #disableLocal(int...)} methods, or from XML configuration. |
| * For example, you can enable all cache events as follows: |
| * <pre name="code" class="xml"> |
| * <property name="includeEventTypes"> |
| * <util:constant static-field="org.apache.ignite.events.IgniteEventType.EVTS_CACHE"/> |
| * </property> |
| * </pre> |
| */ |
| public interface IgniteEvents extends IgniteAsyncSupport { |
| /** |
| * Gets cluster group to which this {@code IgniteEvents} instance belongs. |
| * |
| * @return Cluster group to which this {@code IgniteEvents} instance belongs. |
| */ |
| public ClusterGroup clusterGroup(); |
| |
| /** |
| * Queries nodes in this cluster group for events using passed in predicate filter for event |
| * selection. |
| * |
| * @param p Predicate filter used to query events on remote nodes. |
| * @param timeout Maximum time to wait for result, {@code 0} to wait forever. |
| * @param types Event types to be queried. |
| * @return Collection of grid events returned from specified nodes. |
| * @throws IgniteException If query failed. |
| */ |
| @IgniteAsyncSupported |
| public <T extends Event> List<T> remoteQuery(IgnitePredicate<T> p, long timeout, @Nullable int... types) |
| throws IgniteException; |
| |
| /** |
| * Asynchronously queries nodes in this cluster group for events using passed in predicate filter for event |
| * selection. |
| * |
| * @param p Predicate filter used to query events on remote nodes. |
| * @param timeout Maximum time to wait for result, {@code 0} to wait forever. |
| * @param types Event types to be queried. |
| * @return a Future representing pending completion of the query. The completed future contains |
| * collection of grid events returned from specified nodes. |
| * @throws IgniteException If query failed. |
| */ |
| public <T extends Event> IgniteFuture<List<T>> remoteQueryAsync(IgnitePredicate<T> p, long timeout, |
| @Nullable int... types) throws IgniteException; |
| |
| /** |
| * Adds event listener for specified events to all nodes in the cluster group (possibly including |
| * local node if it belongs to the cluster group as well). This means that all events occurring on |
| * any node within this cluster group that pass remote filter will be sent to local node for |
| * local listener notifications. |
| * <p> |
| * The listener can be unsubscribed automatically if local node stops, if {@code locLsnr} callback |
| * returns {@code false} or if {@link #stopRemoteListen(UUID)} or {@link #stopRemoteListenAsync(UUID)} are called. |
| * |
| * @param locLsnr Listener callback that is called on local node. If {@code null}, this events will be handled |
| * on remote nodes by passed in {@code rmtFilter}. |
| * @param rmtFilter Filter callback that is called on remote node. Only events that pass the remote filter |
| * will be sent to local node. If {@code null}, all events of specified types will |
| * be sent to local node. This remote filter can be used to pre-handle events remotely, |
| * before they are passed in to local callback. It will be auto-unsubsribed on the node |
| * where event occurred in case if it returns {@code false}. |
| * @param types Types of events to listen for. If not provided, all events that pass the |
| * provided remote filter will be sent to local node. |
| * @param <T> Type of the event. |
| * @return {@code Operation ID} that can be passed to {@link #stopRemoteListen(UUID)} or |
| * {@link #stopRemoteListenAsync(UUID)} methods to stop listening. |
| * @throws IgniteException If failed to add listener. |
| */ |
| @IgniteAsyncSupported |
| public <T extends Event> UUID remoteListen(@Nullable IgniteBiPredicate<UUID, T> locLsnr, |
| @Nullable IgnitePredicate<T> rmtFilter, |
| @Nullable int... types) |
| throws IgniteException; |
| |
| /** |
| * Asynchronously adds event listener for specified events to all nodes in the cluster group (possibly including |
| * local node if it belongs to the cluster group as well). This means that all events occurring on |
| * any node within this cluster group that pass remote filter will be sent to local node for |
| * local listener notifications. |
| * <p> |
| * The listener can be unsubscribed automatically if local node stops, if {@code locLsnr} callback |
| * returns {@code false} or if {@link #stopRemoteListen(UUID)} or {@link #stopRemoteListenAsync(UUID)} are called. |
| * |
| * @param <T> Type of the event. |
| * @param locLsnr Listener callback that is called on local node. If {@code null}, this events will be handled |
| * on remote nodes by passed in {@code rmtFilter}. |
| * @param rmtFilter Filter callback that is called on remote node. Only events that pass the remote filter |
| * will be sent to local node. If {@code null}, all events of specified types will |
| * be sent to local node. This remote filter can be used to pre-handle events remotely, |
| * before they are passed in to local callback. It will be auto-unsubsribed on the node |
| * where event occurred in case if it returns {@code false}. |
| * @param types Types of events to listen for. If not provided, all events that pass the |
| * provided remote filter will be sent to local node. |
| * @return a Future representing pending completion of the operation. The completed future contains |
| * {@code Operation ID} that can be passed to {@link #stopRemoteListen(UUID)} or |
| * {@link #stopRemoteListenAsync(UUID)} methods to stop listening. |
| * @throws IgniteException If failed to add listener. |
| */ |
| public <T extends Event> IgniteFuture<UUID> remoteListenAsync(@Nullable IgniteBiPredicate<UUID, T> locLsnr, |
| @Nullable IgnitePredicate<T> rmtFilter, |
| @Nullable int... types) |
| throws IgniteException; |
| |
| /** |
| * Adds event listener for specified events to all nodes in the cluster group (possibly including |
| * local node if it belongs to the cluster group as well). This means that all events occurring on |
| * any node within this cluster group that pass remote filter will be sent to local node for |
| * local listener notification. |
| * <p> |
| * Supports asynchronous execution (see {@link IgniteAsyncSupport}). |
| * |
| * @param bufSize Remote events buffer size. Events from remote nodes won't be sent until buffer |
| * is full or time interval is exceeded. |
| * @param interval Maximum time interval after which events from remote node will be sent. Events |
| * from remote nodes won't be sent until buffer is full or time interval is exceeded. |
| * @param autoUnsubscribe Flag indicating that event listeners on remote nodes should be |
| * automatically unregistered if master node (node that initiated event listening) leaves |
| * topology. If this flag is {@code false}, listeners will be unregistered only when |
| * {@link #stopRemoteListen(UUID)} method is called, or the {@code 'callback (locLsnr)'} |
| * passed in returns {@code false}. |
| * @param locLsnr Callback that is called on local node. If this predicate returns {@code true}, |
| * the implementation will continue listening to events. Otherwise, events |
| * listening will be stopped and listeners will be unregistered on all nodes |
| * in the cluster group. If {@code null}, this events will be handled on remote nodes by |
| * passed in {@code rmtFilter} until local node stops (if {@code 'autoUnsubscribe'} is {@code true}) |
| * or until {@link #stopRemoteListen(UUID)} is called. |
| * @param rmtFilter Filter callback that is called on remote node. Only events that pass the remote filter |
| * will be sent to local node. If {@code null}, all events of specified types will |
| * be sent to local node. This remote filter can be used to pre-handle events remotely, |
| * before they are passed in to local callback. It will be auto-unsubsribed on the node |
| * where event occurred in case if it returns {@code false}. |
| * @param types Types of events to listen for. If not provided, all events that pass the |
| * provided remote filter will be sent to local node. |
| * @param <T> Type of the event. |
| * @return {@code Operation ID} that can be passed to {@link #stopRemoteListen(UUID)} or |
| * {@link #stopRemoteListen(UUID)} methods to stop listening. |
| * @throws IgniteException If failed to add listener. |
| * @see #stopRemoteListen(UUID) |
| * @see #stopRemoteListenAsync(UUID) |
| */ |
| @IgniteAsyncSupported |
| public <T extends Event> UUID remoteListen(int bufSize, |
| long interval, |
| boolean autoUnsubscribe, |
| @Nullable IgniteBiPredicate<UUID, T> locLsnr, |
| @Nullable IgnitePredicate<T> rmtFilter, |
| @Nullable int... types) |
| throws IgniteException; |
| |
| /** |
| * Asynchronously adds event listener for specified events to all nodes in the cluster group (possibly including |
| * local node if it belongs to the cluster group as well). This means that all events occurring on |
| * any node within this cluster group that pass remote filter will be sent to local node for |
| * local listener notification. |
| * |
| * @param <T> Type of the event. |
| * @param bufSize Remote events buffer size. Events from remote nodes won't be sent until buffer |
| * is full or time interval is exceeded. |
| * @param interval Maximum time interval after which events from remote node will be sent. Events |
| * from remote nodes won't be sent until buffer is full or time interval is exceeded. |
| * @param autoUnsubscribe Flag indicating that event listeners on remote nodes should be |
| * automatically unregistered if master node (node that initiated event listening) leaves |
| * topology. If this flag is {@code false}, listeners will be unregistered only when |
| * {@link #stopRemoteListen(UUID)} method is called, or the {@code 'callback (locLsnr)'} |
| * passed in returns {@code false}. |
| * @param locLsnr Callback that is called on local node. If this predicate returns {@code true}, |
| * the implementation will continue listening to events. Otherwise, events |
| * listening will be stopped and listeners will be unregistered on all nodes |
| * in the cluster group. If {@code null}, this events will be handled on remote nodes by |
| * passed in {@code rmtFilter} until local node stops (if {@code 'autoUnsubscribe'} is {@code true}) |
| * or until {@link #stopRemoteListen(UUID)} is called. |
| * @param rmtFilter Filter callback that is called on remote node. Only events that pass the remote filter |
| * will be sent to local node. If {@code null}, all events of specified types will |
| * be sent to local node. This remote filter can be used to pre-handle events remotely, |
| * before they are passed in to local callback. It will be auto-unsubsribed on the node |
| * where event occurred in case if it returns {@code false}. |
| * @param types Types of events to listen for. If not provided, all events that pass the |
| * provided remote filter will be sent to local node. |
| * @return a Future representing pending completion of the operation. The completed future contains |
| * {@code Operation ID} that can be passed to {@link #stopRemoteListen(UUID)} |
| * or {@link #stopRemoteListen(UUID)} methods to stop listening. |
| * @throws IgniteException If failed to add listener. |
| * @see #stopRemoteListen(UUID) |
| * @see #stopRemoteListenAsync(UUID) |
| */ |
| public <T extends Event> IgniteFuture<UUID> remoteListenAsync(int bufSize, |
| long interval, |
| boolean autoUnsubscribe, |
| @Nullable IgniteBiPredicate<UUID, T> locLsnr, |
| @Nullable IgnitePredicate<T> rmtFilter, |
| @Nullable int... types) |
| throws IgniteException; |
| |
| /** |
| * Stops listening to remote events. This will unregister all listeners identified with provided |
| * operation ID on all nodes defined by {@link #clusterGroup()}. |
| * <p> |
| * Supports asynchronous execution (see {@link IgniteAsyncSupport}). |
| * |
| * @param opId Operation ID that was returned from |
| * {@link #remoteListen(IgniteBiPredicate, IgnitePredicate, int...)} method. |
| * @throws IgniteException If failed to stop listeners. |
| * @see #remoteListen(IgniteBiPredicate, IgnitePredicate, int...) |
| * @see #remoteListenAsync(int, long, boolean, IgniteBiPredicate, IgnitePredicate, int...) |
| */ |
| @IgniteAsyncSupported |
| public void stopRemoteListen(UUID opId) throws IgniteException; |
| |
| /** |
| * Asynchronously stops listening to remote events. This will unregister all listeners identified with provided |
| * operation ID on all nodes defined by {@link #clusterGroup()}. |
| * |
| * @param opId Operation ID that was returned from |
| * {@link #remoteListen(IgniteBiPredicate, IgnitePredicate, int...)} method. |
| * @return a Future representing pending completion of the operation. |
| * @throws IgniteException If failed to stop listeners. |
| * @see #remoteListen(IgniteBiPredicate, IgnitePredicate, int...) |
| * @see #remoteListenAsync(int, long, boolean, IgniteBiPredicate, IgnitePredicate, int...) |
| */ |
| public IgniteFuture<Void> stopRemoteListenAsync(UUID opId) throws IgniteException; |
| |
| /** |
| * Waits for the specified events. |
| * <p> |
| * Supports asynchronous execution (see {@link IgniteAsyncSupport}). |
| * |
| * @param filter Optional filtering predicate. Only if predicates evaluates to {@code true} will the event |
| * end the wait. |
| * @param types Types of the events to wait for. If not provided, all events will be passed to the filter. |
| * @return Grid event. |
| * @throws IgniteException If wait was interrupted. |
| */ |
| @IgniteAsyncSupported |
| public <T extends Event> T waitForLocal(@Nullable IgnitePredicate<T> filter, @Nullable int... types) |
| throws IgniteException; |
| |
| /** |
| * Create future to wait for the specified events. |
| * |
| * @param filter Optional filtering predicate. Only if predicates evaluates to {@code true} will the event |
| * end the wait. |
| * @param types Types of the events to wait for. If not provided, all events will be passed to the filter. |
| * @return a Future representing pending completion of the operation. The completed future contains grid event. |
| * @throws IgniteException If wait was interrupted. |
| */ |
| public <T extends Event> IgniteFuture<T> waitForLocalAsync(@Nullable IgnitePredicate<T> filter, |
| @Nullable int... types) throws IgniteException; |
| |
| /** |
| * Queries local node for events using passed-in predicate filter for event selection. |
| * |
| * @param p Predicate to filter events. All predicates must be satisfied for the |
| * event to be returned. |
| * @param types Event types to be queried. |
| * @return Collection of grid events found on local node. |
| */ |
| public <T extends Event> Collection<T> localQuery(IgnitePredicate<T> p, @Nullable int... types); |
| |
| /** |
| * Records customer user generated event. All registered local listeners will be notified. |
| * <p> |
| * NOTE: all types in range <b>from 1 to 1000 are reserved</b> for |
| * internal Ignite events and should not be used by user-defined events. |
| * Attempt to record internal event with this method will cause {@code IllegalArgumentException} |
| * to be thrown. |
| * |
| * @param evt Locally generated event. |
| * @throws IllegalArgumentException If event type is within Ignite reserved range between {@code 1} and |
| * {@code 1000}. |
| */ |
| public void recordLocal(Event evt); |
| |
| /** |
| * Adds an event listener for local events. Note that listener will be added regardless of whether |
| * local node is in this cluster group or not. |
| * |
| * @param lsnr Predicate that is called on each received event. If predicate returns {@code false}, |
| * it will be unregistered and will stop receiving events. |
| * @param types Event types for which this listener will be notified. |
| * @throws IllegalArgumentException Thrown in case when passed in array of event types is empty. |
| */ |
| public void localListen(IgnitePredicate<? extends Event> lsnr, int... types); |
| |
| /** |
| * Removes local event listener. |
| * |
| * @param lsnr Local event listener to remove. |
| * @param types Types of events for which to remove listener. If not specified, |
| * then listener will be removed for all types it was registered for. |
| * @return {@code true} if listener was removed, {@code false} otherwise. |
| */ |
| public boolean stopLocalListen(IgnitePredicate<? extends Event> lsnr, @Nullable int... types); |
| |
| /** |
| * Enables provided events. Allows to start recording events that |
| * were disabled before. Note that specified events will be enabled |
| * regardless of whether local node is in this cluster group or not. |
| * |
| * @param types Events to enable. |
| */ |
| public void enableLocal(int... types); |
| |
| /** |
| * Disables provided events. Allows to stop recording events that |
| * were enabled before. Note that specified events will be disabled |
| * regardless of whether local node is in this cluster group or not. |
| * |
| * @param types Events to disable. |
| */ |
| public void disableLocal(int... types); |
| |
| /** |
| * Gets types of enabled events. |
| * |
| * @return Types of enabled events. |
| */ |
| public int[] enabledEvents(); |
| |
| /** |
| * Check if event is enabled. |
| * |
| * @param type Event type. |
| * @return {@code True} if event of passed in type is enabled. |
| */ |
| public boolean isEnabled(int type); |
| |
| /** {@inheritDoc} */ |
| @Deprecated |
| @Override public IgniteEvents withAsync(); |
| } |