Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc53c6b9

Browse files
committed
Remove XLogFileInit() ability to skip ControlFileLock.
Cold paths, initdb and end-of-recovery, used it. Don't optimize them.Discussion:https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com
1 parent7ac10f6 commitc53c6b9

File tree

3 files changed

+16
-34
lines changed

3 files changed

+16
-34
lines changed

‎src/backend/access/transam/xlog.c

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -913,8 +913,7 @@ static void AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic);
913913
staticboolXLogCheckpointNeeded(XLogSegNonew_segno);
914914
staticvoidXLogWrite(XLogwrtRqstWriteRqst,boolflexible);
915915
staticboolInstallXLogFileSegment(XLogSegNo*segno,char*tmppath,
916-
boolfind_free,XLogSegNomax_segno,
917-
booluse_lock);
916+
boolfind_free,XLogSegNomax_segno);
918917
staticintXLogFileRead(XLogSegNosegno,intemode,TimeLineIDtli,
919918
XLogSourcesource,boolnotfoundOk);
920919
staticintXLogFileReadAnyTLI(XLogSegNosegno,intemode,XLogSourcesource);
@@ -2492,7 +2491,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible)
24922491

24932492
/* create/use new log file */
24942493
use_existent= true;
2495-
openLogFile=XLogFileInit(openLogSegNo,&use_existent, true);
2494+
openLogFile=XLogFileInit(openLogSegNo,&use_existent);
24962495
ReserveExternalFD();
24972496
}
24982497

@@ -3265,10 +3264,6 @@ XLogNeedsFlush(XLogRecPtr record)
32653264
* pre-existing file will be deleted). On return, true if a pre-existing
32663265
* file was used.
32673266
*
3268-
* use_lock: if true, acquire ControlFileLock while moving file into
3269-
* place. This should be true except during bootstrap log creation. The
3270-
* caller must *not* hold the lock at call.
3271-
*
32723267
* Returns FD of opened file.
32733268
*
32743269
* Note: errors here are ERROR not PANIC because we might or might not be
@@ -3277,7 +3272,7 @@ XLogNeedsFlush(XLogRecPtr record)
32773272
* in a critical section.
32783273
*/
32793274
int
3280-
XLogFileInit(XLogSegNologsegno,bool*use_existent,booluse_lock)
3275+
XLogFileInit(XLogSegNologsegno,bool*use_existent)
32813276
{
32823277
charpath[MAXPGPATH];
32833278
chartmppath[MAXPGPATH];
@@ -3437,8 +3432,7 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock)
34373432
*/
34383433
max_segno=logsegno+CheckPointSegments;
34393434
if (!InstallXLogFileSegment(&installed_segno,tmppath,
3440-
*use_existent,max_segno,
3441-
use_lock))
3435+
*use_existent,max_segno))
34423436
{
34433437
/*
34443438
* No need for any more future segments, or InstallXLogFileSegment()
@@ -3592,7 +3586,7 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno,
35923586
/*
35933587
* Now move the segment into place with its final name.
35943588
*/
3595-
if (!InstallXLogFileSegment(&destsegno,tmppath, false,0, false))
3589+
if (!InstallXLogFileSegment(&destsegno,tmppath, false,0))
35963590
elog(ERROR,"InstallXLogFileSegment should not have failed");
35973591
}
35983592

