mirror of
https://github.com/postgres/postgres.git
synced 2025-10-18 04:29:09 +03:00
Remove rm_safe_restartpoint machinery.
It is no longer used, none of the resource managers have multi-record actions that would make it unsafe to perform a restartpoint. Also don't allow rm_cleanup to write WAL records, it's also no longer required. Move the call to rm_cleanup routines to make it more symmetric with rm_startup.
This commit is contained in:
@@ -7143,6 +7143,13 @@ StartupXLOG(void)
|
||||
recoveryPausesHere();
|
||||
}
|
||||
|
||||
/* Allow resource managers to do any required cleanup. */
|
||||
for (rmid = 0; rmid <= RM_MAX_ID; rmid++)
|
||||
{
|
||||
if (RmgrTable[rmid].rm_cleanup != NULL)
|
||||
RmgrTable[rmid].rm_cleanup();
|
||||
}
|
||||
|
||||
ereport(LOG,
|
||||
(errmsg("redo done at %X/%X",
|
||||
(uint32) (ReadRecPtr >> 32), (uint32) ReadRecPtr)));
|
||||
@@ -7368,27 +7375,6 @@ StartupXLOG(void)
|
||||
|
||||
if (InRecovery)
|
||||
{
|
||||
int rmid;
|
||||
|
||||
/*
|
||||
* Resource managers might need to write WAL records, eg, to record
|
||||
* index cleanup actions. So temporarily enable XLogInsertAllowed in
|
||||
* this process only.
|
||||
*/
|
||||
LocalSetXLogInsertAllowed();
|
||||
|
||||
/*
|
||||
* Allow resource managers to do any required cleanup.
|
||||
*/
|
||||
for (rmid = 0; rmid <= RM_MAX_ID; rmid++)
|
||||
{
|
||||
if (RmgrTable[rmid].rm_cleanup != NULL)
|
||||
RmgrTable[rmid].rm_cleanup();
|
||||
}
|
||||
|
||||
/* Disallow XLogInsert again */
|
||||
LocalXLogInsertAllowed = -1;
|
||||
|
||||
/*
|
||||
* Perform a checkpoint to update all our recovery activity to disk.
|
||||
*
|
||||
@@ -8750,31 +8736,9 @@ CheckPointGuts(XLogRecPtr checkPointRedo, int flags)
|
||||
static void
|
||||
RecoveryRestartPoint(const CheckPoint *checkPoint)
|
||||
{
|
||||
int rmid;
|
||||
|
||||
/* use volatile pointer to prevent code rearrangement */
|
||||
volatile XLogCtlData *xlogctl = XLogCtl;
|
||||
|
||||
/*
|
||||
* Is it safe to restartpoint? We must ask each of the resource managers
|
||||
* whether they have any partial state information that might prevent a
|
||||
* correct restart from this point. If so, we skip this opportunity, but
|
||||
* return at the next checkpoint record for another try.
|
||||
*/
|
||||
for (rmid = 0; rmid <= RM_MAX_ID; rmid++)
|
||||
{
|
||||
if (RmgrTable[rmid].rm_safe_restartpoint != NULL)
|
||||
if (!(RmgrTable[rmid].rm_safe_restartpoint()))
|
||||
{
|
||||
elog(trace_recovery(DEBUG2),
|
||||
"RM %d not safe to record restart point at %X/%X",
|
||||
rmid,
|
||||
(uint32) (checkPoint->redo >> 32),
|
||||
(uint32) checkPoint->redo);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Also refrain from creating a restartpoint if we have seen any
|
||||
* references to non-existent pages. Restarting recovery from the
|
||||
|
Reference in New Issue
Block a user