mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Change ThisTimeLineID from a global variable to a local variable.
StartupXLOG() still has ThisTimeLineID as a local variable, but the remaining code in xlog.c now needs to the relevant TimeLineID by some other means. Mostly, this means that we now pass it as a function parameter to a bunch of functions where we didn't previously. However, a few cases require special handling: - In functions that might be called by outside callers who wouldn't necessarily know what timeline to specify, we get the timeline ID from shared memory. XLogCtl->ThisTimeLineID can be used in most cases since recovery is known to have completed by the time those functions are called. In xlog_redo(), we can use XLogCtl->replayEndTLI. - XLogFileClose() needs to know the TLI of the open logfile. Do that with a new global variable openLogTLI. While someone could argue that this is just trading one global variable for another, the new one has a far more narrow purposes and is referenced in just a few places. - read_backup_label() now returns the TLI that it obtains by parsing the backup_label file. Previously, ReadRecord() could be called to parse the checkpoint record without ThisTimeLineID having been initialized. Now, the timeline is passed down, and I didn't want to pass an uninitialized variable; this change lets us avoid that. The old coding didn't seem to have any practical consequences that we need to worry about, but this is cleaner. - In BootstrapXLOG(), it's just a constant. Patch by me, reviewed and tested by Michael Paquier, Amul Sul, and Álvaro Herrera. Discussion: https://postgr.es/m/CA+TgmobfAAqhfWa1kaFBBFvX+5CjM=7TE=n4r4Q1o2bjbGYBpA@mail.gmail.com
This commit is contained in:
parent
e997a0c642
commit
4a92a1c3d1
File diff suppressed because it is too large
Load Diff
@ -261,7 +261,7 @@ extern void XLogFlush(XLogRecPtr RecPtr);
|
|||||||
extern bool XLogBackgroundFlush(void);
|
extern bool XLogBackgroundFlush(void);
|
||||||
extern bool XLogNeedsFlush(XLogRecPtr RecPtr);
|
extern bool XLogNeedsFlush(XLogRecPtr RecPtr);
|
||||||
extern int XLogFileInit(XLogSegNo segno, TimeLineID tli);
|
extern int XLogFileInit(XLogSegNo segno, TimeLineID tli);
|
||||||
extern int XLogFileOpen(XLogSegNo segno);
|
extern int XLogFileOpen(XLogSegNo segno, TimeLineID tli);
|
||||||
|
|
||||||
extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli);
|
extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli);
|
||||||
extern XLogSegNo XLogGetLastRemovedSegno(void);
|
extern XLogSegNo XLogGetLastRemovedSegno(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user