ham_attach_self()

Присоединить приложение как самостоятельно присоединяемый объект

Прототип:

#include <ha/ham.h>
ham_entity_t * ham_attach_self( const char *ename,
_Uint64t hp,
int hpdl,
int hpdh,
unsigned flags );

Аргументы:

ename
Имя объекта. Оно должно быть уникальным во всем контексте HAM. Самостоятельно присоединяемые объекты также могут указывать интервал, с которым они будут отправлять контрольные сигналы в HAM. Контрольные сигналы могут использоваться для обнаружения неотвечающих процессов, которые не "мертвы".
hp
Интервал контрольных сигналов в наносекундах. Наименьший допустимый интервал определяется константой HAMHBEATMIN (см. <ha/ham.h>). Следует использовать значение «0», если контрольные сигналы не требуются.

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

hpdl
Количество допустимых пропущенных контрольных сигналов до срабатывания CONDHBEATMISSEDLOW. Значение hpdl должно быть ≤ hpdh.
hpdh
Как и для hpdl, но для CONDHBEATMISSEDHIGH. Значение hpdh должно быть ≥ hpdl.
flags
Флаги в настоящий момент не поддерживаются.

Библиотека:

libham

Описание:

Вызов ham_attach_self() используется, чтобы присоединить приложение как самостоятельно присоединяемый объект к HAM. Самостоятельно присоединяемый объект — это процесс, который выбирает отправку тактов в HAM, и который затем отслеживает процесс на предмет сбоя. Самостоятельно присоединяемые объекты могут сами решать, в какой именно момент они хотят, чтобы их контролировали, при каких условиях они хотят действовать и когда они хотят прекратить мониторинг.

Следует обратить внимание, что самостоятельно присоединяемые объекты могут быть любыми процессами, а не только в сеансе 1 (в отличие от требования для вызова ham_attach()).

После того как объект был отсоединен, к нему можно добавлять условия и действия.


Note: Поскольку функции ham_attach*() открывают соединение с HAM, для удобства они также выполняют первоначальный вызов ham_connect(). Таким образом, любой клиент, который делает вызов ham_attach_self(), не должен вызывать ham_connect() или ham_disconnect() до и после вызова ().

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

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

Коды ошибок:

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

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

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

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

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

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

ham_attach(), ham_condition(), ham_connect(), ham_detach(), ham_detach_self(), ham_disconnect(), ham_heartbeat(), procmgr_daemon()




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