ham_action_notify_signal(), ham_action_notify_signal_node()

Добавить уведомляющий сигнал к условию

Прототип:

#include <ha/ham.h>
ham_action_t * ham_action_notify_signal( ham_condition_t *chdl,
const char *aname,
int nd,
pid_t topid,
int signum,
int code,
int value,
unsigned flags );
ham_action_t * ham_action_notify_signal_node( ham_condition_t *chdl,
const char *aname,
const char *nodename,
pid_t topid,
int signum,
int code,
int value,
unsigned flags );

Аргументы:

сhdl
Дескриптор условия в HAM. Дескриптор (сhdl) может быть получен из:
aname
Действие HAM.
nd
Идентификатор узла получателя.
nodename
Удалённый получатель .
topid
Идентификатор целевого процесса.
signum
Сигнал для доставки.
code
Код доставляемого сигнала.
value
Значение доставляемого сигнала.
flags
Флаги:
HREARMAFTERRESTART
Указывает, что действие должно быть автоматически перезапущено после перезапуска объекта, которому оно принадлежит. По умолчанию данный флаг отключен — действия автоматически завершаются при перезапуске объекта. Обратите внимание, что если условие, которому принадлежит данное действие, удаляется после перезапуска, это действие также будет удалено, независимо от значения данного флага.
HACTIONBREAKONFAIL
Указывает, что если данное действие завершится ошибкой, и оно является частью списка действий, то ни одно из действий, следующих за ним в списке действий не будет выполнено.
HACTIONKEEPONFAIL
Указывает, что действие будет сохранено даже в случае сбоя. Поведение по умолчанию — удалить неудачные действия. Тем не менее, если условие, с которым связано данное действие, не сохраняется, действие будет автоматически удалено.

Библиотека:

libham

Описание:

Данные функции добавляют действие к заданному условию. Действие доставит уведомляющий сигнал процессу topid.

Действие выполняется, когда срабатывает соответствующее условие.

Следует использовать дескриптор узла (nd), чтобы указать получателя уведомления.

nd указывает идентификатор удаленного (или локального) узла, куда будет отправлен сигнал.


Note: Поскольку идентификаторы узлов являются временными объектами, необходимо получить значение для nd непосредственно перед вызовом, используя netmgr_strtond() или другую функцию, которая преобразует nodename в идентификаторы узлов.

Используйте функцию ham_action_notify_signal_node(), когда nodename используется для указания удаленного HAM вместо идентификатора узла (nd). Функция ham_action_notify_signal_node() принимает в качестве параметра полное имя узла (FQNN).

Сигнал signum с заданным значением будет доставлен процессу pid на узле nd. Этот механизм также можно использовать для завершения процессов, отправляя им соответствующие сигналы, такие как SIGTERM, SIGKILL и т. д.

Пользователи могут указать, что будет сделано, если действие не будет совершено. Такие действия добавляются в список. Для каждого несовершенного действия будет выполнен соответствующий список действий. Некоторые действия (например, ham_action_log() и ham_action_heartbeat_healthy()) гарантированно совершаются. Для получения дополнительной информации обратитесь к соответствующему разделу в Использование менеджера высокой готовности для вызовов ham_action_fail_*().

Возвращаемое значение:

Адрес
Дескриптор действия для условия.
NULL
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EBADF
Не удалось подключиться к HAM.
EEXIST
Переданное имя для действия уже существует.
EINVAL
Имя aname некорректно (например, содержит символ /) или имеет значение NULL. Не удалось подключиться к HAM. Это происходит, когда процесс, открывший соединение (используя ham_connect()), и процесс, вызывающий ham_action_execute(), не совпадают.
ENAMETOOLONG
Указанное имя (в aname) слишком длинное, т.е. оно превышает _POSIX_PATH_MAX (определено в <limits.h>). Обратите внимание, что общая длина имени объекта/условия/действия также ограничена _POSIX_PATH_MAX.
ENOENT
Отсутствует объект или условие, заданное в дескрипторе (chdl).
ENOMEM
Недостаточно памяти для создания нового дескриптора.

В дополнение к вышеуказанным ошибкам HAM возвращает любую ошибку, с которой он сталкивается при обслуживании данного запроса.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

ham_action_execute(), ham_action_notify_pulse(), ham_action_remove(), ham_action_restart(), ham_action_waitfor(), ham_condition()




Предыдущий раздел: Менеджер высокой готовности (HAM)