diff --git a/configfile.c b/configfile.c index 7247ed67..498742f8 100644 --- a/configfile.c +++ b/configfile.c @@ -344,6 +344,7 @@ _parse_config(t_configuration_options *options, ItemList *error_list, ItemList * options->async_query_timeout = DEFAULT_ASYNC_QUERY_TIMEOUT; options->primary_notification_timeout = DEFAULT_PRIMARY_NOTIFICATION_TIMEOUT; options->primary_follow_timeout = DEFAULT_PRIMARY_FOLLOW_TIMEOUT; + options->standby_reconnect_timeout = DEFAULT_STANDBY_RECONNECT_TIMEOUT; /*------------- * witness settings @@ -570,6 +571,8 @@ _parse_config(t_configuration_options *options, ItemList *error_list, ItemList * options->primary_notification_timeout = repmgr_atoi(value, name, error_list, 0); else if (strcmp(name, "primary_follow_timeout") == 0) options->primary_follow_timeout = repmgr_atoi(value, name, error_list, 0); + else if (strcmp(name, "standby_reconnect_timeout") == 0) + options->standby_reconnect_timeout = repmgr_atoi(value, name, error_list, 0); /* witness settings */ else if (strcmp(name, "witness_sync_interval") == 0) diff --git a/configfile.h b/configfile.h index 64c7dfea..873caa40 100644 --- a/configfile.h +++ b/configfile.h @@ -119,6 +119,7 @@ typedef struct int async_query_timeout; int primary_notification_timeout; int primary_follow_timeout; + int standby_reconnect_timeout; /* BDR settings */ bool bdr_local_monitoring_only; @@ -178,6 +179,7 @@ typedef struct DEFAULT_ASYNC_QUERY_TIMEOUT, \ DEFAULT_PRIMARY_NOTIFICATION_TIMEOUT, \ DEFAULT_PRIMARY_FOLLOW_TIMEOUT, \ + DEFAULT_STANDBY_RECONNECT_TIMEOUT, \ /* BDR settings */ \ false, DEFAULT_BDR_RECOVERY_TIMEOUT, \ /* service settings */ \ diff --git a/repmgr.conf.sample b/repmgr.conf.sample index 2c83fe40..84274c59 100644 --- a/repmgr.conf.sample +++ b/repmgr.conf.sample @@ -249,6 +249,8 @@ ssh_options='-q -o ConnectTimeout=10' # Options to append to "ssh" #primary_notification_timeout=60 # Interval (in seconds) which repmgrd on a standby # will wait for a notification from the new primary, # before falling back to degraded monitoring +#standby_reconnect_timeout=60 # Interval (in seconds) which repmgrd on a standby will wait + # to reconnect to the local node after executing "follow_command" #monitoring_history=no # Whether to write monitoring data to the "montoring_history" table #monitor_interval_secs=2 # Interval (in seconds) at which to write monitoring data diff --git a/repmgr.h b/repmgr.h index 6645ba85..a9f4043b 100644 --- a/repmgr.h +++ b/repmgr.h @@ -79,6 +79,7 @@ #define DEFAULT_WAIT_START 30 /* seconds */ #define DEFAULT_PROMOTE_CHECK_TIMEOUT 60 /* seconds */ #define DEFAULT_PROMOTE_CHECK_INTERVAL 1 /* seconds */ +#define DEFAULT_STANDBY_RECONNECT_TIMEOUT 60 /* seconds */ #ifndef RECOVERY_COMMAND_FILE #define RECOVERY_COMMAND_FILE "recovery.conf" diff --git a/repmgrd-physical.c b/repmgrd-physical.c index 828c55a9..7f1593a7 100644 --- a/repmgrd-physical.c +++ b/repmgrd-physical.c @@ -2208,17 +2208,18 @@ follow_new_primary(int new_primary_id) * * TODO: * - implement for cascading standby follow too - * - make timeout configurable ("standby_reconnect_timeout") - */ - int i, max = 60; - for (i = 0; i < max; i++) + */ + int i; + for (i = 0; i < config_file_options.standby_reconnect_timeout; i++) { local_conn = establish_db_connection(local_node_info.conninfo, false); if (PQstatus(local_conn) == CONNECTION_OK) break; - log_debug("sleeping 1 second; %i of %i attempts to reconnect to local node", i + 1, max); + log_debug("sleeping 1 second; %i of %i attempts to reconnect to local node", + i + 1, + config_file_options.standby_reconnect_timeout); sleep(1); }