In XLogFileInit(), fix *use_existent postcondition to suit callers.
Infrequently, the mismatch caused log_checkpoints messages and TRACE_POSTGRESQL_CHECKPOINT_DONE() to witness an "added" count too high by one. Since that consequence is so minor, no back-patch. Discussion: https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com
This commit is contained in:
parent
c53c6b98d3
commit
85656bc305
@ -3261,8 +3261,8 @@ XLogNeedsFlush(XLogRecPtr record)
|
|||||||
* logsegno: identify segment to be created/opened.
|
* logsegno: identify segment to be created/opened.
|
||||||
*
|
*
|
||||||
* *use_existent: if true, OK to use a pre-existing file (else, any
|
* *use_existent: if true, OK to use a pre-existing file (else, any
|
||||||
* pre-existing file will be deleted). On return, true if a pre-existing
|
* pre-existing file will be deleted). On return, false iff this call added
|
||||||
* file was used.
|
* some segment on disk.
|
||||||
*
|
*
|
||||||
* Returns FD of opened file.
|
* Returns FD of opened file.
|
||||||
*
|
*
|
||||||
@ -3431,8 +3431,10 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent)
|
|||||||
* CheckPointSegments.
|
* CheckPointSegments.
|
||||||
*/
|
*/
|
||||||
max_segno = logsegno + CheckPointSegments;
|
max_segno = logsegno + CheckPointSegments;
|
||||||
if (!InstallXLogFileSegment(&installed_segno, tmppath,
|
if (InstallXLogFileSegment(&installed_segno, tmppath,
|
||||||
*use_existent, max_segno))
|
*use_existent, max_segno))
|
||||||
|
*use_existent = false;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* No need for any more future segments, or InstallXLogFileSegment()
|
* No need for any more future segments, or InstallXLogFileSegment()
|
||||||
@ -3442,9 +3444,6 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent)
|
|||||||
unlink(tmppath);
|
unlink(tmppath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set flag to tell caller there was no existent file */
|
|
||||||
*use_existent = false;
|
|
||||||
|
|
||||||
/* Now open original target segment (might not be file I just made) */
|
/* Now open original target segment (might not be file I just made) */
|
||||||
fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method));
|
fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method));
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user