49.2. ÐбÑабоÑÑики модÑлей аÑÑ Ð¸Ð²Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ #
ÐбÑабоÑÑики аÑÑ Ð¸Ð²Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ, как именно модÑÐ»Ñ Ð±ÑÐ´ÐµÑ Ð²ÑполнÑÑÑ Ð°ÑÑ Ð¸Ð²Ð¸Ñование. СеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð²ÑзÑваÑÑ Ð¸Ñ Ð¿Ð¾ меÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи Ð´Ð»Ñ Ð¾Ð±ÑабоÑки каждого оÑделÑного Ñайла WAL.
49.2.1. ÐбÑабоÑÑик запÑÑка #
ÐбÑабоÑÑик startup_cb вÑзÑваеÑÑÑ Ð²ÑкоÑе поÑле загÑÑзки модÑлÑ. ÐÑÐ¾Ñ Ð¾Ð±ÑабоÑÑик можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð»Ñбой необÑ
одимой дополниÑелÑной иниÑиализаÑии. ÐÑли еÑÑÑ Ð´Ð°Ð½Ð½Ñе о ÑоÑÑоÑнии модÑÐ»Ñ Ð°ÑÑ
ивиÑованиÑ, обÑабоÑÑик Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ state->private_data Ð´Ð»Ñ Ð¸Ñ
Ñ
ÑанениÑ.
typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);
49.2.2. ÐбÑабоÑÑик пÑовеÑки #
ÐбÑабоÑÑик check_configured_cb вÑзÑваеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ, полноÑÑÑÑ Ð»Ð¸ наÑÑÑоен модÑÐ»Ñ Ð¸ гоÑов ли он пÑинимаÑÑ ÑÐ°Ð¹Ð»Ñ WAL (в ÑаÑÑноÑÑи, ÑÑо Ð´Ð»Ñ ÐµÐ³Ð¾ паÑамеÑÑов конÑигÑÑаÑии ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð´Ð¾Ð¿ÑÑÑимÑе знаÑениÑ). ÐÑли ÑÑнкÑÐ¸Ñ check_configured_cb не опÑеделена, ÑеÑÐ²ÐµÑ Ð²Ñегда пÑедполагаеÑ, ÑÑо модÑÐ»Ñ Ð³Ð¾Ñов к ÑабоÑе.
typedef bool (*ArchiveCheckConfiguredCB) (ArchiveModuleState *state);
ÐÑли возвÑаÑаеÑÑÑ true, ÑеÑÐ²ÐµÑ Ð¿ÐµÑейдÑÑ Ðº аÑÑ
ивиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайла, вÑзвав обÑабоÑÑик archive_file_cb. ÐÑли возвÑаÑаеÑÑÑ false, аÑÑ
ивиÑование не пÑоизводиÑÑÑ Ð¸ аÑÑ
иваÑÐ¾Ñ Ð²ÑдаÑÑ Ð² жÑÑнал ÑеÑвеÑа ÑледÑÑÑее ÑообÑение:
ÐÐÐÐÐÐÐÐ: вклÑÑÑн Ñежим archive_mode, но аÑÑ Ð¸Ð²Ð¸Ñование не наÑÑÑоено
РпоÑледнем ÑлÑÑае ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÐµÑиодиÑеÑки вÑзÑваÑÑ ÑÑÑ ÑÑнкÑиÑ, и аÑÑ
ивиÑование наÑнÑÑÑÑ ÑолÑко Ñогда, когда она веÑнÑÑ true.
ÐÑимеÑание
ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ добавиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ðº обÑÐµÐ¼Ñ ÑекÑÑÑ Ð¿ÑедÑпÑеждениÑ, когда ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ false. ÐÐ»Ñ ÑÑого добавÑÑе ÑообÑение в макÑÐ¾Ñ arch_module_check_errdetail пеÑед возвÑаÑом false. Ðак и errdetail(), ÑÑÐ¾Ñ Ð¼Ð°ÐºÑÐ¾Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑÐ¾ÐºÑ ÑоÑмаÑа Ñ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм ÑпиÑком аÑгÑменÑов. СÑÑока, пеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ Ð² макÑоÑ, бÑÐ´ÐµÑ Ð²Ñведена как ÑÑÑока DETAIL в пÑедÑпÑеждаÑÑем ÑообÑении.
49.2.3. ÐбÑабоÑÑик аÑÑ Ð¸Ð²Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ #
ÐбÑабоÑÑик archive_file_cb вÑзÑваеÑÑÑ Ð´Ð»Ñ Ð°ÑÑ
ивиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñайла WAL.
typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);
ÐÑли возвÑаÑаеÑÑÑ true, ÑеÑÐ²ÐµÑ ÑÑиÑаеÑ, ÑÑо Ñайл бÑл ÑÑпеÑно зааÑÑ
ивиÑован, и Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеÑабоÑаÑÑ Ð¸Ð»Ð¸ ÑдалиÑÑ Ð¸ÑÑ
однÑй Ñайл WAL. ÐÑли возвÑаÑаеÑÑÑ false или Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка, ÑеÑÐ²ÐµÑ ÑоÑ
ÑанÑÐµÑ Ð¸ÑÑ
однÑй Ñайл WAL и повÑоÑÑÐµÑ Ð¿Ð¾Ð¿ÑÑÐºÑ Ð°ÑÑ
ивиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð·Ð¶Ðµ. ÐÑгÑÐ¼ÐµÐ½Ñ Ñайл ÑодеÑÐ¶Ð¸Ñ ÑолÑко Ð¸Ð¼Ñ Ð°ÑÑ
ивиÑÑемого Ñайла WAL, а пÑÑÑ ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ð»Ð½Ñй пÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ WAL (вклÑÑÐ°Ñ Ð¸Ð¼Ñ Ñайла).
ÐÑимеÑание
ÐбÑабоÑÑик archive_file_cb вÑзÑваеÑÑÑ Ð² кÑаÑковÑеменном конÑекÑÑе памÑÑи, коÑоÑÑй бÑÐ´ÐµÑ ÑбÑаÑÑваÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð²Ñзовами. ÐÑли нÑжен долгоживÑÑий конÑекÑÑ, ÑоздайÑе его в обÑабоÑÑике startup_cb.
49.2.4. ÐбÑабоÑÑик вÑклÑÑÐµÐ½Ð¸Ñ #
ÐбÑабоÑÑик shutdown_cb вÑзÑваеÑÑÑ, когда завеÑÑаеÑÑÑ Ð¿ÑоÑеÑÑ Ð°ÑÑ
иваÑоÑа (напÑимеÑ, поÑле оÑибки) или изменÑеÑÑÑ Ð·Ð½Ð°Ñение archive_library. ÐÑли ÑÑнкÑÐ¸Ñ shutdown_cb не опÑеделена, никакие ÑпеÑиалÑнÑе дейÑÑÐ²Ð¸Ñ Ð² ÑÑиÑ
ÑлÑÑаÑÑ
не пÑедпÑинимаÑÑÑÑ. ÐÑли еÑÑÑ Ð´Ð°Ð½Ð½Ñе о ÑоÑÑоÑнии модÑÐ»Ñ Ð°ÑÑ
ивиÑованиÑ, ÑÑÐ¾Ñ Ð¾Ð±ÑабоÑÑик должен ÑдалиÑÑ Ð¸Ñ
во избежание ÑÑеÑек.
typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);