From: | Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> |
---|---|
To: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | pg_wal/RECOVERYHISTORY file remains after archive recovery |
Date: | 2019-09-26 08:14:44 |
Message-ID: | CAD21AoBO_eDQub6zojFnWtnmutRBWvYf7=cW4Hsqj+U_R26w3Q@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
When we do archive recovery from the database cluster of which
timeline ID is more than 2 pg_wal/RECOVERYHISTORY is remained even
after archive recovery completed.
The cause of this seems cbc55da556b that moved exitArchiveRecovery()
to before writeTimeLineHistory(). writeTimeLineHIstory() restores the
history file from archive directory and therefore creates
RECOVERYHISTORY file in pg_wal directory. We used to remove such
temporary file by exitArchiveRecovery() but with this commit the order
of calling these functions is reversed. Therefore we create
RECOVERYHISTORY file after exited from archive recovery mode and
remain it.
To fix it I think that we can remove RECOVERYHISTORY file before the
history file is archived in writeTimeLineHIstory(). The commit
cbc55da556b is intended to minimize the window between the moment the
file is written and the end-of-recovery record is generated. So I
think it's not good to put exitArchiveRecovery() after
writeTimeLineHIstory().
This issue seems to exist in all supported version as far as I read
the code, although I don't test all of them yet.
I've attached the draft patch to fix this issue. Regression test might
be required. Feedback and suggestion are very welcome.
Regards,
--
Masahiko Sawada
Attachment | Content-Type | Size |
---|---|---|
remove_recovered_historyfile.patch | text/x-patch | 2.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Langote | 2019-09-26 08:37:43 | Re: Add comments for a postgres program in bootstrap mode |
Previous Message | Amit Langote | 2019-09-26 07:33:17 | Re: Proposal for syntax to support creation of partition tables when creating parent table |