Compare commits

...

15 Commits

Author SHA1 Message Date
Ian Barwick
65965b3ba4 4.4rc1 2019-06-20 16:21:54 +09:00
Ian Barwick
629d2b8f85 doc: clean up release notes
Remove tabs.
2019-06-20 16:18:41 +09:00
Ian Barwick
23c285b73b doc: fix typo 2019-06-12 16:29:17 +09:00
Ian Barwick
915fb7d617 note that "standby follow" requires a primary to be available
While it's technically possible to have a standby follow another
standby while the primary is not available, repmgr will not be able
to update its metadata, which will cause Confusion and Chaos.

Update the documentation to make this clear, and provide a more helpful
error message if this situation occurs. The operation previously
failed anyway, but with an unhelpful message about not being able to
find a node record.
2019-06-11 15:18:41 +09:00
Ian Barwick
ae141b9d32 4.4beta2 2019-06-10 15:18:41 +09:00
Ian Barwick
d035550723 doc: add missing space 2019-06-10 09:02:51 +09:00
Ian Barwick
c7692b5d84 doc: improve repmgr.conf settings documentation 2019-06-07 12:50:05 +09:00
Ian Barwick
08b7f1294b doc: improve configuration documentation 2019-06-07 12:17:49 +09:00
Ian Barwick
81d01bf0e8 Canonicalize the data directory path when parsing the configuration file
This ensures the provided path matches the path PostgreSQL reports as its
data directory.
2019-06-07 09:53:44 +09:00
Ian Barwick
089c778e49 Fix extension version number query 2019-06-06 12:46:30 +09:00
Ian Barwick
b4b5681762 standby follow: remove some ineffective code
For some reason we were taking the trouble to extract an appliction_name
from the local node's conninfo, but this was being subsequently overwritten
with the node name (which is what we want anyway).
2019-06-06 12:15:23 +09:00
Ian Barwick
e5ef549aa7 doc: update release notes 2019-06-06 11:30:43 +09:00
Ian Barwick
cfc41392c3 Ensure parsed value of --upstream-conninfo is written to recovery.conf
Previously it was being parsed (a step which ensures any "application_name"
set by the caller is changed to the node name), but the original string
was being copied to "primary_conninfo" anyway.
2019-06-06 11:30:40 +09:00
Ian Barwick
55dc4f7a5f Remove redundant comment in .sql files 2019-06-04 13:46:30 +09:00
Ian Barwick
6616712346 4.4beta1 2019-06-04 13:22:56 +09:00
20 changed files with 348 additions and 316 deletions

View File

@@ -6,6 +6,8 @@
an existing directory is being overwritten (Ian) an existing directory is being overwritten (Ian)
repmgr: improve "--dry-run" behaviour for "standby promote" and repmgr: improve "--dry-run" behaviour for "standby promote" and
"standby switchover" (Ian) "standby switchover" (Ian)
repmgr: when running "standby clone" with the "--upstream-conninfo" option
ensure that "application_name" is set correctly in "primary_conninfo" (Ian)
repmgr: ensure "--dry-run" together with --force when running "standby clone" repmgr: ensure "--dry-run" together with --force when running "standby clone"
in barman mode does not modify an existing data directory (Ian) in barman mode does not modify an existing data directory (Ian)
repmgr: improve "--dry-run" output when running "standby clone" in repmgr: improve "--dry-run" output when running "standby clone" in
@@ -21,6 +23,8 @@
repmgr: prevent a witness server being registered on the cluster primary (John) repmgr: prevent a witness server being registered on the cluster primary (John)
repmgr: ensure BDR2-specific functionality cannot be used on repmgr: ensure BDR2-specific functionality cannot be used on
BDR3 and later (Ian) BDR3 and later (Ian)
repmgr: canonicalize the data directory path (Ian)
repmgr: note that "standby follow" requires a primary to be available (Ian)
repmgrd: monitor standbys attached to primary (Ian) repmgrd: monitor standbys attached to primary (Ian)
repmgrd: add "primary visibility consensus" functionality (Ian) repmgrd: add "primary visibility consensus" functionality (Ian)
repmgrd: fix memory leak which occurs while the monitored PostgreSQL repmgrd: fix memory leak which occurs while the monitored PostgreSQL

View File

@@ -502,10 +502,15 @@ _parse_config(t_configuration_options *options, ItemList *error_list, ItemList *
else if (strcmp(name, "conninfo") == 0) else if (strcmp(name, "conninfo") == 0)
strncpy(options->conninfo, value, MAXLEN); strncpy(options->conninfo, value, MAXLEN);
else if (strcmp(name, "data_directory") == 0) else if (strcmp(name, "data_directory") == 0)
{
strncpy(options->data_directory, value, MAXPGPATH); strncpy(options->data_directory, value, MAXPGPATH);
canonicalize_path(options->data_directory);
}
else if (strcmp(name, "config_directory") == 0) else if (strcmp(name, "config_directory") == 0)
{
strncpy(options->config_directory, value, MAXPGPATH); strncpy(options->config_directory, value, MAXPGPATH);
canonicalize_path(options->config_directory);
}
else if (strcmp(name, "replication_user") == 0) else if (strcmp(name, "replication_user") == 0)
{ {
if (strlen(value) < sizeof(options->replication_user)) if (strlen(value) < sizeof(options->replication_user))

View File

@@ -2092,9 +2092,9 @@ get_repmgr_extension_status(PGconn *conn, t_extension_versions *extversions)
appendPQExpBufferStr(&query, appendPQExpBufferStr(&query,
" SELECT ae.name, e.extname, " " SELECT ae.name, e.extname, "
" ae.default_version, " " ae.default_version, "
" (((ae.default_version::NUMERIC::INT) * 10000) + (ae.default_version::NUMERIC - ae.default_version::NUMERIC::INT) * 1000)::INT AS available, " " (((FLOOR(ae.default_version::NUMERIC)::INT) * 10000) + (ae.default_version::NUMERIC - FLOOR(ae.default_version::NUMERIC)::INT) * 1000)::INT AS available, "
" ae.installed_version, " " ae.installed_version, "
" (((ae.installed_version::NUMERIC::INT) * 10000) + (ae.installed_version::NUMERIC - ae.installed_version::NUMERIC::INT) * 1000)::INT AS installed " " (((FLOOR(ae.installed_version::NUMERIC)::INT) * 10000) + (ae.installed_version::NUMERIC - FLOOR(ae.installed_version::NUMERIC)::INT) * 1000)::INT AS installed "
" FROM pg_catalog.pg_available_extensions ae " " FROM pg_catalog.pg_available_extensions ae "
"LEFT JOIN pg_catalog.pg_extension e " "LEFT JOIN pg_catalog.pg_extension e "
" ON e.extname=ae.name " " ON e.extname=ae.name "

View File

@@ -43,6 +43,14 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<link linkend="repmgr-standby-follow"><command>repmgr standby follow</command></link>:
note that an active, reachable cluster primary is required for this command;
and provide a more helpful error message if no reachable primary could be found.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
&repmgr;: when executing <link linkend="repmgr-standby-switchover"><command>repmgr standby switchover</command></link>, &repmgr;: when executing <link linkend="repmgr-standby-switchover"><command>repmgr standby switchover</command></link>,
@@ -75,7 +83,6 @@
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<link linkend="repmgr-standby-promote"><command>repmgr standby promote</command></link>: <link linkend="repmgr-standby-promote"><command>repmgr standby promote</command></link>:
@@ -221,6 +228,14 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
&repmgr;: when executing <link linkend="repmgr-standby-clone"><command>repmgr standby clone</command></link>
with the <option>--upstream-conninfo</option>, ensure that <varname>application_name</varname>
is set correctly in <varname>primary_conninfo</varname>.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
&repmgr;: when executing <link linkend="repmgr-standby-switchover"><command>repmgr standby switchover</command></link>, &repmgr;: when executing <link linkend="repmgr-standby-switchover"><command>repmgr standby switchover</command></link>,
@@ -229,6 +244,16 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
&repmgr;: canonicalize the data directory path when parsing the configuration file, so
the provided path matches the path PostgreSQL reports as its data directory.
Otherwise, if e.g. the data directory is configured with a trailing slash,
<link linkend="repmgr-node-check"><command>repmgr node check --data-directory-config</command></link>
will return a spurious error.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
&repmgrd;: fix memory leak which occurs while the monitored PostgreSQL node is <emphasis>not</emphasis> &repmgrd;: fix memory leak which occurs while the monitored PostgreSQL node is <emphasis>not</emphasis>

View File

@@ -96,33 +96,6 @@
</variablelist> </variablelist>
</para> </para>
<para>
For a full list of annotated configuration items, see the file
<ulink url="https://raw.githubusercontent.com/2ndQuadrant/repmgr/master/repmgr.conf.sample">repmgr.conf.sample</ulink>.
</para>
<para>
For &repmgrd;-specific settings, see <xref linkend="repmgrd-configuration"/>.
</para>
<note>
<para>
The following parameters in the configuration file can be overridden with
command line options:
<itemizedlist>
<listitem>
<simpara>
<literal>-L/--log-level</literal> overrides <literal>log_level</literal> in
<filename>repmgr.conf</filename>
</simpara>
</listitem>
<listitem>
<simpara>
<literal>-b/--pg_bindir</literal> overrides <literal>pg_bindir</literal> in
<filename>repmgr.conf</filename>
</simpara>
</listitem>
</itemizedlist>
</para>
</note>
</sect1> </sect1>

View File

@@ -62,6 +62,70 @@ data_directory = /var/lib/pgsql/11/data</programlisting>
</sect2> </sect2>
<sect2 id="configuration-file-items" xreflabel="configuration file items">
<title>Configuration file items</title>
<para>
The following sections document some sections of the configuration file:
<itemizedlist>
<listitem>
<simpara>
<xref linkend="configuration-file-settings"/>
</simpara>
</listitem>
<listitem>
<simpara>
<xref linkend="configuration-file-optional-settings"/>
</simpara>
</listitem>
<listitem>
<simpara>
<xref linkend="configuration-file-log-settings"/>
</simpara>
</listitem>
<listitem>
<simpara>
<xref linkend="configuration-file-service-commands"/>
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
For a full list of annotated configuration items, see the file
<ulink url="https://raw.githubusercontent.com/2ndQuadrant/repmgr/master/repmgr.conf.sample">repmgr.conf.sample</ulink>.
</para>
<para>
For &repmgrd;-specific settings, see <xref linkend="repmgrd-configuration"/>.
</para>
<note>
<para>
The following parameters in the configuration file can be overridden with
command line options:
<itemizedlist>
<listitem>
<simpara>
<literal>-L/--log-level</literal> overrides <literal>log_level</literal> in
<filename>repmgr.conf</filename>
</simpara>
</listitem>
<listitem>
<simpara>
<literal>-b/--pg_bindir</literal> overrides <literal>pg_bindir</literal> in
<filename>repmgr.conf</filename>
</simpara>
</listitem>
</itemizedlist>
</para>
</note>
</sect2>
<sect2 id="configuration-file-location" xreflabel="configuration file location"> <sect2 id="configuration-file-location" xreflabel="configuration file location">
<title>Configuration file location</title> <title>Configuration file location</title>

View File

@@ -305,6 +305,7 @@
&configuration-file; &configuration-file;
&configuration-file-required-settings; &configuration-file-required-settings;
&configuration-file-optional-settings;
&configuration-file-log-settings; &configuration-file-log-settings;
&configuration-file-service-commands; &configuration-file-service-commands;

View File

@@ -18,6 +18,7 @@
<!ENTITY configuration SYSTEM "configuration.xml"> <!ENTITY configuration SYSTEM "configuration.xml">
<!ENTITY configuration-file SYSTEM "configuration-file.xml"> <!ENTITY configuration-file SYSTEM "configuration-file.xml">
<!ENTITY configuration-file-required-settings SYSTEM "configuration-file-required-settings.xml"> <!ENTITY configuration-file-required-settings SYSTEM "configuration-file-required-settings.xml">
<!ENTITY configuration-file-optional-settings SYSTEM "configuration-file-optional-settings.xml">
<!ENTITY configuration-file-log-settings SYSTEM "configuration-file-log-settings.xml"> <!ENTITY configuration-file-log-settings SYSTEM "configuration-file-log-settings.xml">
<!ENTITY configuration-file-service-commands SYSTEM "configuration-file-service-commands.xml"> <!ENTITY configuration-file-service-commands SYSTEM "configuration-file-service-commands.xml">
<!ENTITY cloning-standbys SYSTEM "cloning-standbys.xml"> <!ENTITY cloning-standbys SYSTEM "cloning-standbys.xml">

View File

@@ -326,9 +326,13 @@
<term><option>--upstream-conninfo</option></term> <term><option>--upstream-conninfo</option></term>
<listitem> <listitem>
<para> <para>
<literal>primary_conninfo</literal> value to write in recovery.conf <literal>primary_conninfo</literal> value to write in <filename>recovery.conf</filename>
when the intended upstream server does not yet exist. when the intended upstream server does not yet exist.
</para> </para>
<para>
Note that &repmgr; may modify the provided value, in particular to set the
correct <literal>application_name</literal>.
</para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@@ -20,22 +20,17 @@
(&quot;follow target&quot;). Typically this will be the primary, but this (&quot;follow target&quot;). Typically this will be the primary, but this
command can also be used to attach the standby to another standby. command can also be used to attach the standby to another standby.
</para> </para>
<para> <para>
This command requires a valid This command requires a valid <filename>repmgr.conf</filename> file for the standby,
<filename>repmgr.conf</filename> file for the standby, either specified either specified explicitly with <literal>-f/--config-file</literal> or located in a
explicitly with <literal>-f/--config-file</literal> or located in a
default location; no additional arguments are required. default location; no additional arguments are required.
</para> </para>
<para> <para>The standby node (&quot;follow candidate&quot;) <emphasis>must</emphasis>
By default &repmgr; will attempt to attach the standby to the current primary. be running. If the new upstream (&quot;follow target&quot;) is not the primary,
If <option>--upstream-node-id</option> is provided, &repmgr; will attempt the cluster primary <emphasis>must</emphasis> be running and accessible from the
to attach the standby to the specified node, which can be another standby. standby node.
</para>
<para>
This command will force a restart of the standby server, which must be
running.
</para> </para>
<tip> <tip>
@@ -45,6 +40,16 @@
</para> </para>
</tip> </tip>
<para>
By default &repmgr; will attempt to attach the standby to the current primary.
If <option>--upstream-node-id</option> is provided, &repmgr; will attempt
to attach the standby to the specified node, which can be another standby.
</para>
<para>
This command will force a restart of PostgreSQL on the standby node.
</para>
<para> <para>
<command>repmgr standby follow</command> will wait up to <command>repmgr standby follow</command> will wait up to
<varname>standby_follow_timeout</varname> seconds (default: <literal>30</literal>) <varname>standby_follow_timeout</varname> seconds (default: <literal>30</literal>)

View File

@@ -263,7 +263,7 @@ ALTER EXTENSION repmgr UPDATE</programlisting>
<tip> <tip>
<para> <para>
Use <command><link linkend="repmgr-node-check">repmgr node check</link></command> Use <command><link linkend="repmgr-node-check">repmgr node check</link></command>
to determine which replacation slots need to be recreated. to determine which replication slots need to be recreated.
</para> </para>
</tip> </tip>

View File

@@ -78,8 +78,6 @@ CREATE VIEW repmgr.show_nodes AS
LEFT JOIN repmgr.nodes un LEFT JOIN repmgr.nodes un
ON un.node_id = n.upstream_node_id; ON un.node_id = n.upstream_node_id;
/* XXX update upgrade scripts! */
CREATE TABLE repmgr.voting_term ( CREATE TABLE repmgr.voting_term (
term INT NOT NULL term INT NOT NULL
); );

View File

@@ -78,8 +78,6 @@ CREATE VIEW repmgr.show_nodes AS
LEFT JOIN repmgr.nodes un LEFT JOIN repmgr.nodes un
ON un.node_id = n.upstream_node_id; ON un.node_id = n.upstream_node_id;
/* XXX update upgrade scripts! */
CREATE TABLE repmgr.voting_term ( CREATE TABLE repmgr.voting_term (
term INT NOT NULL term INT NOT NULL
); );

View File

@@ -78,8 +78,6 @@ CREATE VIEW repmgr.show_nodes AS
LEFT JOIN repmgr.nodes un LEFT JOIN repmgr.nodes un
ON un.node_id = n.upstream_node_id; ON un.node_id = n.upstream_node_id;
/* XXX update upgrade scripts! */
CREATE TABLE repmgr.voting_term ( CREATE TABLE repmgr.voting_term (
term INT NOT NULL term INT NOT NULL
); );

View File

@@ -78,8 +78,6 @@ CREATE VIEW repmgr.show_nodes AS
LEFT JOIN repmgr.nodes un LEFT JOIN repmgr.nodes un
ON un.node_id = n.upstream_node_id; ON un.node_id = n.upstream_node_id;
/* XXX update upgrade scripts! */
CREATE TABLE repmgr.voting_term ( CREATE TABLE repmgr.voting_term (
term INT NOT NULL term INT NOT NULL
); );

View File

@@ -78,8 +78,6 @@ CREATE VIEW repmgr.show_nodes AS
LEFT JOIN repmgr.nodes un LEFT JOIN repmgr.nodes un
ON un.node_id = n.upstream_node_id; ON un.node_id = n.upstream_node_id;
/* XXX update upgrade scripts! */
CREATE TABLE repmgr.voting_term ( CREATE TABLE repmgr.voting_term (
term INT NOT NULL term INT NOT NULL
); );

View File

@@ -112,7 +112,7 @@ static void get_barman_property(char *dst, char *name, char *local_repmgr_direct
static int get_tablespace_data_barman(char *, TablespaceDataList *); static int get_tablespace_data_barman(char *, TablespaceDataList *);
static char *make_barman_ssh_command(char *buf); static char *make_barman_ssh_command(char *buf);
static bool create_recovery_file(t_node_info *node_record, t_conninfo_param_list *recovery_conninfo, char *dest, bool as_file); static bool create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_conninfo, char *dest, bool as_file);
static void write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list); static void write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list);
static bool check_sibling_nodes(NodeInfoList *sibling_nodes, SiblingNodeStats *sibling_nodes_stats); static bool check_sibling_nodes(NodeInfoList *sibling_nodes, SiblingNodeStats *sibling_nodes_stats);
static bool check_free_wal_senders(int available_wal_senders, SiblingNodeStats *sibling_nodes_stats, bool *dry_run_success); static bool check_free_wal_senders(int available_wal_senders, SiblingNodeStats *sibling_nodes_stats, bool *dry_run_success);
@@ -2784,12 +2784,6 @@ do_standby_follow(void)
PQfinish(local_conn); PQfinish(local_conn);
if (runtime_options.dry_run == true)
{
log_info(_("prerequisites for executing STANDBY FOLLOW are met"));
exit(SUCCESS);
}
/* /*
* Here we'll need a connection to the primary, if the upstream is not a primary. * Here we'll need a connection to the primary, if the upstream is not a primary.
*/ */
@@ -2802,12 +2796,30 @@ do_standby_follow(void)
primary_conn = get_primary_connection_quiet(follow_target_conn, primary_conn = get_primary_connection_quiet(follow_target_conn,
&primary_node_id, &primary_node_id,
NULL); NULL);
/*
* If follow target is not primary and no other primary could be found,
* abort because we won't be able to update the node record.
*/
if (PQstatus(primary_conn) != CONNECTION_OK)
{
log_error(_("unable to determine the cluster primary"));
log_detail(_("an active primary node is required for \"repmgr standby follow\""));
PQfinish(follow_target_conn);
exit(ERR_FOLLOW_FAIL);
}
} }
else else
{ {
primary_conn = follow_target_conn; primary_conn = follow_target_conn;
} }
if (runtime_options.dry_run == true)
{
log_info(_("prerequisites for executing STANDBY FOLLOW are met"));
exit(SUCCESS);
}
initPQExpBuffer(&follow_output); initPQExpBuffer(&follow_output);
success = do_standby_follow_internal( success = do_standby_follow_internal(
@@ -2991,39 +3003,6 @@ do_standby_follow_internal(PGconn *primary_conn, PGconn *follow_target_conn, t_n
} }
} }
/* Initialise connection parameters to write as `primary_conninfo` */
initialize_conninfo_params(&recovery_conninfo, false);
/* We ignore any application_name set in the primary's conninfo */
parse_conninfo_string(follow_target_node_record->conninfo, &recovery_conninfo, &errmsg, true);
{
t_conninfo_param_list local_node_conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER;
bool parse_success;
initialize_conninfo_params(&local_node_conninfo, false);
parse_success = parse_conninfo_string(local_node_record.conninfo, &local_node_conninfo, &errmsg, false);
if (parse_success == false)
{
/*
* this shouldn't happen, but if it does we'll plough on
* regardless
*/
log_warning(_("unable to parse conninfo string \"%s\":\n %s"),
local_node_record.conninfo, errmsg);
}
else
{
char *application_name = param_get(&local_node_conninfo, "application_name");
if (application_name != NULL && strlen(application_name))
param_set(&recovery_conninfo, "application_name", application_name);
}
free_conninfo_params(&local_node_conninfo);
/* /*
* store the original upstream node id so we can delete the * store the original upstream node id so we can delete the
* replication slot, if exists * replication slot, if exists
@@ -3037,12 +3016,10 @@ do_standby_follow_internal(PGconn *primary_conn, PGconn *follow_target_conn, t_n
original_upstream_node_id = follow_target_node_record->node_id; original_upstream_node_id = follow_target_node_record->node_id;
} }
if (config_file_options.use_replication_slots && runtime_options.host_param_provided == false && original_upstream_node_id != UNKNOWN_NODE_ID) if (config_file_options.use_replication_slots && runtime_options.host_param_provided == false && original_upstream_node_id != UNKNOWN_NODE_ID)
{ {
remove_old_replication_slot = true; remove_old_replication_slot = true;
} }
}
/* Fetch original upstream's record */ /* Fetch original upstream's record */
if (remove_old_replication_slot == true) if (remove_old_replication_slot == true)
@@ -3066,6 +3043,12 @@ do_standby_follow_internal(PGconn *primary_conn, PGconn *follow_target_conn, t_n
} }
} }
/* Initialise connection parameters to write as "primary_conninfo" */
initialize_conninfo_params(&recovery_conninfo, false);
/* We ignore any application_name set in the primary's conninfo */
parse_conninfo_string(follow_target_node_record->conninfo, &recovery_conninfo, &errmsg, true);
/* Set the application name to this node's name */ /* Set the application name to this node's name */
param_set(&recovery_conninfo, "application_name", config_file_options.node_name); param_set(&recovery_conninfo, "application_name", config_file_options.node_name);
@@ -6942,11 +6925,11 @@ check_recovery_type(PGconn *conn)
* Creates a recovery.conf file for a standby * Creates a recovery.conf file for a standby
* *
* A database connection pointer is required for escaping primary_conninfo * A database connection pointer is required for escaping primary_conninfo
* parameters. When cloning from Barman and --no-upstream-connection ) this * parameters. When cloning from Barman and --no-upstream-connection supplied,
* might not be available. * this might not be available.
*/ */
bool static bool
create_recovery_file(t_node_info *node_record, t_conninfo_param_list *recovery_conninfo, char *dest, bool as_file) create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_conninfo, char *dest, bool as_file)
{ {
PQExpBufferData recovery_file_buf; PQExpBufferData recovery_file_buf;
char recovery_file_path[MAXPGPATH] = ""; char recovery_file_path[MAXPGPATH] = "";
@@ -6961,29 +6944,7 @@ create_recovery_file(t_node_info *node_record, t_conninfo_param_list *recovery_c
"standby_mode = 'on'\n"); "standby_mode = 'on'\n");
/* primary_conninfo = '...' */ /* primary_conninfo = '...' */
write_primary_conninfo(&recovery_file_buf, primary_conninfo);
/*
* the user specified --upstream-conninfo string - copy that
*/
if (strlen(runtime_options.upstream_conninfo))
{
char *escaped = escape_recovery_conf_value(runtime_options.upstream_conninfo);
appendPQExpBuffer(&recovery_file_buf,
"primary_conninfo = '%s'\n",
escaped);
free(escaped);
}
/*
* otherwise use the conninfo inferred from the upstream connection and/or
* node record
*/
else
{
write_primary_conninfo(&recovery_file_buf, recovery_conninfo);
}
/* recovery_target_timeline = 'latest' */ /* recovery_target_timeline = 'latest' */
appendPQExpBufferStr(&recovery_file_buf, appendPQExpBufferStr(&recovery_file_buf,

View File

@@ -51,7 +51,6 @@
# ============================================================================= # =============================================================================
# Optional configuration items # Optional configuration items
# ============================================================================= # =============================================================================
@@ -68,16 +67,16 @@
# Replication settings # Replication settings
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
#replication_user='repmgr' # User to make replication connections with, if not set defaults #replication_user='repmgr' # User to make replication connections with, if not set
# to the user defined in "conninfo". # defaults to the user defined in "conninfo".
#replication_type=physical # Must be one of 'physical' or 'bdr'. #replication_type=physical # Must be one of "physical" or "bdr".
# NOTE: "bdr" can only be used with BDR 2.x # NOTE: "bdr" can only be used with BDR 2.x
#location=default # arbitrary string defining the location of the node; this #location=default # An arbitrary string defining the location of the node; this
# is used during failover to check visibilty of the # is used during failover to check visibility of the
# current primary node. See the 'repmgrd' documentation # current primary node. For further details see:
# in README.md for further details. # https://repmgr.org/docs/current/repmgrd-network-split.html
#use_replication_slots=no # whether to use physical replication slots #use_replication_slots=no # whether to use physical replication slots
# NOTE: when using replication slots, # NOTE: when using replication slots,

View File

@@ -1,3 +1,3 @@
#define REPMGR_VERSION_DATE "" #define REPMGR_VERSION_DATE ""
#define REPMGR_VERSION "4.4dev" #define REPMGR_VERSION "4.4rc1"
#define REPMGR_VERSION_NUM 40400 #define REPMGR_VERSION_NUM 40400