ham_action_notify_pulse(), ham_action_notify_pulse_node()

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

Прототип:

#include <ha/ham.h>
ham_action_t * ham_action_notify_pulse( ham_condition_t *chdl,
const char *aname,
int nd,
pid_t topid,
int chid,
int pulsecode,
int value,
unsigned flags );
ham_action_t * ham_action_notify_pulse_node( ham_condition_t *chdl,
const char *aname,
const char *nodename,
pid_t topid,
int chid,
int pulsecode,
int value,
unsigned flags );

Аргументы:

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

Библиотека:

libham

Описание:

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

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

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


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

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

Импульс pulsecode с заданным значением value будет доставлен на topid по указанному идентификатору канала (chid).

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

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

Адрес
Корректный ham_action_t.
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
Отсутствует действие aname в условии cname объекта ename текущего контекста HAM.
ENOMEM
Недостаточно памяти для создания нового дескриптора.

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

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

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

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

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

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




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