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

Commit268fecc

Browse files
committed
Fix corner-case bug in tracking of latest removed WAL segment during
streaming replication. We used log/seg 0/0 to indicate that no WAL segmentshave been removed since startup, but 0/0 is a valid value for the very firstWAL segment after initdb. To make that disambiguous, store(latest removed WAL segment + 1) in the global variable.Per report from Matt Chesler, also reproduced by Greg Smith.
1 parent381d6a0 commit268fecc

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ typedef struct XLogCtlData
363363
uint32ckptXidEpoch;/* nextXID & epoch of latest checkpoint */
364364
TransactionIdckptXid;
365365
XLogRecPtrasyncXactLSN;/* LSN of newest async commit/abort */
366-
uint32lastRemovedLog;/* latest removed/recycled XLOG segment */
366+
uint32lastRemovedLog;/* latest removed/recycled XLOG segment+ 1*/
367367
uint32lastRemovedSeg;
368368

369369
/* Protected by WALWriteLock: */
@@ -3210,8 +3210,10 @@ PreallocXlogFiles(XLogRecPtr endptr)
32103210
}
32113211

32123212
/*
3213-
* Get the log/seg of the latest removed or recycled WAL segment.
3214-
* Returns 0 if no WAL segments have been removed since startup.
3213+
* Get the log/seg of the first WAL segment that has not been removed or
3214+
* recycled. In other words, the log/seg of the last removed/recycled WAL
3215+
* segment + 1.
3216+
* Returns 0/0 if no WAL segments have been removed since startup.
32153217
*/
32163218
void
32173219
XLogGetLastRemoved(uint32*log,uint32*seg)
@@ -3239,6 +3241,7 @@ UpdateLastRemovedPtr(char *filename)
32393241
seg;
32403242

32413243
XLogFromFileName(filename,&tli,&log,&seg);
3244+
NextLogSeg(log,seg);
32423245

32433246
SpinLockAcquire(&xlogctl->info_lck);
32443247
if (log>xlogctl->lastRemovedLog||

‎src/backend/replication/walsender.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ XLogRead(char *buf, XLogRecPtr recptr, Size nbytes)
630630
XLogGetLastRemoved(&lastRemovedLog,&lastRemovedSeg);
631631
XLByteToSeg(startRecPtr,log,seg);
632632
if (log<lastRemovedLog||
633-
(log==lastRemovedLog&&seg <=lastRemovedSeg))
633+
(log==lastRemovedLog&&seg<lastRemovedSeg))
634634
{
635635
charfilename[MAXFNAMELEN];
636636

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp