From 790bec21dde4ab1f4442110d5484ec2452096315 Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Tue, 12 Feb 2019 13:24:46 +0900 Subject: [PATCH] node rejoin: handle case where node to rejoin was primary In that case the minRecoveryPoint* fields may be empty. --- repmgr-action-node.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/repmgr-action-node.c b/repmgr-action-node.c index a6347c7f..c7b464d2 100644 --- a/repmgr-action-node.c +++ b/repmgr-action-node.c @@ -2273,9 +2273,21 @@ do_node_rejoin(void) */ { bool can_follow; + TimeLineID tli = get_min_recovery_end_timeline(config_file_options.data_directory); + XLogRecPtr min_recovery_location = get_min_recovery_location(config_file_options.data_directory); - can_follow = check_node_can_attach(get_min_recovery_end_timeline(config_file_options.data_directory), - get_min_recovery_location(config_file_options.data_directory), + /* + * It's possible this was a former primary, so the minRecoveryPoint* + * fields may be empty. + */ + + if (min_recovery_location == InvalidXLogRecPtr) + min_recovery_location = get_latest_checkpoint_location(config_file_options.data_directory); + if (tli == 0) + tli = get_timeline(config_file_options.data_directory); + + can_follow = check_node_can_attach(tli, + min_recovery_location, primary_conn, &primary_node_record, true);