diff --git a/daemons/pacemakerd/pacemakerd.c b/daemons/pacemakerd/pacemakerd.c index ccfae66..e91982a 100644 --- a/daemons/pacemakerd/pacemakerd.c +++ b/daemons/pacemakerd/pacemakerd.c @@ -454,6 +454,7 @@ pcmk_shutdown_worker(gpointer user_data) crm_notice("Shutdown complete"); pacemakerd_state = XML_PING_ATTR_PACEMAKERDSTATE_SHUTDOWNCOMPLETE; if (!fatal_error && running_with_sbd && + pcmk__get_sbd_sync_resource_startup() && !shutdown_complete_state_reported_client_closed) { return TRUE; } @@ -1248,10 +1249,15 @@ main(int argc, char **argv) mainloop_add_signal(SIGTERM, pcmk_shutdown); mainloop_add_signal(SIGINT, pcmk_shutdown); - if (running_with_sbd) { + if ((running_with_sbd) && pcmk__get_sbd_sync_resource_startup()) { pacemakerd_state = XML_PING_ATTR_PACEMAKERDSTATE_WAITPING; startup_trigger = mainloop_add_trigger(G_PRIORITY_HIGH, init_children_processes, NULL); } else { + if (running_with_sbd) { + crm_warn("Enabling SBD_SYNC_RESOURCE_STARTUP would (if supported " + "by your sbd version) improve reliability of " + "interworking between SBD & pacemaker."); + } pacemakerd_state = XML_PING_ATTR_PACEMAKERDSTATE_STARTINGDAEMONS; init_children_processes(NULL); } diff --git a/include/crm/common/options_internal.h b/include/crm/common/options_internal.h index db54da4..d0429c9 100644 --- a/include/crm/common/options_internal.h +++ b/include/crm/common/options_internal.h @@ -111,6 +111,7 @@ bool pcmk__valid_utilization(const char *value); // from watchdog.c long pcmk__get_sbd_timeout(void); +bool pcmk__get_sbd_sync_resource_startup(void); long pcmk__auto_watchdog_timeout(void); bool pcmk__valid_sbd_timeout(const char *value); diff --git a/lib/common/watchdog.c b/lib/common/watchdog.c index 9d8896b..8838be6 100644 --- a/lib/common/watchdog.c +++ b/lib/common/watchdog.c @@ -227,6 +227,21 @@ pcmk__get_sbd_timeout(void) return sbd_timeout; } +bool +pcmk__get_sbd_sync_resource_startup(void) +{ + static bool sync_resource_startup = false; + static bool checked_sync_resource_startup = false; + + if (!checked_sync_resource_startup) { + sync_resource_startup = + crm_is_true(getenv("SBD_SYNC_RESOURCE_STARTUP")); + checked_sync_resource_startup = true; + } + + return sync_resource_startup; +} + long pcmk__auto_watchdog_timeout() {