Compare commits

..

5 Commits

Author SHA1 Message Date
Mario Gonzalez
c0d9dc6dac Update HISTORY and appendix for v5.5.0
References: HL-38
2024-11-22 11:34:48 -03:00
Mario Gonzalez
836894c965 Bump repmgr.control to 5.5
References: HL-38
2024-11-21 14:42:50 +01:00
Mario Gonzalez
7f3a26f0d9 Add primary_node_info inline function
When a t_node_info struct must be re initilised, it was re-declared
only. Moreover, a macro was user for any var creation of this type
impeding use the same to reset the values later if needed.

This new function allows to re initilise again a t_node_info typed
variable without the need to redeclare it to create other varibles for
the same purpose, and also shadowing is now avoided from pg16.

Macros seems to be replaced by `static inline` functions in upstream
postgres, credits to  Alvaro Herrera <alvherre@alvh.no-ip.org> for this
idea.

References: HL-40
2024-11-18 09:46:14 -03:00
Mario Gonzalez
a469221e28 Fix shadowed declaration
Since b5934bfd6071 in postgresql.git the flag
`-Wshadow=compatible-local` is activated. This commit fixes any
duplicated declaration made in the same function.

References: HL-40
2024-11-18 09:46:14 -03:00
Mario Gonzalez
c6d9f38458 Bump repmgr version 5.5.0 2024-11-15 10:51:12 -03:00
9 changed files with 76 additions and 32 deletions

View File

@@ -1,4 +1,9 @@
5.4.1 2023-??-?? 5.5.0 2024-11-20
Support for PostgreSQL 17 added
Fix warnings detected by the -Wshadow=compatible-local
added in PostgreSQL 16
5.4.1 2023-07-04
repmgrd: ensure witness node metadata is updated (Ian) repmgrd: ensure witness node metadata is updated (Ian)
5.4.0 2023-03-16 5.4.0 2023-03-16

View File

@@ -1624,7 +1624,7 @@ get_ready_archive_files(PGconn *conn, const char *data_directory)
while ((arcdir_ent = readdir(arcdir)) != NULL) while ((arcdir_ent = readdir(arcdir)) != NULL)
{ {
struct stat statbuf; struct stat local_statbuf;
char file_path[MAXPGPATH + sizeof(arcdir_ent->d_name)]; char file_path[MAXPGPATH + sizeof(arcdir_ent->d_name)];
int basenamelen = 0; int basenamelen = 0;
@@ -1634,7 +1634,7 @@ get_ready_archive_files(PGconn *conn, const char *data_directory)
arcdir_ent->d_name); arcdir_ent->d_name);
/* skip non-files */ /* skip non-files */
if (stat(file_path, &statbuf) == 0 && !S_ISREG(statbuf.st_mode)) if (stat(file_path, &local_statbuf) == 0 && !S_ISREG(local_statbuf.st_mode))
{ {
continue; continue;
} }

View File

@@ -16,9 +16,24 @@
</para> </para>
<!-- remember to update the release date in ../repmgr_version.h.in --> <!-- remember to update the release date in ../repmgr_version.h.in -->
<sect1 id="release-5.5.0">
<title>Release 5.5.0</title>
<para><emphasis>Wed 20 November, 2024</emphasis></para>
<para>
&repmgr; 5.5.0 is a major release.
</para>
<para>
This release adds support for PostgreSQL 17
</para>
<para>
Fixes warnings detected by the -Wshadow gcc flag added in PostgreSQL 16.
</para>
</sect1>
<sect1 id="release-5.4.1"> <sect1 id="release-5.4.1">
<title id="release-current">Release 5.4.1</title> <title id="release-current">Release 5.4.1</title>
<para><emphasis>??? ?? ??????, 202?</emphasis></para> <para><emphasis>Tue 04 Jul, 2023</emphasis></para>
<para> <para>
&repmgr; 5.4.1 is a minor release providing ... &repmgr; 5.4.1 is a minor release providing ...
</para> </para>

View File

