47.2. Обратные вызовы модуля архива#
47.2. Обратные вызовы модуля архива #
Колбэки архива определяют фактическое поведение архивации модуля. Сервер будет вызывать их по мере необходимости для обработки каждого отдельного файла журнала предзаписи.
47.2.1. Запуск обратного вызова #
The startup_cb callback вызывается вскоре после
загрузки модуля. Этот callback можно использовать для выполнения любой дополнительной
инициализации, если это необходимо. Если архивный модуль имеет какое-либо состояние, он может использовать
state->private_data для его хранения.
typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);
47.2.2. Проверить обратный вызов #
Обратный вызов check_configured_cb вызывается для определения, полностью ли настроен модуль и готов ли он принимать файлы WAL (например, его параметры конфигурации установлены на допустимые значения). Если не определен обратный вызов check_configured_cb, сервер всегда считает, что модуль настроен.
typedef bool (*ArchiveCheckConfiguredCB) (ArchiveModuleState *state);
Если возвращается значение true, сервер будет продолжать архивирование файла, вызывая обратный вызов archive_file_cb. Если возвращается значение false, архивирование не будет продолжаться, и архиватор выведет следующее сообщение в журнал сервера:
WARNING: archive_mode enabled, yet archiving is not configured
В последнем случае сервер периодически будет вызывать эту функцию, и
архивирование будет выполняться только тогда, когда она вернет true.
Примечание
При возврате false, может быть полезно добавить некоторую
дополнительную информацию к общему предупреждающему сообщению. Для этого предоставьте
сообщение макросу arch_module_check_errdetail
перед возвратом false. Как и
errdetail(), этот макрос принимает строку формата,
за которой следует необязательный список аргументов. Полученная строка будет
выведена как строка DETAIL предупреждающего сообщения.
47.2.3. Архивный обратный вызов #
Функция обратного вызова archive_file_cb вызывается для архивации
отдельного файла журнала предзаписи.
typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);
Если возвращается true, сервер продолжает работу так, как если бы файл
был успешно архивирован, что может включать в себя переработку или удаление
оригинального файла WAL. Если возвращается false или возникает ошибка, сервер
сохранит оригинальный файл WAL и попытается архивировать его позже.
file будет содержать только имя файла WAL
для архивирования, в то время как path содержит полный
путь к файлу WAL (включая имя файла).
Примечание
archive_file_cb вызывается в
кратковременном контексте памяти, который будет сбрасываться между вызовами. Если вам
нужно более долговременное хранилище, создайте контекст памяти в
startup_cb модуля.
47.2.4. Shutdown Callback #
shutdown_cb вызывается, когда процесс архиватора
завершает работу (например, после ошибки) или изменяется значение
archive_library. Если
shutdown_cb не определен, никаких специальных действий
в этих ситуациях не предпринимается. Если у модуля архивации есть какое-либо состояние, этот обратный вызов должен освободить его, чтобы избежать утечек.
typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);