48.2. Обратные вызовы модуля архива#
48.2. Обратные вызовы модуля архива #
Колбэки архива определяют фактическое поведение архивации модуля. Сервер будет вызывать их по мере необходимости для обработки каждого отдельного файла журнала предзаписи.
48.2.1. Запуск обратного вызова #
The startup_cb
callback вызывается вскоре после
загрузки модуля. Этот callback можно использовать для выполнения любой дополнительной
инициализации, если это необходимо. Если архивный модуль имеет какое-либо состояние, он может использовать
state->private_data
для его хранения.
typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);
48.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
предупреждающего сообщения.
48.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
модуля.
48.2.4. Shutdown Callback #
shutdown_cb
вызывается, когда процесс архиватора
завершает работу (например, после ошибки) или изменяется значение
archive_library. Если
shutdown_cb
не определен, никаких специальных действий
в этих ситуациях не предпринимается. Если у модуля архивации есть какое-либо состояние, этот обратный вызов должен освободить его, чтобы избежать утечек.
typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);