48.2. Обратные вызовы модуля архива#

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);