События#
В разделе описаны типы событий, когда и где они генерируются, а также как их можно использовать.
Общая информация#
Все события реализуют интерфейс Event. Чтобы получить расширенную информацию о действии, которое вызвало событие, может потребоваться привести каждое событие к определенному типу. Например, обновление кеша запускает событие, которое является экземпляром класса CacheEvent. Он содержит информацию об измененных данных, идентификатор субъекта, который вызвал событие, и так далее.
Все события содержат информацию об узле, на котором они сгенерировались. Например, при запуске задания IgniteClosure события EVT_JOB_STARTED и EVT_JOB_FINISHED содержат информацию об узле, на котором выполнилась функция (closure):
IgniteEvents events = ignite.events();
UUID uuid = events.remoteListen(new IgniteBiPredicate<UUID, JobEvent>() {
@Override
public boolean apply(UUID uuid, JobEvent e) {
System.out.println("nodeID = " + e.node().id() + ", addresses=" + e.node().addresses());
return true; // Продолжайте прослушивание событий.
}
}, null, EventType.EVT_JOB_FINISHED);
Порядок событий
Порядок событий в слушателе может не совпадать с порядком генерации событий.
SubjectID#
У некоторых событий есть поле subjectID — идентификатор сущности, который инициировал действие:
Когда действие инициируется серверным или клиентским узлом,
subjectIDявляется идентификатором этого узла.Когда действие выполняется тонким клиентом или клиентом JDBC/ODBC/REST, идентификатор
subjectIDгенерируется при подключении клиента к кластеру и остается неизменным, пока сохраняется подключение.
Проверьте конкретный тип событий, чтобы узнать, присутствует ли в нем поле subjectID.
События изменения состояния кластера#
События изменения состояния кластера — экземпляры класса ClusterStateChangeEvent.
События такого типа генерируются при изменении состояния кластера, которое происходит при автоматической активации или ручном изменении состояния кластера. События включают новые и старые состояния и список узлов базовой топологии после изменения.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Изменение состояния кластера |
Все узлы кластера |
События жизненного цикла кешей#
События жизненного цикла кешей — экземпляры класса CacheEvent. Каждое из них связано с определенным кешем и содержит поле с его именем.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Кеш запускается на определенном узле. В каждом серверном узле есть внутренний экземпляр кеша. Примеры действий, при которых генерируется событие:
|
Все узлы кластера, где запускаются кеши |
|
Примеры действий, при которых генерируется событие:
|
Все узлы кластера, на которых остановили кеш |
|
Все узлы, в которых есть определенный кеш, покидают кластер. Это возможно в ситуациях, когда:
|
Все оставшиеся узлы кластера |
События кешей#
События кешей — экземпляры класса CacheEvent. Они представляют операции над объектами кеша, например get, put, remove, lock и другие.
Каждое событие содержит информацию о:
кеше;
ключе, к которому обращается операция;
значении до и после операции (если применимо) и так далее.
События кеша также генерируются при использовании DML-команд.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Объект помещается в кеш. Событие генерируется при каждом вызове |
Основной (primary) и резервные (backup) узлы для записи |
|
Объект читается из кеша. Событие не генерируется при использовании запросов сканирования (подробнее о них написано в подразделе «Использование Cache Queries» раздела «Использование Key-Value API»). Для мониторинга запросов сканирования используйте события запросов к кешам |
Узел, на котором выполняется операция чтения. Это может быть основной или резервный узел. Второй случай возможен только при включенном чтении из резервных копий — подробнее о нем написано в подразделе «Конфигурация кешей» раздела «Настройка кешей». В транзакционных кешах событие может генерироваться и на основном, и на резервном узлах в зависимости от уровней параллелизма и изоляции |
|
Объект удален из кеша |
Основной и резервные узлы для записи |
|
Блокировка устанавливается на конкретный ключ в транзакционных кешах. Действия пользователя, которые приводят к блокировке: |
Основной и/или резервные узлы для записи в зависимости от уровней параллелизма и изоляции — подробнее о них написано в разделе «Выполнение транзакций» |
|
Блокировка ключа снимается |
Основной узел для записи |
|
Событие вызывается, когда истекает срок действия записи в кеше. Это происходит только в том случае, если настроена политика потери партиций — подробнее о ней написано в подразделе «Политика потери партиций (Partition Loss Policy)» раздела «Настройка кешей» |
Основной и резервные узлы для записи |
|
Событие вызывается, когда DataGrid создает внутреннюю запись для работы с определенным объектом кеша. Не рекомендуется использовать это событие. Для мониторинга большинства операций добавления кеша достаточно использовать событие |
Основной и резервные узлы для записи |
|
Событие вызывается, когда DataGrid уничтожает внутреннюю запись для работы с определенным объектом кеша. Не рекомендуется использовать это событие. Уничтожение внутренней записи не удаляет данные из кеша. Для мониторинга операций удаления кеша используйте событие |
Основной и резервные узлы для записи |
События запросов к кешам#
Есть два типа событий, которые связаны с запросами к кешам:
события запросов чтения объектов кеша, которые являются экземплярами класса
CacheQueryReadEvent;события выполнения запросов к кешам, которые являются экземплярами класса
CacheQueryExecutedEvent.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Объект считывается как часть выполнения запроса. Событие генерируется для каждого объекта, который соответствует фильтру запроса (подробнее о нем написано в подразделе «Использование Cache Queries» раздела «Использование Key-Value API») |
Основной узел считываемого объекта |
|
Событие генерируется при выполнении запроса |
Все серверные узлы, в которых есть кеш |
События развертывания классов и задач#
События развертывания являются экземплярами класса DeploymentEvent.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Класс (не задача) развернут на определенном узле |
Узел, на котором развернут класс |
|
Класс не развернут |
Узел, на котором не развернут класс |
|
Развертывание класса не выполнилось успешно |
Узел, на котором должен быть развернут класс |
|
Класс задачи развернут на определенном узле |
Узел, на котором развернут класс |
|
Класс задачи не развернут на определенном узле |
Узел, на котором не развернут класс |
|
Развертывание класса не выполнилось успешно |
Узел, на котором должен быть развернут класс |
Discovery-события#
Discovery-события происходят, когда серверные и клиентские узлы присоединяются к кластеру или покидают его, в том числе когда узлы покидают кластер из-за сбоя.
События обнаружения являются экземплярами класса DiscoveryEvent.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Узел присоединяется к кластеру |
Все узлы в кластере (кроме того, который присоединился) |
|
Узел покидает кластер |
Все оставшиеся узлы кластера |
|
Кластер обнаруживает, что узел покинул его некорректным способом |
Все оставшиеся узлы кластера |
|
Событие происходит на узле, который решил, что он сегментировался |
Узел, который сегментировался |
|
Клиентский узел теряет подключение к кластеру |
Клиентский узел, который отключился от кластера |
|
Клиентский узел повторно подключается к кластеру |
Клиентский узел, который повторно подключился к кластеру |
События выполнения задач#
События выполнения задач связаны с разными стадиями их выполнения (подробнее о стадиях написано в подразделе MapReduce API раздела «Распределенные вычисления»). Они также генерируются при выполнении простых задач по распределенным вычислениям (подробнее написано в разделе «Распределенные вычисления»): внутри такая операция рассматривается как задача, которая создает одно задание.
События выполнения задач являются экземплярами класса TaskEvent.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Задача запущена. Вызывается метод |
Узел, который запускает выполнение задачи |
|
Событие представляет стадию |
Узел, на котором запустилась задача |
|
Выполнение задачи завершено |
Узел, на котором запустилась задача |
|
Задача не выполнена |
Узел, на котором запустилась задача |
|
Время выполнения задачи истекло. Это может произойти, если время настроили с помощью метода |
Узел, на котором запустилась задача |
|
Задание устанавливает атрибут в сессии — подробнее об этом написано в подразделе MapReduce API раздела «Распределенные вычисления» |
Узел, на котором выполняется задание |
События выполнения задания являются экземплярами класса JobEvent. Они генерируются на разных этапах выполнения задания и связаны с его конкретными экземплярами. Событие содержит информацию о задаче, которая вызвала задание (название, класс и так далее).
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Задание сопоставляется с конкретным узлом. Сопоставление (маппинг) происходит на узле, где запускается задача. Событие генерируется для каждого задания, которое создано на этапе |
Узел, который запустил выполнение задачи |
|
Задание добавлено в очередь к узлу, с которым оно было сопоставлено |
Узел, на котором запланировано выполнение задания |
|
Выполнение задания началось |
Узел, на котором выполняется задание |
|
Выполнение задания закончилось (включая случаи отмены заданий) |
Узел, на котором выполняется задание |
|
Задание вернуло результат узлу, с которого оно было отправлено |
Узел, на котором запустилось выполнение задачи |
|
Задание не выполнено. Если настроена стратегия аварийного переключения заданий (по умолчанию), это событие сопровождается |
Узел, на котором выполняется задание |
|
Задание не было выполнено и перенеслось на другой узел |
Узел, который запустил выполнение задачи |
|
Время выполнения задания истекло |
— |
|
Задание отклонено. Это может произойти из-за того, что настроен Collision SPI — подробнее о нем написано в подразделе «Планирование выполнения заданий» раздела «Распределенные вычисления» |
Узел, на котором отменено выполнение задания |
|
Задание отменено |
Узел, на котором выполнялось задание |
События ребалансировки кешей#
События ребалансировки кешей (все, кроме EVT_CACHE_REBALANCE_OBJECT_LOADED и EVT_CACHE_REBALANCE_OBJECT_UNLOADED) являются экземплярами класса CacheRebalancingEvent.
Ребалансировка выполняется отдельно для каждого кеша, поэтому каждое событие ребалансировки соответствует определенному кешу. Событие содержит имя кеша.
Процесс перемещения одной партиции кеша с узла A на узел B:
Узел A предоставляет партицию (
REBALANCE_PART_SUPPLIED). Объекты из партиции начинают перемещаться на узел B.Узел B получает данные партиции (
REBALANCE_PART_LOADED).Узел A удаляет партиции из своего хранилища (
REBALANCE_PART_UNLOADED).
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Ребалансировка кешей запущена |
Все узлы, которые содержат кеш |
|
Ребалансировка кешей остановлена |
Все узлы, которые содержат кеш |
|
Партиция кеша загружается на новый узел. Событие генерируется для каждой партиции, которая участвует в ребалансировке кеша |
Узел, на который загружается партиция |
|
Партиция кеша удаляется с узла после загрузки в новое место назначения |
Узел, который содержал партицию до начала процесса ребалансировки |
|
Объект перемещается на новый узел в процессе ребалансировки кешей |
Узел, на который загружается объект |
|
Объект удаляется с узла после перемещения на новый |
Узел, с которого удалился объект |
|
Партиция, которая должна ребалансироваться, потеряна (например, из-за отказа узла) |
— |
|
Узел предоставляет партицию кеша как часть процесса ребалансировки |
Узел, который владеет партицией |
События транзакций#
События транзакций являются экземплярами класса TransactionStateChangedEvent. С их помощью можно получить уведомления о разных стадиях выполнения транзакций. Каждое событие содержит объект Transaction, с которым оно связано.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Транзакция запустилась. В транзакционных кешах каждая атомарная операция, которая выполняется вне транзакции, считается транзакцией с одной операцией |
Узел, на котором была запущена транзакция |
|
Транзакция завершилась |
Узел, на котором была запущена транзакция |
|
Транзакция откатилась |
Узел, на котором была выполнена транзакция |
|
Транзакция приостановилась |
Узел, на котором была запущена транзакция |
|
Транзакция возобновилась |
Узел, на котором была запущена транзакция |
События снепшотов#
Все события снепшотов являются экземплярами класса SnapshotEvent.
События снепшотов всегда генерируются на узле, который запустил операцию создания снепшота. Они также связаны с определенным названием операции снепшота. События могут уведомить о состояниях и результатах операций снепшотов, которые можно использовать для дальнейшей обработки пользовательских процедур.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Операция снепшота кластера началась |
Узел, на котором запустилась операция снепшота |
|
Операция снепшота кластера завершилась. Событие сгенерируется после окончания операции на всех узлах кластера |
Узел, на котором завершилась операция снепшота |
|
Операция снепшота кластера завершилась неуспешно |
Узел, на котором запустилась операция снепшота. В сообщении будет описание ошибки с другого узла. Детали указаны в log-файле |
События сбоя валидации узла#
События запускаются, когда новый узел не может присоединиться к кластеру DataGrid, так как некоторые узлы кластера не смогли его проверить. Валидация включает в себя проверку совместимости конфигурации и состояния между присоединяющимся узлом и остальными узлами кластера. События сбоя валидации узла предоставляют информацию об узле, который пытался присоединиться к кластеру, и причине сбоя проверки.
События, которые относятся к сбою проверки узла, являются экземплярами класса NodeValidationFailedEvent.
Тип события |
Описание события |
Место, где генерируется событие |
|---|---|---|
|
Валидация узла выполнилась неуспешно |
Узел кластера, который проводил валидацию нового узла, пытавшегося присоединиться к кластеру |