Re: [BUG] Archive recovery failure on 9.3+.

From: Christoph Berg <christoph(dot)berg(at)credativ(dot)de>
To: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
Cc: Josh Berkus <josh(at)agliodbs(dot)com>, Kyotaro HORIGUCHI <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: [BUG] Archive recovery failure on 9.3+.
Date: 2014-02-12 11:24:54
Message-ID: 20140212112453.GB4409@msgid.df7cb.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Re: Heikki Linnakangas 2014-01-13 <52D3CAFF(dot)3010807(at)vmware(dot)com>
> >>Actually, why is the partially-filled 000000010000000000000002 file
> >>archived in the first place? Looking at the code, it's been like that
> >>forever, but it seems like a bad idea. If the original server is still
> >>up and running, and writing more data to that file, what will happen is
> >>that when the original server later tries to archive it, it will fail
> >>because the partial version of the file is already in the archive. Or
> >>worse, the partial version overwrites a previously archived more
> >>complete version.
> >
> >Oh! This explains some transient errors I've seen.
> >
> >>Wouldn't it be better to not archive the old segment, and instead switch
> >>to a new segment after writing the end-of-recovery checkpoint, so that
> >>the segment on the new timeline is archived sooner?
> >
> >It would be better to zero-fill and switch segments, yes. We should
> >NEVER be in a position of archiving two different versions of the same
> >segment.
>
> Ok, I think we're in agreement that that's the way to go for master.
>
> Now, what to do about back-branches? On one hand, I'd like to apply
> the same fix to all stable branches, as the current behavior is
> silly and always has been. On the other hand, we haven't heard any
> complaints about it, so we probably shouldn't fix what ain't broken.
> Perhaps we should apply it to 9.3, as that's where we have the acute
> problem the OP reported. Thoughts?
>
> In summary, I propose that we change master and REL9_3_STABLE to not
> archive the partial segment from previous timeline. Older branches
> will keep the current behavior.

I've seen the "can't archive file from the old timeline" problem on
9.2 and 9.3 slaves after promotion. The problem is in conjunction with
the proposed archive_command in the default postgresql.conf comments:

# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'

With 9.1, it works, but 9.2 and 9.3 don't archive anything until I
remove the "test ! -f" part. (An alternative fix would be to declare
the behavior ok and adjust that example in the config.)

I've always blamed 9.2+'s cascading replication for this, but haven't
investigated deeper.

Christoph
--
cb(at)df7cb(dot)de | http://www.df7cb.de/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message MauMau 2014-02-12 11:55:32 Re: Memory ordering issue in LWLockRelease, WakeupWaiters, WALInsertSlotRelease
Previous Message Andres Freund 2014-02-12 10:14:56 Re: Patch: show xid and xmin in pg_stat_activity and pg_stat_replication