Re: pg_stop_backup(wait_for_archive := true) on standby server
Michael Paquier <michael.paquier@gmail.com>
From: Michael Paquier <michael.paquier@gmail.com>
To: Masahiko Sawada <sawada.mshk@gmail.com>
Cc: Stephen Frost <sfrost@snowman.net>,
Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Magnus Hagander <magnus@hagander.net>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2017-07-12T08:06:47Z
Lists: pgsql-hackers
On Tue, Jul 11, 2017 at 9:28 AM, Masahiko Sawada <sawada.mshk@gmail.com> wrote:
> Attached updated version patch. Please review it.
Cool, thanks.
+ useless. If the second parameter <parameter>wait_for_archive</> is true and
+ the backup is taken on a standby, <function>pg_stop_backup</> waits for WAL
+ to archived when <varname>archive_mode</> is <literal>always</>. Enforcing
+ manually a WAL segment swtich to happen with for example
1) "waits for WAL to BE archived".
2) s/swtich/switch
+ to <literal>false</> will control the wait time, thought all the
WAL segments
s/thought/though/
/*
* During recovery, since we don't use the end-of-backup WAL
* record and don't write the backup history file, the
* starting WAL location doesn't need to be unique.
This means
* that two base backups started at the same time
might use
* the same checkpoint as starting locations.
*/
This comment in xlog.c needs an update. Two base backups started at
the same can generate a backup history file with the same offset, aka
same file name. I don't think that it matters much for this file
honestly. I think that this would become meaningful once such files
play a more important role, in which case having a unique identifier
would be way more interesting, but this day has IMO not come yet.
Other thoughts are welcome.
if (waitforarchive && XLogArchivingActive())
{
+ /* Don't wait if WAL archiving not enabled always in recovery */
+ if (backup_started_in_recovery && !XLogArchivingAlways())
+ return stoppoint;
+
This has the smell of breakage waiting to happen, I think that we
should have just one single return point, which updates as well the
stop TLI at the end of the routine. This can just be a single
condition.
+ if (stoptli_p)
+ *stoptli_p = stoptli;
+
Not sure there is any point to move that around, on top of previous comment.
+ errhint("Backup has been taken from a
standby, check if the WAL segment "
+ "needed for this backup have been
completed, in which case a "
+ "foreced segment switch may can
be needed on the primary. "
+ "If a segment swtich has already
happend check that your "
+ "archive_command is executing properly."
+ "pg_stop_backup can be canceled
safely, but the database backup "
+ "will not be usable without all
the WAL segments.")));
Some comments here:
1) s/foreced/forced/
2) s/may can/may/
3) s/swtich/switch/
4) s/happend/happened/
5) "Backup has been taken from a standby" should be a single sentence.
This is beginning to shape.
Thanks,
--
Michael
Commits
-
Make pg_stop_backup's wait_for_archive flag work on standbys.
- 52f8a59dd953 10.0 landed
-
Implement backup API functions for non-exclusive backups
- 7117685461af 9.6.0 cited