Compare commits

...

7 Commits

Author SHA1 Message Date
Arthur Nascimento
e696e28f43 install-requirements.xml: fix compatibility matrix
The same document states that "repmgr 5.5.0 is compatible with all
supported PostgreSQL versions from 13.x", so 12 shouldn't be listed in
the matrix.

Moreover, 14 is missing in 5.5 and 5.4.1, which looks like an accidental
omission that might have happened when support for 15 was added on a
version that only advertized 13 up to that point. 14 should have been
added along with 15 then.
2025-04-17 11:27:45 -04:00
Ian Barwick
8a3cdcd1b9 doc: update README
Update contributors list to reflect current status.
2025-01-21 10:47:05 +09:00
Mario Gonzalez
682bd7306d Update product matrix and copyright date
References: https://github.com/EnterpriseDB/repmgr/issues/879
2025-01-15 15:42:38 -03:00
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
12 changed files with 115 additions and 54 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

@@ -68,7 +68,6 @@ news are always welcome.
Thanks from the repmgr core team. Thanks from the repmgr core team.
* Ian Barwick
* Israel Barth * Israel Barth
* Mario González * Mario González
* Martín Marqués * Martín Marqués
@@ -76,6 +75,7 @@ Thanks from the repmgr core team.
Past contributors: Past contributors:
* Ian Barwick
* Jaime Casanova * Jaime Casanova
* Abhijit Menon-Sen * Abhijit Menon-Sen
* Simon Riggs * Simon Riggs

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

