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.

48.2.3. Архивный обратный вызов #

Функция обратного вызова archive_file_cb вызывается для архивации отдельного файла журнала предзаписи.

typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);

Если возвращается значение true, сервер продолжает работу, как если бы файл был успешно архивирован, что может включать его переработку или удаление. Если возвращается значение false, сервер сохраняет оригинальный файл журнала предзаписи и повторно пытается выполнить архивирование позже. file будет содержать только имя файла журнала предзаписи для архивирования, а path содержит полный путь к файлу WAL (включая имя файла).

48.2.4. Shutdown Callback #

shutdown_cb вызывается, когда процесс архиватора завершает работу (например, после ошибки) или изменяется значение archive_library. Если shutdown_cb не определен, никаких специальных действий в этих ситуациях не предпринимается. Если у модуля архивации есть какое-либо состояние, этот обратный вызов должен освободить его, чтобы избежать утечек.

typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);