mirror of
https://github.com/postgres/postgres.git
synced 2025-07-18 17:42:25 +03:00
Fix incomplete backpatch of pg_multixact truncation changes to <= 9.2
The backpatch of a95335b544d9c8377e9dc7a399d8e9a155895f82 to 9.2, 9.1 and 9.0 was incomplete, missing changes to xlog.c, primarily the call to TrimMultiXact(). Testing presumably didn't show a problem without these changes because TrimMultiXact() performs defense-in-depth work, which is not strictly necessary. It also missed moving StartupMultiXact() which would have been problematic if a restartpoing happened in exactly the wrong moment, causing a transient error. Andres Freund
This commit is contained in:
@ -5991,6 +5991,12 @@ StartupXLOG(void)
|
|||||||
XLogCtl->ckptXidEpoch = checkPoint.nextXidEpoch;
|
XLogCtl->ckptXidEpoch = checkPoint.nextXidEpoch;
|
||||||
XLogCtl->ckptXid = checkPoint.nextXid;
|
XLogCtl->ckptXid = checkPoint.nextXid;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Startup MultiXact. We need to do this early because we need its state
|
||||||
|
* initialized because we attempt truncation during restartpoints.
|
||||||
|
*/
|
||||||
|
StartupMultiXact();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We must replay WAL entries using the same TimeLineID they were created
|
* We must replay WAL entries using the same TimeLineID they were created
|
||||||
* under, so temporarily adopt the TLI indicated by the checkpoint (see
|
* under, so temporarily adopt the TLI indicated by the checkpoint (see
|
||||||
@ -6121,8 +6127,9 @@ StartupXLOG(void)
|
|||||||
ProcArrayInitRecovery(ShmemVariableCache->nextXid);
|
ProcArrayInitRecovery(ShmemVariableCache->nextXid);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Startup commit log and subtrans only. Other SLRUs are not
|
* Startup commit log and subtrans only. MultiXact has already
|
||||||
* maintained during recovery and need not be started yet.
|
* been started up and other SLRUs are not maintained during
|
||||||
|
* recovery and need not be started yet.
|
||||||
*/
|
*/
|
||||||
StartupCLOG();
|
StartupCLOG();
|
||||||
StartupSUBTRANS(oldestActiveXID);
|
StartupSUBTRANS(oldestActiveXID);
|
||||||
@ -6593,7 +6600,7 @@ StartupXLOG(void)
|
|||||||
/*
|
/*
|
||||||
* Perform end of recovery actions for any SLRUs that need it.
|
* Perform end of recovery actions for any SLRUs that need it.
|
||||||
*/
|
*/
|
||||||
StartupMultiXact();
|
TrimMultiXact();
|
||||||
TrimCLOG();
|
TrimCLOG();
|
||||||
|
|
||||||
/* Reload shared-memory state for prepared transactions */
|
/* Reload shared-memory state for prepared transactions */
|
||||||
|
@ -59,6 +59,7 @@ extern Size MultiXactShmemSize(void);
|
|||||||
extern void MultiXactShmemInit(void);
|
extern void MultiXactShmemInit(void);
|
||||||
extern void BootStrapMultiXact(void);
|
extern void BootStrapMultiXact(void);
|
||||||
extern void StartupMultiXact(void);
|
extern void StartupMultiXact(void);
|
||||||
|
extern void TrimMultiXact(void);
|
||||||
extern void ShutdownMultiXact(void);
|
extern void ShutdownMultiXact(void);
|
||||||
extern void MultiXactGetCheckptMulti(bool is_shutdown,
|
extern void MultiXactGetCheckptMulti(bool is_shutdown,
|
||||||
MultiXactId *nextMulti,
|
MultiXactId *nextMulti,
|
||||||
|
Reference in New Issue
Block a user