On Fri, Jul 08, 2022 at 09:54:50AM -0700, Nathan Bossart wrote:
> Since it's okay to return true or false in the identical/persisted file
> case, I didn't think it deserved emphasis.
I think returning false is not-okay:
> --- a/doc/src/sgml/backup.sgml
> +++ b/doc/src/sgml/backup.sgml
> @@ -681,14 +681,28 @@ test ! -f /mnt/server/archivedir/00000001000000A900000065 && cp pg_wal/0
> any pre-existing archive file. This is an important safety feature to
> preserve the integrity of your archive in case of administrator error
> (such as sending the output of two different servers to the same archive
> - directory).
> + directory). It is advisable to test your proposed archive library to ensure
> + that it does not overwrite an existing file.
> </para>
>
> <para>
> - It is advisable to test your proposed archive library to ensure that it
> - indeed does not overwrite an existing file, <emphasis>and that it returns
> - <literal>false</literal> in this case</emphasis>.
> - The example command above for Unix ensures this by including a separate
> + In rare cases, <productname>PostgreSQL</productname> may attempt to
> + re-archive a WAL file that was previously archived. For example, if the
> + system crashes before the server makes a durable record of archival success,
> + the server will attempt to archive the file again after restarting (provided
> + archiving is still enabled). When an archive library encounters a
> + pre-existing file, it may return <literal>true</literal> if the WAL file has
> + identical contents to the pre-existing archive and the pre-existing archive
> + is fully persisted to storage. Alternatively, the archive library may
> + return <literal>false</literal> anytime a pre-existing file is encountered,
> + but this will require manual action by an administrator to resolve. If a
Inviting the administrator to resolve things is more dangerous than just
returning true. I recommend making this text more opinionated and simpler:
libraries must return true. Alternately, if some library has found a good
reason to return false, this paragraph could give the reason. I don't know of
such a reason, though.
> + pre-existing file contains different contents than the WAL file being
> + archived, the archive library <emphasis>must</emphasis> return false.
> + </para>