| /* |
| * 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.events; |
| |
| import java.io.Serializable; |
| import org.apache.ignite.cluster.ClusterNode; |
| import org.apache.ignite.lang.IgniteUuid; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * Grid events are used for notification about what happens within the grid. Note that by |
| * design Ignite keeps all events generated on the local node locally and it provides |
| * APIs for performing a distributed queries across multiple nodes: |
| * <ul> |
| * <li> |
| * {@link org.apache.ignite.IgniteEvents#remoteQuery(org.apache.ignite.lang.IgnitePredicate, long, int...)} - querying |
| * events occurred on the nodes specified, including remote nodes. |
| * </li> |
| * <li> |
| * {@link org.apache.ignite.IgniteEvents#localQuery(org.apache.ignite.lang.IgnitePredicate, int...)} - querying only local |
| * events stored on this local node. |
| * </li> |
| * <li> |
| * {@link org.apache.ignite.IgniteEvents#localListen(org.apache.ignite.lang.IgnitePredicate, int...)} - listening |
| * to local grid events (events from remote nodes not included). |
| * </li> |
| * </ul> |
| * <h1 class="header">Events and Performance</h1> |
| * Note that by default all events in Ignite are enabled and therefore generated and stored |
| * by whatever event storage SPI is configured. Ignite can and often does generate thousands events per seconds |
| * under the load and therefore it creates a significant additional load on the system. If these events are |
| * not needed by the application this load is unnecessary and leads to significant performance degradation. |
| * <p> |
| * It is <b>highly recommended</b> to enable only those events that your application logic requires |
| * by using either {@link org.apache.ignite.configuration.IgniteConfiguration#getIncludeEventTypes()} method in Ignite configuration. |
| * Note that certain events are required for Ignite's internal operations and such events will still be generated but not stored by |
| * event storage SPI if they are disabled in Ignite configuration. |
| * <h1 class="header">Internal and Hidden Events</h1> |
| * Also note that some events are considered to be internally used or hidden. |
| * <p> |
| * Internally used events are always "recordable" for notification purposes (regardless of whether they were |
| * enabled or disabled). But won't be sent down to SPI level if user specifically excluded them. |
| * <p> |
| * All discovery events are internal: |
| * <ul> |
| * <li>{@link EventType#EVT_NODE_FAILED}</li> |
| * <li>{@link EventType#EVT_NODE_LEFT}</li> |
| * <li>{@link EventType#EVT_NODE_JOINED}</li> |
| * <li>{@link EventType#EVT_NODE_METRICS_UPDATED}</li> |
| * <li>{@link EventType#EVT_NODE_SEGMENTED}</li> |
| * </ul> |
| * <p> |
| * Hidden events are NEVER sent to SPI level. They serve purpose of local |
| * notification for the local node. |
| * <p> |
| * Hidden events: |
| * <ul> |
| * <li>{@link EventType#EVT_NODE_METRICS_UPDATED}</li> |
| * </ul> |
| * @see JobEvent |
| * @see CacheEvent |
| * @see CacheRebalancingEvent |
| * @see CheckpointEvent |
| * @see DeploymentEvent |
| * @see DiscoveryEvent |
| * @see TaskEvent |
| * @see org.apache.ignite.IgniteEvents#waitForLocal(org.apache.ignite.lang.IgnitePredicate, int...) |
| */ |
| public interface Event extends Comparable<Event>, Serializable { |
| /** |
| * Gets globally unique ID of this event. |
| * |
| * @return Globally unique ID of this event. |
| * @see #localOrder() |
| */ |
| public IgniteUuid id(); |
| |
| /** |
| * Gets locally unique ID that is atomically incremented for each event. Unlike |
| * global {@link #id} this local ID can be used for ordering events on this node. |
| * <p> |
| * Note that for performance considerations Ignite doesn't order events globally. |
| * |
| * @return Locally unique ID that is atomically incremented for each new event. |
| * @see #id() |
| */ |
| public long localOrder(); |
| |
| /** |
| * Node where event occurred and was recorded |
| * |
| * @return node where event occurred and was recorded. |
| */ |
| public ClusterNode node(); |
| |
| /** |
| * Gets optional message for this event. |
| * |
| * @return Optional (can be {@code null}) message for this event. |
| */ |
| @Nullable public String message(); |
| |
| /** |
| * Gets type of this event. All system event types are defined in |
| * {@link EventType}. |
| * <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. |
| * |
| * @return Event's type. |
| * @see EventType |
| */ |
| public int type(); |
| |
| /** |
| * Gets name of this event. All events are defined in {@link EventType} class. |
| * |
| * @return Name of this event. |
| */ |
| public String name(); |
| |
| /** |
| * Gets event timestamp. Timestamp is local to the node on which this |
| * event was produced. Note that more than one event can be generated |
| * with the same timestamp. For ordering purposes use {@link #localOrder()} instead. |
| * |
| * @return Event timestamp. |
| */ |
| public long timestamp(); |
| |
| /** |
| * Gets a shortened version of {@code toString()} result. Suitable for humans to read. |
| * |
| * @return Shortened version of {@code toString()} result. |
| */ |
| public String shortDisplay(); |
| } |