@@ -3616,29 +3610,20 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno,
36163610
* free slot is found between *segno and max_segno. (Ignored when find_free
36173611
* is false.)
36183612
*
3619-
* use_lock: if true, acquire ControlFileLock while moving file into
3620-
* place. This should be true except during bootstrap log creation. The
3621-
* caller must *not* hold the lock at call.
3622-
*
36233613
* Returns true if the file was installed successfully. false indicates that
36243614
* max_segno limit was exceeded, or an error occurred while renaming the
36253615
* file into place.
36263616
*/
36273617
staticbool
36283618
InstallXLogFileSegment(XLogSegNo*segno,char*tmppath,
3629-
boolfind_free,XLogSegNomax_segno,
3630-
booluse_lock)
3619+
boolfind_free,XLogSegNomax_segno)
36313620
{
36323621
charpath[MAXPGPATH];
36333622
structstatstat_buf;
36343623

36353624
XLogFilePath(path,ThisTimeLineID,*segno,wal_segment_size);
36363625

3637-
/*
3638-
* We want to be sure that only one process does this at a time.
3639-
*/
3640-
if (use_lock)
3641-
LWLockAcquire(ControlFileLock,LW_EXCLUSIVE);
3626+
LWLockAcquire(ControlFileLock,LW_EXCLUSIVE);
36423627

36433628
if (!find_free)
36443629
{
@@ -3653,8 +3638,7 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath,
36533638
if ((*segno) >=max_segno)
36543639
{
36553640
/* Failed to find a free slot within specified range */
3656-
if (use_lock)
3657-
LWLockRelease(ControlFileLock);
3641+
LWLockRelease(ControlFileLock);
36583642
return false;
36593643
}
36603644
(*segno)++;
@@ -3668,14 +3652,12 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath,
36683652
*/
36693653
if (durable_rename_excl(tmppath,path,LOG)!=0)
36703654
{
3671-
if (use_lock)
3672-
LWLockRelease(ControlFileLock);
3655+
LWLockRelease(ControlFileLock);
36733656
/* durable_rename_excl already emitted log message */
36743657
return false;
36753658
}
36763659

3677-
if (use_lock)
3678-
LWLockRelease(ControlFileLock);
3660+
LWLockRelease(ControlFileLock);
36793661

36803662
return true;
36813663
}
@@ -3946,7 +3928,7 @@ PreallocXlogFiles(XLogRecPtr endptr)
39463928
{
39473929
_logSegNo++;
39483930
use_existent= true;
3949-
lf=XLogFileInit(_logSegNo,&use_existent, true);
3931+
lf=XLogFileInit(_logSegNo,&use_existent);
39503932
close(lf);
39513933
if (!use_existent)
39523934
CheckpointStats.ckpt_segs_added++;
@@ -4223,7 +4205,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo,
42234205
*endlogSegNo <=recycleSegNo&&
42244206
lstat(path,&statbuf)==0&&S_ISREG(statbuf.st_mode)&&
42254207
InstallXLogFileSegment(endlogSegNo,path,
4226-
true,recycleSegNo, true))
4208+
true,recycleSegNo))
42274209
{
42284210
ereport(DEBUG2,
42294211
(errmsg_internal("recycled write-ahead log file \"%s\"",
@@ -5341,7 +5323,7 @@ BootStrapXLOG(void)
53415323

53425324
/* Create first XLOG segment file */
53435325
use_existent= false;
5344-
openLogFile=XLogFileInit(1,&use_existent, false);
5326+
openLogFile=XLogFileInit(1,&use_existent);
53455327

53465328
/*
53475329
* We needn't bother with Reserve/ReleaseExternalFD here, since we'll
@@ -5650,7 +5632,7 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog)
56505632
booluse_existent= true;
56515633
intfd;
56525634

5653-
fd=XLogFileInit(startLogSegNo,&use_existent, true);
5635+
fd=XLogFileInit(startLogSegNo,&use_existent);
56545636

56555637
if (close(fd)!=0)
56565638
{

‎src/backend/replication/walreceiver.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
924924
/* Create/use new log file */
925925
XLByteToSeg(recptr,recvSegNo,wal_segment_size);
926926
use_existent= true;
927-
recvFile=XLogFileInit(recvSegNo,&use_existent, true);
927+
recvFile=XLogFileInit(recvSegNo,&use_existent);
928928
recvFileTLI=ThisTimeLineID;
929929
}
930930

‎src/include/access/xlog.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata,
296296
externvoidXLogFlush(XLogRecPtrRecPtr);
297297
externboolXLogBackgroundFlush(void);
298298
externboolXLogNeedsFlush(XLogRecPtrRecPtr);
299-
externintXLogFileInit(XLogSegNosegno,bool*use_existent,booluse_lock);
299+
externintXLogFileInit(XLogSegNosegno,bool*use_existent);
300300
externintXLogFileOpen(XLogSegNosegno);
301301

302302
externvoidCheckXLogRemoved(XLogSegNosegno,TimeLineIDtli);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp