connections to the target server should fail.
</para>
- <para>
- During the recovery process, if the target server disconnects from the
- source server, <application>pg_createsubscriber</application> will check a
- few times if the connection has been reestablished to stream the required
- WAL. After a few attempts, it terminates with an error.
- </para>
-
<para>
Since DDL commands are not replicated by logical replication, avoid
executing DDL commands that change the database schema while running
*
* If recovery_timeout option is set, terminate abnormally without finishing
* the recovery process. By default, it waits forever.
+ *
+ * XXX Is the recovery process still in progress? When recovery process has a
+ * better progress reporting mechanism, it should be added here.
*/
static void
wait_for_end_recovery(const char *conninfo, const struct CreateSubscriberOptions *opt)
PGconn *conn;
int status = POSTMASTER_STILL_STARTING;
int timer = 0;
- int count = 0; /* number of consecutive connection attempts */
-
-#define NUM_CONN_ATTEMPTS 10
pg_log_info("waiting for the target server to reach the consistent state");
for (;;)
{
- PGresult *res;
bool in_recovery = server_is_in_recovery(conn);
/*
break;
}
- /*
- * If it is still in recovery, make sure the target server is
- * connected to the primary so it can receive the required WAL to
- * finish the recovery process. If it is disconnected try
- * NUM_CONN_ATTEMPTS in a row and bail out if not succeed.
- */
- res = PQexec(conn,
- "SELECT 1 FROM pg_catalog.pg_stat_wal_receiver");
- if (PQntuples(res) == 0)
- {
- if (++count > NUM_CONN_ATTEMPTS)
- {
- stop_standby_server(subscriber_dir);
- pg_log_error("standby server disconnected from the primary");
- break;
- }
- }
- else
- count = 0; /* reset counter if it connects again */
-
- PQclear(res);
-
/* Bail out after recovery_timeout seconds if this option is set */
if (opt->recovery_timeout > 0 && timer >= opt->recovery_timeout)
{
command_ok(
[
'pg_createsubscriber', '--verbose',
+ '--recovery-timeout', "$PostgreSQL::Test::Utils::timeout_default",
'--dry-run', '--pgdata',
$node_s->data_dir, '--publisher-server',
$node_p->connstr('pg1'), '--socket-directory',
command_ok(
[
'pg_createsubscriber', '--verbose',
+ '--recovery-timeout', "$PostgreSQL::Test::Utils::timeout_default",
'--verbose', '--pgdata',
$node_s->data_dir, '--publisher-server',
$node_p->connstr('pg1'), '--socket-directory',