Функции обратного вызова архивирования определяют фактическое поведение модуля при архивировании. Сервер будет вызывать их по мере необходимости для обработки каждого отдельного файла WAL.
Функция обратного вызова startup_cb вызывается вскоре после загрузки модуля. Данная функция обратного вызова может использоваться для выполнения любой необходимой дополнительной инициализации. Если модуль архивирования имеет состояние, он может использовать
state->private_data для его хранения.
typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);
Функция обратного вызова 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 строке предупреждающего сообщения.
Функция обратного вызова archive_file_cb функция обратного вызова вызывается для архивирования одного файла WAL.
typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);
Если true возвращается, сервер продолжает работу так, будто файл был успешно архивирован, что может включать повторное использование или удаление исходного файла WAL. Если false возвращается или возникает ошибка, сервер сохранит исходный файл WAL и позже повторит попытку архивирования.
file будет содержать только имя файла WAL для архивирования, в то время как path содержит полный путь к файлу WAL (включая имя файла).
Данная archive_file_cb функция обратного вызова вызывается в кратковременном контексте памяти, который сбрасывается между вызовами. Если вам требуется хранилище с более длительным временем жизни, создайте контекст памяти в
startup_cb функции обратного вызова модуля.
Функция обратного вызова shutdown_cb функция обратного вызова вызывается при завершении процесса архиватора (например, в случае ошибки) или когда значение
archive_library изменений. Если не
shutdown_cb определена, то в данных ситуациях никаких специальных действий не выполняется. Если у модуля архивирования имеется какое-либо состояние, данная функция обратного вызова должна освободить его во избежание утечек ресурсов.
typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);