mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-27 17:06:29 +00:00
"node rejoin": use minRecoveryPointTLI for comparing timelines
This commit is contained in:
@@ -187,6 +187,22 @@ get_timeline(const char *data_directory)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TimeLineID
|
||||||
|
get_min_recovery_end_timeline(const char *data_directory)
|
||||||
|
{
|
||||||
|
ControlFileInfo *control_file_info = NULL;
|
||||||
|
TimeLineID timeline = -1;
|
||||||
|
|
||||||
|
control_file_info = get_controlfile(data_directory);
|
||||||
|
|
||||||
|
timeline = (int) control_file_info->minRecoveryPointTLI;
|
||||||
|
|
||||||
|
pfree(control_file_info);
|
||||||
|
|
||||||
|
return timeline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
XLogRecPtr
|
XLogRecPtr
|
||||||
get_min_recovery_location(const char *data_directory)
|
get_min_recovery_location(const char *data_directory)
|
||||||
{
|
{
|
||||||
@@ -226,6 +242,8 @@ get_controlfile(const char *DataDir)
|
|||||||
control_file_info->checkPoint = InvalidXLogRecPtr;
|
control_file_info->checkPoint = InvalidXLogRecPtr;
|
||||||
control_file_info->data_checksum_version = -1;
|
control_file_info->data_checksum_version = -1;
|
||||||
control_file_info->timeline = -1;
|
control_file_info->timeline = -1;
|
||||||
|
control_file_info->minRecoveryPointTLI = -1;
|
||||||
|
control_file_info->minRecoveryPoint = InvalidXLogRecPtr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read PG_VERSION, as we'll need to determine which struct to read
|
* Read PG_VERSION, as we'll need to determine which struct to read
|
||||||
@@ -298,6 +316,7 @@ get_controlfile(const char *DataDir)
|
|||||||
control_file_info->checkPoint = ptr->checkPoint;
|
control_file_info->checkPoint = ptr->checkPoint;
|
||||||
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
||||||
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
||||||
|
control_file_info->minRecoveryPointTLI = ptr->minRecoveryPointTLI;
|
||||||
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
||||||
}
|
}
|
||||||
else if (version_num >= 90500)
|
else if (version_num >= 90500)
|
||||||
@@ -308,6 +327,7 @@ get_controlfile(const char *DataDir)
|
|||||||
control_file_info->checkPoint = ptr->checkPoint;
|
control_file_info->checkPoint = ptr->checkPoint;
|
||||||
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
||||||
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
||||||
|
control_file_info->minRecoveryPointTLI = ptr->minRecoveryPointTLI;
|
||||||
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
||||||
}
|
}
|
||||||
else if (version_num >= 90400)
|
else if (version_num >= 90400)
|
||||||
@@ -318,6 +338,7 @@ get_controlfile(const char *DataDir)
|
|||||||
control_file_info->checkPoint = ptr->checkPoint;
|
control_file_info->checkPoint = ptr->checkPoint;
|
||||||
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
||||||
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
||||||
|
control_file_info->minRecoveryPointTLI = ptr->minRecoveryPointTLI;
|
||||||
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
||||||
}
|
}
|
||||||
else if (version_num >= 90300)
|
else if (version_num >= 90300)
|
||||||
@@ -328,6 +349,7 @@ get_controlfile(const char *DataDir)
|
|||||||
control_file_info->checkPoint = ptr->checkPoint;
|
control_file_info->checkPoint = ptr->checkPoint;
|
||||||
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
control_file_info->data_checksum_version = ptr->data_checksum_version;
|
||||||
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID;
|
||||||
|
control_file_info->minRecoveryPointTLI = ptr->minRecoveryPointTLI;
|
||||||
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
control_file_info->minRecoveryPoint = ptr->minRecoveryPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ typedef struct
|
|||||||
XLogRecPtr checkPoint;
|
XLogRecPtr checkPoint;
|
||||||
uint32 data_checksum_version;
|
uint32 data_checksum_version;
|
||||||
TimeLineID timeline;
|
TimeLineID timeline;
|
||||||
|
TimeLineID minRecoveryPointTLI;
|
||||||
XLogRecPtr minRecoveryPoint;
|
XLogRecPtr minRecoveryPoint;
|
||||||
} ControlFileInfo;
|
} ControlFileInfo;
|
||||||
|
|
||||||
@@ -339,6 +340,7 @@ extern int get_data_checksum_version(const char *data_directory);
|
|||||||
extern uint64 get_system_identifier(const char *data_directory);
|
extern uint64 get_system_identifier(const char *data_directory);
|
||||||
extern XLogRecPtr get_latest_checkpoint_location(const char *data_directory);
|
extern XLogRecPtr get_latest_checkpoint_location(const char *data_directory);
|
||||||
extern TimeLineID get_timeline(const char *data_directory);
|
extern TimeLineID get_timeline(const char *data_directory);
|
||||||
|
extern TimeLineID get_min_recovery_end_timeline(const char *data_directory);
|
||||||
extern XLogRecPtr get_min_recovery_location(const char *data_directory);
|
extern XLogRecPtr get_min_recovery_location(const char *data_directory);
|
||||||
|
|
||||||
#endif /* _CONTROLDATA_H_ */
|
#endif /* _CONTROLDATA_H_ */
|
||||||
|
|||||||
@@ -2274,7 +2274,7 @@ do_node_rejoin(void)
|
|||||||
{
|
{
|
||||||
bool can_follow;
|
bool can_follow;
|
||||||
|
|
||||||
can_follow = check_node_can_attach(get_timeline(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),
|
get_min_recovery_location(config_file_options.data_directory),
|
||||||
primary_conn,
|
primary_conn,
|
||||||
&primary_node_record,
|
&primary_node_record,
|
||||||
|
|||||||
Reference in New Issue
Block a user