mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-23 15:16:29 +00:00
Compare commits
5 Commits
dev/HL-40-
...
update-pro
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c631642409 | ||
|
|
c0d9dc6dac | ||
|
|
836894c965 | ||
|
|
7f3a26f0d9 | ||
|
|
a469221e28 |
7
HISTORY
7
HISTORY
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</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>
|
||||
for an overview of version compatibility.
|
||||
</para>
|
||||
@@ -45,7 +45,7 @@
|
||||
of incompatibilities.
|
||||
</simpara>
|
||||
<simpara>
|
||||
If different "major" &repmgr; versions (e.g. 4.1.x and &repmgrversion;.x)
|
||||
If different "major" &repmgr; versions (e.g. 5.2.x and &repmgrversion;)
|
||||
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.
|
||||
</simpara>
|
||||
@@ -89,7 +89,6 @@
|
||||
which PostgreSQL version.
|
||||
</para>
|
||||
|
||||
|
||||
<table id="repmgr-compatibility-matrix">
|
||||
<title>&repmgr; compatibility matrix</title>
|
||||
|
||||
@@ -117,16 +116,16 @@
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>
|
||||
&repmgr; 5.4
|
||||
&repmgr; 5.5
|
||||
</entry>
|
||||
<entry>
|
||||
(dev)
|
||||
Yes
|
||||
</entry>
|
||||
<entry>
|
||||
<link linkend="release-current">&repmgrversion;</link> (&releasedate;)
|
||||
<link linkend="release-5.5.0">&repmgrversion;</link> (&releasedate;)
|
||||
</entry>
|
||||
<entry>
|
||||
9.4, 9.5, 9.6, 10, 11, 12, 13, 15
|
||||
12, 13, 15, 16, 17
|
||||
</entry>
|
||||
<entry>
|
||||
|
||||
@@ -135,13 +134,31 @@
|
||||
|
||||
<row>
|
||||
<entry>
|
||||
&repmgr; 5.3
|
||||
&repmgr; 5.4.1
|
||||
</entry>
|
||||
<entry>
|
||||
YES
|
||||
Yes
|
||||
</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, 15
|
||||
</entry>
|
||||
<entry>
|
||||
|
||||
</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>
|
||||
9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15
|
||||
@@ -156,7 +173,7 @@
|
||||
&repmgr; 5.2
|
||||
</entry>
|
||||
<entry>
|
||||
NO
|
||||
No
|
||||
</entry>
|
||||
<entry>
|
||||
<link linkend="release-5.2.1">5.2.1</link> (2020-12-07)
|
||||
@@ -174,7 +191,7 @@
|
||||
&repmgr; 5.1
|
||||
</entry>
|
||||
<entry>
|
||||
NO
|
||||
No
|
||||
</entry>
|
||||
<entry>
|
||||
<link linkend="release-5.1.0">5.1.0</link> (2020-04-13)
|
||||
@@ -192,7 +209,7 @@
|
||||
&repmgr; 5.0
|
||||
</entry>
|
||||
<entry>
|
||||
NO
|
||||
No
|
||||
</entry>
|
||||
<entry>
|
||||
<link linkend="release-5.0">5.0</link> (2019-10-15)
|
||||
@@ -211,7 +228,7 @@
|
||||
&repmgr; 4.x
|
||||
</entry>
|
||||
<entry>
|
||||
NO
|
||||
No
|
||||
</entry>
|
||||
<entry>
|
||||
<link linkend="release-4.4">4.4</link> (2019-06-27)
|
||||
@@ -229,7 +246,7 @@
|
||||
&repmgr; 3.x
|
||||
</entry>
|
||||
<entry>
|
||||
NO
|
||||
No
|
||||
</entry>
|
||||
<entry>
|
||||
<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
|
||||
</entry>
|
||||
<entry>
|
||||
NO
|
||||
No
|
||||
</entry>
|
||||
<entry>
|
||||
<ulink url="https://repmgr.org/release-notes-2.0.3.html">2.0.3</ulink> (2015-04-16)
|
||||
@@ -266,12 +283,12 @@
|
||||
|
||||
<important>
|
||||
<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.
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
</important>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- doc/legal.xml -->
|
||||
|
||||
<date>2022</date>
|
||||
<date>2025</date>
|
||||
|
||||
<copyright>
|
||||
<year>2010-2022</year>
|
||||
<year>2010-2025</year>
|
||||
<holder>EDB</holder>
|
||||
</copyright>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<title>Legal Notice</title>
|
||||
|
||||
<para>
|
||||
<productname>repmgr</productname> is Copyright © 2010-2022
|
||||
<productname>repmgr</productname> is Copyright © 2010-2025
|
||||
by EDB All rights reserved.
|
||||
</para>
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user