@@ -2424,7 +2424,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible)
24242424 bool ispartialpage ;
24252425 bool last_iteration ;
24262426 bool finishing_seg ;
2427- bool use_existent ;
2427+ bool added ;
24282428 int curridx ;
24292429 int npages ;
24302430 int startidx ;
@@ -2490,8 +2490,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible)
24902490 wal_segment_size );
24912491
24922492 /* create/use new log file */
2493- use_existent = true;
2494- openLogFile = XLogFileInit (openLogSegNo , & use_existent );
2493+ openLogFile = XLogFileInit (openLogSegNo , & added );
24952494 ReserveExternalFD ();
24962495 }
24972496
@@ -3260,9 +3259,7 @@ XLogNeedsFlush(XLogRecPtr record)
32603259 *
32613260 * logsegno: identify segment to be created/opened.
32623261 *
3263- * *use_existent: if true, OK to use a pre-existing file (else, any
3264- * pre-existing file will be deleted). On return, false iff this call added
3265- * some segment on disk.
3262+ * *added: on return, true if this call raised the number of extant segments.
32663263 *
32673264 * Returns FD of opened file.
32683265 *
@@ -3272,7 +3269,7 @@ XLogNeedsFlush(XLogRecPtr record)
32723269 * in a critical section.
32733270 */
32743271int
3275- XLogFileInit (XLogSegNo logsegno , bool * use_existent )
3272+ XLogFileInit (XLogSegNo logsegno , bool * added )
32763273{
32773274 char path [MAXPGPATH ];
32783275 char tmppath [MAXPGPATH ];
@@ -3287,19 +3284,17 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent)
32873284 /*
32883285 * Try to use existent file (checkpoint maker may have created it already)
32893286 */
3290- if (* use_existent )
3287+ * added = false;
3288+ fd = BasicOpenFile (path , O_RDWR | PG_BINARY | get_sync_bit (sync_method ));
3289+ if (fd < 0 )
32913290 {
3292- fd = BasicOpenFile (path , O_RDWR | PG_BINARY | get_sync_bit (sync_method ));
3293- if (fd < 0 )
3294- {
3295- if (errno != ENOENT )
3296- ereport (ERROR ,
3297- (errcode_for_file_access (),
3298- errmsg ("could not open file \"%s\": %m" , path )));
3299- }
3300- else
3301- return fd ;
3291+ if (errno != ENOENT )
3292+ ereport (ERROR ,
3293+ (errcode_for_file_access (),
3294+ errmsg ("could not open file \"%s\": %m" , path )));
33023295 }
3296+ else
3297+ return fd ;
33033298
33043299 /*
33053300 * Initialize an empty (all zeroes) segment. NOTE: it is possible that
@@ -3412,12 +3407,9 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent)
34123407 errmsg ("could not close file \"%s\": %m" , tmppath )));
34133408
34143409 /*
3415- * Now move the segment into place with its final name.
3416- *
3417- * If caller didn't want to use a pre-existing file, get rid of any
3418- * pre-existing file. Otherwise, cope with possibility that someone else
3419- * has created the file while we were filling ours: if so, use ours to
3420- * pre-create a future log segment.
3410+ * Now move the segment into place with its final name. Cope with
3411+ * possibility that someone else has created the file while we were
3412+ * filling ours: if so, use ours to pre-create a future log segment.
34213413 */
34223414 installed_segno = logsegno ;
34233415
@@ -3431,9 +3423,8 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent)
34313423 * CheckPointSegments.
34323424 */
34333425 max_segno = logsegno + CheckPointSegments ;
3434- if (InstallXLogFileSegment (& installed_segno , tmppath ,
3435- * use_existent , max_segno ))
3436- * use_existent = false;
3426+ if (InstallXLogFileSegment (& installed_segno , tmppath , true, max_segno ))
3427+ * added = true;
34373428 else
34383429 {
34393430 /*
@@ -3918,18 +3909,17 @@ PreallocXlogFiles(XLogRecPtr endptr)
39183909{
39193910 XLogSegNo _logSegNo ;
39203911 int lf ;
3921- bool use_existent ;
3912+ bool added ;
39223913 uint64 offset ;
39233914
39243915 XLByteToPrevSeg (endptr , _logSegNo , wal_segment_size );
39253916 offset = XLogSegmentOffset (endptr - 1 , wal_segment_size );
39263917 if (offset >= (uint32 ) (0.75 * wal_segment_size ))
39273918 {
39283919 _logSegNo ++ ;
3929- use_existent = true;
3930- lf = XLogFileInit (_logSegNo , & use_existent );
3920+ lf = XLogFileInit (_logSegNo , & added );
39313921 close (lf );
3932- if (! use_existent )
3922+ if (added )
39333923 CheckpointStats .ckpt_segs_added ++ ;
39343924 }
39353925}
@@ -5224,7 +5214,7 @@ BootStrapXLOG(void)
52245214 XLogLongPageHeader longpage ;
52255215 XLogRecord * record ;
52265216 char * recptr ;
5227- bool use_existent ;
5217+ bool added ;
52285218 uint64 sysidentifier ;
52295219 struct timeval tv ;
52305220 pg_crc32c crc ;
@@ -5321,8 +5311,7 @@ BootStrapXLOG(void)
53215311 record -> xl_crc = crc ;
53225312
53235313 /* Create first XLOG segment file */
5324- use_existent = false;
5325- openLogFile = XLogFileInit (1 , & use_existent );
5314+ openLogFile = XLogFileInit (1 , & added );
53265315
53275316 /*
53285317 * We needn't bother with Reserve/ReleaseExternalFD here, since we'll
@@ -5628,10 +5617,10 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog)
56285617 * The switch happened at a segment boundary, so just create the next
56295618 * segment on the new timeline.
56305619 */
5631- bool use_existent = true ;
5620+ bool added ;
56325621 int fd ;
56335622
5634- fd = XLogFileInit (startLogSegNo , & use_existent );
5623+ fd = XLogFileInit (startLogSegNo , & added );
56355624
56365625 if (close (fd ) != 0 )
56375626 {
0 commit comments