diff --git a/configdata.c b/configdata.c index 2c07f2f6..d6cde08d 100644 --- a/configdata.c +++ b/configdata.c @@ -895,6 +895,16 @@ struct ConfigFileSetting config_file_settings[] = {}, {} }, + /* failover_delay */ + { + "failover_delay", + CONFIG_INT, + { .intptr = &config_file_options.failover_delay }, + { .intdefault = 0 }, + { .intminval = 1 }, + {}, + {} + }, { "connection_check_query", CONFIG_STRING, diff --git a/configfile.h b/configfile.h index a1aa7395..9cfe83ec 100644 --- a/configfile.h +++ b/configfile.h @@ -240,6 +240,7 @@ typedef struct /* undocumented test settings */ int promote_delay; + int failover_delay; char connection_check_query[MAXLEN]; } t_configuration_options; diff --git a/repmgrd-physical.c b/repmgrd-physical.c index 72dff5db..8e2910c7 100644 --- a/repmgrd-physical.c +++ b/repmgrd-physical.c @@ -4178,6 +4178,13 @@ do_election(NodeInfoList *sibling_nodes, int *new_primary_id) int nodes_with_primary_still_visible = 0; + if (config_file_options.failover_delay > 0) + { + log_debug("sleeping %i seconds (\"failover_delay\") before initiating failover", + config_file_options.failover_delay); + sleep(config_file_options.failover_delay); + } + /* we're visible */ stats.visible_nodes = 1; stats.shared_upstream_nodes = 0;