Re: [BUG] non archived WAL removed during production crash recovery

Kyotaro Horiguchi <horikyota.ntt@gmail.com>

From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: jgdr@dalibo.com
Cc: masao.fujii@oss.nttdata.com, pgsql-bugs@lists.postgresql.org, michael@paquier.xyz
Date: 2020-04-08T08:39:09Z
Lists: pgsql-bugs, pgsql-hackers
At Tue, 7 Apr 2020 17:17:36 +0200, Jehan-Guillaume de Rorthais <jgdr@dalibo.com> wrote in 
> > +/* Recovery state */
> > +typedef enum RecoveryState
> > +{
> > +	NOT_IN_RECOVERY = 0,
> > +	IN_CRASH_RECOVERY,
> > +	IN_ARCHIVE_RECOVERY
> > +} RecoveryState;

I'm not sure the complexity is required here. Are we asuume that
archive_mode can be changed before restarting?

At Thu, 2 Apr 2020 15:49:15 +0200, Jehan-Guillaume de Rorthais <jgdr@dalibo.com> wrote in 
> > Ok, so our *current* consensus seems the followings. Right?
> > 
> > - If archive_mode=off, any WAL files with .ready files are removed in
> >     crash recovery, archive recoery and standby mode.
> 
> yes

If archive_mode = off no WAL files are marked as ".ready".

> > - If archive_mode=on, WAL files with .ready files are removed only in
> >     standby mode. In crash recovery and archive recovery cases, they keep
> >     remaining and would be archived after recovery finishes (i.e., during
> >     normal processing).
> 
> yes
>
> > - If archive_mode=always, in crash recovery, archive recovery and
> >     standby mode, WAL files with .ready files are archived if WAL archiver
> >     is running.
> 
> yes

So if we assume archive_mode won't be changed after a crash before
restarting, if archive_mode = on on a standy, WAL files are not marked
as ".ready". If it is "always", WAL files that are to be archived are
marked as ".ready".  Finally, the condition reduces to:

If archiver is running, archive ".ready" files. Otherwise ignore
".ready" and just remove WAL files after use.
> 
> > That is, WAL files with .ready files are removed when either
> > archive_mode!=always in standby mode or archive_mode=off.
> 
> sounds fine to me.

That situation implies that archive_mode has been changed.  Can we
guarantee the completeness of the archive in the case?

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center



Commits

  1. Fix interpolation in test name.

  2. Add more TAP coverage for archive status with crash recovery of standbys

  3. Fix handling of WAL segments ready to be archived during crash recovery

  4. Fix WAL recycling on standbys depending on archive_mode