db_state_for_shutdown_in_recovery_v1.patch
application/octet-stream
Filename: db_state_for_shutdown_in_recovery_v1.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 14 | 0 |
| src/bin/pg_controldata/pg_controldata.c | 2 | 0 |
| src/include/catalog/pg_control.h | 1 | 0 |
*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
***************
*** 5663,5668 **** StartupXLOG(void)
--- 5663,5672 ----
ereport(LOG,
(errmsg("database system was shut down at %s",
str_time(ControlFile->time))));
+ else if (ControlFile->state == DB_SHUTDOWNED_IN_RECOVERY)
+ ereport(LOG,
+ (errmsg("database system was shut down in recovery at %s",
+ str_time(ControlFile->time))));
else if (ControlFile->state == DB_SHUTDOWNING)
ereport(LOG,
(errmsg("database system shutdown was interrupted; last known up at %s",
***************
*** 7550,7555 **** CreateRestartPoint(int flags)
--- 7554,7567 ----
lastCheckPoint.redo.xlogid, lastCheckPoint.redo.xrecoff)));
UpdateMinRecoveryPoint(InvalidXLogRecPtr, true);
+ if (flags & CHECKPOINT_IS_SHUTDOWN)
+ {
+ LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
+ ControlFile->state = DB_SHUTDOWNED_IN_RECOVERY;
+ ControlFile->time = (pg_time_t) time(NULL);
+ UpdateControlFile();
+ LWLockRelease(ControlFileLock);
+ }
LWLockRelease(CheckpointLock);
return false;
}
***************
*** 7587,7592 **** CreateRestartPoint(int flags)
--- 7599,7606 ----
ControlFile->checkPoint = lastCheckPointRecPtr;
ControlFile->checkPointCopy = lastCheckPoint;
ControlFile->time = (pg_time_t) time(NULL);
+ if (flags & CHECKPOINT_IS_SHUTDOWN)
+ ControlFile->state = DB_SHUTDOWNED_IN_RECOVERY;
UpdateControlFile();
}
LWLockRelease(ControlFileLock);
*** a/src/bin/pg_controldata/pg_controldata.c
--- b/src/bin/pg_controldata/pg_controldata.c
***************
*** 57,62 **** dbState(DBState state)
--- 57,64 ----
return _("starting up");
case DB_SHUTDOWNED:
return _("shut down");
+ case DB_SHUTDOWNED_IN_RECOVERY:
+ return _("shut down in recovery");
case DB_SHUTDOWNING:
return _("shutting down");
case DB_IN_CRASH_RECOVERY:
*** a/src/include/catalog/pg_control.h
--- b/src/include/catalog/pg_control.h
***************
*** 65,70 **** typedef enum DBState
--- 65,71 ----
{
DB_STARTUP = 0,
DB_SHUTDOWNED,
+ DB_SHUTDOWNED_IN_RECOVERY,
DB_SHUTDOWNING,
DB_IN_CRASH_RECOVERY,
DB_IN_ARCHIVE_RECOVERY,