From 55441f272916700e8f65e53614fd600499a70e4a Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Wed, 28 Feb 2018 18:56:33 +0900 Subject: [PATCH] repmgrd: add configuration file parameter "standby_reconnect_timeout" This is used for determining a timeout when reconnecting to the standby after executing the "follow_command". This will normally not need to be set explicitly, but maybe useful in cases where the standby's startup phase can last longer than usual. --- configfile.c | 3 +++ configfile.h | 2 ++ repmgr.conf.sample | 2 ++ repmgr.h | 3 +++ repmgrd-physical.c | 11 ++++++----- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/configfile.c b/configfile.c index b35d744d..d26e915a 100644 --- a/configfile.c +++ b/configfile.c @@ -337,6 +337,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 @@ -556,6 +557,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 fd977769..ca2e982c 100644 --- a/configfile.h +++ b/configfile.h @@ -115,6 +115,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; @@ -172,6 +173,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 575e17a0..bac15306 100644 --- a/repmgr.conf.sample +++ b/repmgr.conf.sample @@ -235,6 +235,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 442a3d8f..a9f4043b 100644 --- a/repmgr.h +++ b/repmgr.h @@ -77,6 +77,9 @@ #define DEFAULT_REPLICATION_LAG_CRITICAL 600 /* seconds */ #define DEFAULT_WITNESS_SYNC_INTERVAL 15 /* seconds */ #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 7634fbdf..debc35f7 100644 --- a/repmgrd-physical.c +++ b/repmgrd-physical.c @@ -2201,17 +2201,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); }