Compare commits

...

4 Commits

Author SHA1 Message Date
Mario Gonzalez
99bbf207b5 Update HISTORY and appendix for v5.5.0
References: HL-38
2024-11-21 12:23:18 -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
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)
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)
{
struct stat statbuf;
struct stat local_statbuf;
char file_path[MAXPGPATH + sizeof(arcdir_ent->d_name)];
int basenamelen = 0;
@@ -1634,7 +1634,7 @@ get_ready_archive_files(PGconn *conn, const char *data_directory)
arcdir_ent->d_name);
/* 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;
}

View File

@@ -16,9 +16,24 @@
</para>
<!-- 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">
<title id="release-current">Release 5.4.1</title>
<para><emphasis>??? ?? ??????, 202?</emphasis></para>
<para><emphasis>Tue 04 Jul, 2023</emphasis></para>
<para>
&repmgr; 5.4.1 is a minor release providing ...
</para>

View File

@@ -26,7 +26,7 @@
<abstract>
<para>
This is the official documentation of &repmgr; &repmgrversion; for
use with PostgreSQL 9.4 - PostgreSQL 15.
use with PostgreSQL 12 - PostgreSQL 17.
</para>
<para>
&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)
{
KeyValueList inactive_replication_slots = {NULL, NULL};
KeyValueListCell *cell = NULL;
(void) get_inactive_replication_slots(conn, &inactive_replication_slots);
@@ -524,8 +523,6 @@ do_node_status(void)
if (node_info.inactive_replication_slots)
{
KeyValueList inactive_replication_slots = {NULL, NULL};
KeyValueListCell *cell = NULL;
(void) get_inactive_replication_slots(conn, &inactive_replication_slots);
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;
bool hide_standby_signal = false;
KeyValueListCell *cell = NULL;
PQExpBufferData command;
PQExpBufferData command_output;
PQExpBufferData follow_output;
@@ -2965,7 +2963,7 @@ do_node_rejoin(void)
else
{
while ((slotdir_ent = readdir(slotdir)) != NULL) {
struct stat statbuf;
struct stat local_statbuf;
PQExpBufferData slotdir_ent_path;
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_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);
continue;
@@ -3109,7 +3107,6 @@ do_node_rejoin(void)
else
{
KeyValueList inactive_replication_slots = {NULL, NULL};
KeyValueListCell *cell = NULL;
int inactive_count = 0;
PQExpBufferData slotinfo;

View File

@@ -235,6 +235,38 @@ do_primary_register(void)
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()
@@ -436,7 +468,7 @@ do_primary_unregister(void)
}
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;
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)
{
int r;
r = 0;
PQExpBufferData msg;
initPQExpBuffer(&msg);
@@ -762,7 +762,7 @@ do_standby_clone(void)
if (mode == pg_basebackup && runtime_options.verify_backup == true)
{
PQExpBufferData command;
int r;
r = 0;
struct stat st;
initPQExpBuffer(&command);
@@ -3927,7 +3927,6 @@ do_standby_switchover(void)
if (PQserverVersion(local_conn) < 130000 && is_wal_replay_paused(local_conn, false) == true)
{
ReplInfo replication_info;
init_replication_info(&replication_info);
if (get_replication_info(local_conn, STANDBY, &replication_info) == false)
@@ -4784,7 +4783,7 @@ do_standby_switchover(void)
{
NodeInfoListCell *cell = NULL;
ItemList repmgrd_connection_errors = {NULL, NULL};
int i = 0;
i = 0;
int unreachable_node_count = 0;
get_all_node_records(local_conn, &all_nodes);
@@ -5099,8 +5098,6 @@ do_standby_switchover(void)
/* database server could not be contacted */
if (ping_res == PQPING_NO_RESPONSE || ping_res == PQPING_NO_ATTEMPT)
{
bool command_success;
/*
* remote server can't be contacted at protocol level - that
* 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};
NodeInfoListCell *cell = NULL;
int i = 0;
i = 0;
int error_node_count = 0;
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)
{
PGconn **connections;
int i;
int available_wal_senders;
int min_replication_connections = 1;
int possible_replication_connections = 0;
t_conninfo_param_list repl_conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER;
PGconn **connections;
int available_wal_senders;
int min_replication_connections = 1;
int possible_replication_connections = 0;
i = 0;
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)
{
PQExpBufferData nodes;
NodeInfoListCell *cell;
initPQExpBuffer(&nodes);

View File

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

View File

@@ -1359,6 +1359,8 @@ monitor_streaming_standby(void)
MonitoringState local_monitoring_state = MS_NORMAL;
instr_time local_degraded_monitoring_start;
bool upstream_check_result;
int degraded_monitoring_elapsed;
int last_known_upstream_node_id = UNKNOWN_NODE_ID;
log_debug("monitor_streaming_standby()");
@@ -1547,7 +1549,6 @@ monitor_streaming_standby(void)
while (true)
{
bool upstream_check_result;
log_verbose(LOG_DEBUG, "checking %s", upstream_node_info.conninfo);
@@ -1770,8 +1771,7 @@ monitor_streaming_standby(void)
if (monitoring_state == MS_DEGRADED)
{
int degraded_monitoring_elapsed = calculate_elapsed(degraded_monitoring_start);
bool upstream_check_result;
degraded_monitoring_elapsed = calculate_elapsed(degraded_monitoring_start);
if (config_file_options.degraded_monitoring_timeout > 0
&& degraded_monitoring_elapsed > config_file_options.degraded_monitoring_timeout)
@@ -1894,7 +1894,6 @@ monitor_streaming_standby(void)
*/
if (failover_state == FAILOVER_STATE_PROMOTION_FAILED)
{
int degraded_monitoring_elapsed;
int former_upstream_node_id = local_node_info.upstream_node_id;
NodeInfoList sibling_nodes = T_NODE_INFO_LIST_INITIALIZER;
PQExpBufferData event_details;
@@ -1953,7 +1952,7 @@ monitor_streaming_standby(void)
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"),
degraded_monitoring_elapsed);