@@ -26,7 +26,7 @@
<abstract> <abstract>
<para> <para>
This is the official documentation of &repmgr; &repmgrversion; for This is the official documentation of &repmgr; &repmgrversion; for
use with PostgreSQL 9.4 - PostgreSQL 15. use with PostgreSQL 12 - PostgreSQL 17.
</para> </para>
<para> <para>
&repmgr; is being continually developed and we strongly recommend using the &repmgr; is being continually developed and we strongly recommend using the

View File

@@ -394,7 +394,6 @@ do_node_status(void)
if (node_info.inactive_replication_slots > 0) if (node_info.inactive_replication_slots > 0)
{ {
KeyValueList inactive_replication_slots = {NULL, NULL}; KeyValueList inactive_replication_slots = {NULL, NULL};
KeyValueListCell *cell = NULL;
(void) get_inactive_replication_slots(conn, &inactive_replication_slots); (void) get_inactive_replication_slots(conn, &inactive_replication_slots);
@@ -524,8 +523,6 @@ do_node_status(void)
if (node_info.inactive_replication_slots) if (node_info.inactive_replication_slots)
{ {
KeyValueList inactive_replication_slots = {NULL, NULL}; KeyValueList inactive_replication_slots = {NULL, NULL};
KeyValueListCell *cell = NULL;
(void) get_inactive_replication_slots(conn, &inactive_replication_slots); (void) get_inactive_replication_slots(conn, &inactive_replication_slots);
for (cell = inactive_replication_slots.head; cell; cell = cell->next) for (cell = inactive_replication_slots.head; cell; cell = cell->next)
{ {
@@ -2546,6 +2543,7 @@ do_node_rejoin(void)
int server_version_num = UNKNOWN_SERVER_VERSION_NUM; int server_version_num = UNKNOWN_SERVER_VERSION_NUM;
bool hide_standby_signal = false; bool hide_standby_signal = false;
KeyValueListCell *cell = NULL;
PQExpBufferData command; PQExpBufferData command;
PQExpBufferData command_output; PQExpBufferData command_output;
PQExpBufferData follow_output; PQExpBufferData follow_output;
@@ -2965,7 +2963,7 @@ do_node_rejoin(void)
else else
{ {
while ((slotdir_ent = readdir(slotdir)) != NULL) { while ((slotdir_ent = readdir(slotdir)) != NULL) {
struct stat statbuf; struct stat local_statbuf;
PQExpBufferData slotdir_ent_path; PQExpBufferData slotdir_ent_path;
if (strcmp(slotdir_ent->d_name, ".") == 0 || strcmp(slotdir_ent->d_name, "..") == 0) if (strcmp(slotdir_ent->d_name, ".") == 0 || strcmp(slotdir_ent->d_name, "..") == 0)
@@ -2978,7 +2976,7 @@ do_node_rejoin(void)
slotdir_path.data, slotdir_path.data,
slotdir_ent->d_name); slotdir_ent->d_name);
if (stat(slotdir_ent_path.data, &statbuf) == 0 && !S_ISDIR(statbuf.st_mode)) if (stat(slotdir_ent_path.data, &local_statbuf) == 0 && !S_ISDIR(local_statbuf.st_mode))
{ {
termPQExpBuffer(&slotdir_ent_path); termPQExpBuffer(&slotdir_ent_path);
continue; continue;
@@ -3109,7 +3107,6 @@ do_node_rejoin(void)
else else
{ {
KeyValueList inactive_replication_slots = {NULL, NULL}; KeyValueList inactive_replication_slots = {NULL, NULL};
KeyValueListCell *cell = NULL;
int inactive_count = 0; int inactive_count = 0;
PQExpBufferData slotinfo; PQExpBufferData slotinfo;

View File

@@ -235,6 +235,38 @@ do_primary_register(void)
return; return;
} }
static inline void reset_node_info(t_node_info *info)
{
info->node_id = NODE_NOT_FOUND;
info->upstream_node_id = NO_UPSTREAM_NODE;
info->type = UNKNOWN;
info->node_name[0] = '\0';
info->upstream_node_name[0] = '\0';
info->conninfo[0] = '\0';
info->repluser[0] = '\0';
info->priority = DEFAULT_PRIORITY;
info->active = true;
info->slot_name[0] = '\0';
info->config_file[0] = '\0';
info->last_wal_receive_lsn = InvalidXLogRecPtr;
info->node_status = NODE_STATUS_UNKNOWN;
info->recovery_type = RECTYPE_UNKNOWN;
info->monitoring_state = MS_NORMAL;
info->conn = NULL;
info->details[0] = '\0';
info->reachable = true;
info->attached = true;
/* various statistics */
info->max_wal_senders = -1;
info->attached_wal_receivers = -1;
info->max_replication_slots = -1;
info->total_replication_slots = -1;
info->active_replication_slots = -1;
info->inactive_replication_slots = -1;
info->replication_info = NULL;
strlcpy(info->location, DEFAULT_LOCATION, sizeof(info->location));
}
/* /*
* do_primary_unregister() * do_primary_unregister()
@@ -436,7 +468,7 @@ do_primary_unregister(void)
} }
else if (recovery_type == RECTYPE_PRIMARY) else if (recovery_type == RECTYPE_PRIMARY)
{ {
t_node_info primary_node_info = T_NODE_INFO_INITIALIZER; reset_node_info(&primary_node_info);
bool primary_record_found = false; bool primary_record_found = false;
primary_record_found = get_primary_node_record(primary_conn, &primary_node_info); primary_record_found = get_primary_node_record(primary_conn, &primary_node_info);

View File

@@ -535,7 +535,7 @@ do_standby_clone(void)
if (external_config_files == true) if (external_config_files == true)
{ {
int r; r = 0;
PQExpBufferData msg; PQExpBufferData msg;
initPQExpBuffer(&msg); initPQExpBuffer(&msg);
@@ -762,7 +762,7 @@ do_standby_clone(void)
if (mode == pg_basebackup && runtime_options.verify_backup == true) if (mode == pg_basebackup && runtime_options.verify_backup == true)
{ {
PQExpBufferData command; PQExpBufferData command;
int r; r = 0;
struct stat st; struct stat st;
initPQExpBuffer(&command); initPQExpBuffer(&command);
@@ -3927,7 +3927,6 @@ do_standby_switchover(void)
if (PQserverVersion(local_conn) < 130000 && is_wal_replay_paused(local_conn, false) == true) if (PQserverVersion(local_conn) < 130000 && is_wal_replay_paused(local_conn, false) == true)
{ {
ReplInfo replication_info;
init_replication_info(&replication_info); init_replication_info(&replication_info);
if (get_replication_info(local_conn, STANDBY, &replication_info) == false) if (get_replication_info(local_conn, STANDBY, &replication_info) == false)
@@ -4784,7 +4783,7 @@ do_standby_switchover(void)
{ {
NodeInfoListCell *cell = NULL; NodeInfoListCell *cell = NULL;
ItemList repmgrd_connection_errors = {NULL, NULL}; ItemList repmgrd_connection_errors = {NULL, NULL};
int i = 0; i = 0;
int unreachable_node_count = 0; int unreachable_node_count = 0;
get_all_node_records(local_conn, &all_nodes); get_all_node_records(local_conn, &all_nodes);
@@ -5099,8 +5098,6 @@ do_standby_switchover(void)
/* database server could not be contacted */ /* database server could not be contacted */
if (ping_res == PQPING_NO_RESPONSE || ping_res == PQPING_NO_ATTEMPT) if (ping_res == PQPING_NO_RESPONSE || ping_res == PQPING_NO_ATTEMPT)
{ {
bool command_success;
/* /*
* remote server can't be contacted at protocol level - that * remote server can't be contacted at protocol level - that
* doesn't necessarily mean it's shut down, so we'll ask its * doesn't necessarily mean it's shut down, so we'll ask its
@@ -5678,7 +5675,7 @@ do_standby_switchover(void)
{ {
ItemList repmgrd_unpause_errors = {NULL, NULL}; ItemList repmgrd_unpause_errors = {NULL, NULL};
NodeInfoListCell *cell = NULL; NodeInfoListCell *cell = NULL;
int i = 0; i = 0;
int error_node_count = 0; int error_node_count = 0;
for (cell = all_nodes.head; cell; cell = cell->next) for (cell = all_nodes.head; cell; cell = cell->next)
@@ -6513,12 +6510,12 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea
if (mode == pg_basebackup) if (mode == pg_basebackup)
{ {
PGconn **connections; PGconn **connections;
int i; int available_wal_senders;
int available_wal_senders; int min_replication_connections = 1;
int min_replication_connections = 1; int possible_replication_connections = 0;
int possible_replication_connections = 0; i = 0;
t_conninfo_param_list repl_conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER; t_conninfo_param_list repl_conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER;
/* /*
@@ -8480,7 +8477,6 @@ check_sibling_nodes(NodeInfoList *sibling_nodes, SiblingNodeStats *sibling_nodes
if (sibling_nodes->node_count > 0) if (sibling_nodes->node_count > 0)
{ {
PQExpBufferData nodes; PQExpBufferData nodes;
NodeInfoListCell *cell;
initPQExpBuffer(&nodes); initPQExpBuffer(&nodes);

View File

@@ -1,6 +1,6 @@
# repmgr extension # repmgr extension
comment = 'Replication manager for PostgreSQL' comment = 'Replication manager for PostgreSQL'
default_version = '5.4' default_version = '5.5'
module_pathname = '$libdir/repmgr' module_pathname = '$libdir/repmgr'
relocatable = false relocatable = false
schema = repmgr schema = repmgr

View File

@@ -1359,6 +1359,8 @@ monitor_streaming_standby(void)
MonitoringState local_monitoring_state = MS_NORMAL; MonitoringState local_monitoring_state = MS_NORMAL;
instr_time local_degraded_monitoring_start; instr_time local_degraded_monitoring_start;
bool upstream_check_result;
int degraded_monitoring_elapsed;
int last_known_upstream_node_id = UNKNOWN_NODE_ID; int last_known_upstream_node_id = UNKNOWN_NODE_ID;
log_debug("monitor_streaming_standby()"); log_debug("monitor_streaming_standby()");
@@ -1547,7 +1549,6 @@ monitor_streaming_standby(void)
while (true) while (true)
{ {
bool upstream_check_result;
log_verbose(LOG_DEBUG, "checking %s", upstream_node_info.conninfo); log_verbose(LOG_DEBUG, "checking %s", upstream_node_info.conninfo);
@@ -1770,8 +1771,7 @@ monitor_streaming_standby(void)
if (monitoring_state == MS_DEGRADED) if (monitoring_state == MS_DEGRADED)
{ {
int degraded_monitoring_elapsed = calculate_elapsed(degraded_monitoring_start); degraded_monitoring_elapsed = calculate_elapsed(degraded_monitoring_start);
bool upstream_check_result;
if (config_file_options.degraded_monitoring_timeout > 0 if (config_file_options.degraded_monitoring_timeout > 0
&& degraded_monitoring_elapsed > config_file_options.degraded_monitoring_timeout) && degraded_monitoring_elapsed > config_file_options.degraded_monitoring_timeout)
@@ -1894,7 +1894,6 @@ monitor_streaming_standby(void)
*/ */
if (failover_state == FAILOVER_STATE_PROMOTION_FAILED) if (failover_state == FAILOVER_STATE_PROMOTION_FAILED)
{ {
int degraded_monitoring_elapsed;
int former_upstream_node_id = local_node_info.upstream_node_id; int former_upstream_node_id = local_node_info.upstream_node_id;
NodeInfoList sibling_nodes = T_NODE_INFO_LIST_INITIALIZER; NodeInfoList sibling_nodes = T_NODE_INFO_LIST_INITIALIZER;
PQExpBufferData event_details; PQExpBufferData event_details;
@@ -1953,7 +1952,7 @@ monitor_streaming_standby(void)
if (local_node_info.type == PRIMARY) if (local_node_info.type == PRIMARY)
{ {
int degraded_monitoring_elapsed = calculate_elapsed(degraded_monitoring_start); degraded_monitoring_elapsed = calculate_elapsed(degraded_monitoring_start);
log_notice(_("resuming monitoring as primary node after %i seconds"), log_notice(_("resuming monitoring as primary node after %i seconds"),
degraded_monitoring_elapsed); degraded_monitoring_elapsed);