@@ -14,7 +14,7 @@
</para> </para>
<para> <para>
&repmgr; &repmgrversion; is compatible with all PostgreSQL versions from 9.4. See &repmgr; &repmgrversion; is compatible with all supported PostgreSQL versions from 13.x. See
section <link linkend="install-compatibility-matrix">&repmgr; compatibility matrix</link> section <link linkend="install-compatibility-matrix">&repmgr; compatibility matrix</link>
for an overview of version compatibility. for an overview of version compatibility.
</para> </para>
@@ -45,7 +45,7 @@
of incompatibilities. of incompatibilities.
</simpara> </simpara>
<simpara> <simpara>
If different &quot;major&quot; &repmgr; versions (e.g. 4.1.x and &repmgrversion;.x) If different &quot;major&quot; &repmgr; versions (e.g. 5.2.x and &repmgrversion;)
are installed on different nodes, in the best case &repmgr; (in particular &repmgrd;) are installed on different nodes, in the best case &repmgr; (in particular &repmgrd;)
will not run. In the worst case, you will end up with a broken cluster. will not run. In the worst case, you will end up with a broken cluster.
</simpara> </simpara>
@@ -89,7 +89,6 @@
which PostgreSQL version. which PostgreSQL version.
</para> </para>
<table id="repmgr-compatibility-matrix"> <table id="repmgr-compatibility-matrix">
<title>&repmgr; compatibility matrix</title> <title>&repmgr; compatibility matrix</title>
@@ -117,16 +116,16 @@
<tbody> <tbody>
<row> <row>
<entry> <entry>
&repmgr; 5.4 &repmgr; 5.5
</entry> </entry>
<entry> <entry>
(dev) Yes
</entry> </entry>
<entry> <entry>
<link linkend="release-current">&repmgrversion;</link> (&releasedate;) <link linkend="release-5.5.0">&repmgrversion;</link> (&releasedate;)
</entry> </entry>
<entry> <entry>
9.4, 9.5, 9.6, 10, 11, 12, 13, 15 13, 14, 15, 16, 17
</entry> </entry>
<entry> <entry>
&nbsp; &nbsp;
@@ -135,13 +134,31 @@
<row> <row>
<entry> <entry>
&repmgr; 5.3 &repmgr; 5.4.1
</entry> </entry>
<entry> <entry>
YES Yes
</entry> </entry>
<entry> <entry>
<link linkend="release-current">&repmgrversion;</link> (&releasedate;) <link linkend="release-5.4.1">5.4.1</link> (2023-04-04)
</entry>
<entry>
10, 11, 12, 13, 14, 15
</entry>
<entry>
&nbsp;
</entry>
</row>
<row>
<entry>
&repmgr; 5.3.1
</entry>
<entry>
Yes
</entry>
<entry>
<link linkend="release-5.3.1">5.3.1</link> (2022-02-15)
</entry> </entry>
<entry> <entry>
9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15
@@ -156,7 +173,7 @@
&repmgr; 5.2 &repmgr; 5.2
</entry> </entry>
<entry> <entry>
NO No
</entry> </entry>
<entry> <entry>
<link linkend="release-5.2.1">5.2.1</link> (2020-12-07) <link linkend="release-5.2.1">5.2.1</link> (2020-12-07)
@@ -174,7 +191,7 @@
&repmgr; 5.1 &repmgr; 5.1
</entry> </entry>
<entry> <entry>
NO No
</entry> </entry>
<entry> <entry>
<link linkend="release-5.1.0">5.1.0</link> (2020-04-13) <link linkend="release-5.1.0">5.1.0</link> (2020-04-13)
@@ -192,7 +209,7 @@
&repmgr; 5.0 &repmgr; 5.0
</entry> </entry>
<entry> <entry>
NO No
</entry> </entry>
<entry> <entry>
<link linkend="release-5.0">5.0</link> (2019-10-15) <link linkend="release-5.0">5.0</link> (2019-10-15)
@@ -211,7 +228,7 @@
&repmgr; 4.x &repmgr; 4.x
</entry> </entry>
<entry> <entry>
NO No
</entry> </entry>
<entry> <entry>
<link linkend="release-4.4">4.4</link> (2019-06-27) <link linkend="release-4.4">4.4</link> (2019-06-27)
@@ -229,7 +246,7 @@
&repmgr; 3.x &repmgr; 3.x
</entry> </entry>
<entry> <entry>
NO No
</entry> </entry>
<entry> <entry>
<ulink url="https://repmgr.org/release-notes-3.3.2.html">3.3.2</ulink> (2017-05-30) <ulink url="https://repmgr.org/release-notes-3.3.2.html">3.3.2</ulink> (2017-05-30)
@@ -247,7 +264,7 @@
&repmgr; 2.x &repmgr; 2.x
</entry> </entry>
<entry> <entry>
NO No
</entry> </entry>
<entry> <entry>
<ulink url="https://repmgr.org/release-notes-2.0.3.html">2.0.3</ulink> (2015-04-16) <ulink url="https://repmgr.org/release-notes-2.0.3.html">2.0.3</ulink> (2015-04-16)
@@ -266,12 +283,12 @@
<important> <important>
<para> <para>
The &repmgr; 2.x and 3.x series are no longer maintained or supported. The &repmgr; series older than 5.x are no longer maintained or supported.
We strongly recommend upgrading to the latest &repmgr; version. We strongly recommend upgrading to the latest &repmgr; version.
</para> </para>
<para> <para>
Following the release of &repmgr; 5.0, there will be no further releases of Following the release of &repmgr; 5.0, there will be no further releases of
the &repmgr; 4.x series. Note that &repmgr; 5.x is an incremental development the &repmgr; 4.x series or older. Note that &repmgr; 5.x is an incremental development
of the 4.x series and &repmgr; 4.x users should upgrade to this as soon as possible. of the 4.x series and &repmgr; 4.x users should upgrade to this as soon as possible.
</para> </para>
</important> </important>

View File

@@ -1,9 +1,9 @@
<!-- doc/legal.xml --> <!-- doc/legal.xml -->
<date>2022</date> <date>2025</date>
<copyright> <copyright>
<year>2010-2022</year> <year>2010-2025</year>
<holder>EDB</holder> <holder>EDB</holder>
</copyright> </copyright>
@@ -11,7 +11,7 @@
<title>Legal Notice</title> <title>Legal Notice</title>
<para> <para>
<productname>repmgr</productname> is Copyright &copy; 2010-2022 <productname>repmgr</productname> is Copyright &copy; 2010-2025
by EDB All rights reserved. by EDB All rights reserved.
</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)
@@ -6514,10 +6511,10 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea
{ {
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);