diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 03d26e24d2c..d9a2ce5e40d 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -6147,6 +6147,25 @@ GetWALInsertionTimeLine(void) return XLogCtl->InsertTimeLineID; } +/* + * GetWALInsertionTimeLineIfSet -- If the system is not in recovery, returns + * the WAL insertion timeline; else, returns 0. Wherever possible, use + * GetWALInsertionTimeLine() instead, since it's cheaper. Note that this + * function decides recovery has ended as soon as the insert TLI is set, which + * happens before we set XLogCtl->SharedRecoveryState to RECOVERY_STATE_DONE. + */ +TimeLineID +GetWALInsertionTimeLineIfSet(void) +{ + TimeLineID insertTLI; + + SpinLockAcquire(&XLogCtl->info_lck); + insertTLI = XLogCtl->InsertTimeLineID; + SpinLockRelease(&XLogCtl->info_lck); + + return insertTLI; +} + /* * GetLastImportantRecPtr -- Returns the LSN of the last important record * inserted. All records not explicitly marked as unimportant are considered diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 6fd5b3dfa66..287b8af4350 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -245,6 +245,7 @@ extern XLogRecPtr GetRedoRecPtr(void); extern XLogRecPtr GetInsertRecPtr(void); extern XLogRecPtr GetFlushRecPtr(TimeLineID *insertTLI); extern TimeLineID GetWALInsertionTimeLine(void); +extern TimeLineID GetWALInsertionTimeLineIfSet(void); extern XLogRecPtr GetLastImportantRecPtr(void); extern void SetWalWriterSleeping(bool sleeping);