diff options
author | Heikki Linnakangas | 2021-07-31 06:50:26 +0000 |
---|---|---|
committer | Heikki Linnakangas | 2021-07-31 06:50:26 +0000 |
commit | 317632f3073fc06047a42075eb5e28a9577a4f96 (patch) | |
tree | a9d01818156027ccafe91e2110feadb9c012b8d4 | |
parent | 4fe8dcdff3af73f6ca16eb3edfa3339c7ee0d2c4 (diff) |
Move InRecovery and standbyState global vars to xlogutils.c.
They are used in code that runs both during normal operation and during
WAL replay, and needs to behave differently during replay. Move them to
xlogutils.c, because that's where we have other helper functions used by
redo routines.
Reviewed-by: Andres Freund
Discussion: https://www.postgresql.org/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi
-rw-r--r-- | src/backend/access/heap/visibilitymap.c | 2 | ||||
-rw-r--r-- | src/backend/access/transam/commit_ts.c | 1 | ||||
-rw-r--r-- | src/backend/access/transam/multixact.c | 2 | ||||
-rw-r--r-- | src/backend/access/transam/slru.c | 1 | ||||
-rw-r--r-- | src/backend/access/transam/varsup.c | 2 | ||||
-rw-r--r-- | src/backend/access/transam/xlog.c | 16 | ||||
-rw-r--r-- | src/backend/access/transam/xlogutils.c | 20 | ||||
-rw-r--r-- | src/backend/commands/tablespace.c | 2 | ||||
-rw-r--r-- | src/backend/postmaster/startup.c | 1 | ||||
-rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 2 | ||||
-rw-r--r-- | src/backend/storage/ipc/procarray.c | 2 | ||||
-rw-r--r-- | src/backend/storage/ipc/standby.c | 2 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lock.c | 1 | ||||
-rw-r--r-- | src/backend/storage/lmgr/proc.c | 2 | ||||
-rw-r--r-- | src/backend/storage/smgr/smgr.c | 2 | ||||
-rw-r--r-- | src/include/access/xlog.h | 42 | ||||
-rw-r--r-- | src/include/access/xlogutils.h | 42 |
17 files changed, 75 insertions, 67 deletions
diff --git a/src/backend/access/heap/visibilitymap.c b/src/backend/access/heap/visibilitymap.c index 4720b35ee5..114fbbdd30 100644 --- a/src/backend/access/heap/visibilitymap.c +++ b/src/backend/access/heap/visibilitymap.c @@ -88,7 +88,7 @@ #include "access/heapam_xlog.h" #include "access/visibilitymap.h" -#include "access/xlog.h" +#include "access/xlogutils.h" #include "miscadmin.h" #include "port/pg_bitutils.h" #include "storage/bufmgr.h" diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index 0985fa155c..42ea8e53f2 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -28,6 +28,7 @@ #include "access/htup_details.h" #include "access/slru.h" #include "access/transam.h" +#include "access/xlogutils.h" #include "catalog/pg_type.h" #include "funcapi.h" #include "miscadmin.h" diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index b643564f16..e6c70ed0bc 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -74,8 +74,8 @@ #include "access/twophase.h" #include "access/twophase_rmgr.h" #include "access/xact.h" -#include "access/xlog.h" #include "access/xloginsert.h" +#include "access/xlogutils.h" #include "catalog/pg_type.h" #include "commands/dbcommands.h" #include "funcapi.h" diff --git a/src/backend/access/transam/slru.c b/src/backend/access/transam/slru.c index 82149ad782..7585ae24ce 100644 --- a/src/backend/access/transam/slru.c +++ b/src/backend/access/transam/slru.c @@ -54,6 +54,7 @@ #include "access/slru.h" #include "access/transam.h" #include "access/xlog.h" +#include "access/xlogutils.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/fd.h" diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index 5b4898bb78..a6e98e71bd 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -18,7 +18,7 @@ #include "access/subtrans.h" #include "access/transam.h" #include "access/xact.h" -#include "access/xlog.h" +#include "access/xlogutils.h" #include "commands/dbcommands.h" #include "miscadmin.h" #include "postmaster/autovacuum.h" diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 1e601d6282..efb3ca273e 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -193,22 +193,6 @@ CheckpointStatsData CheckpointStats; */ TimeLineID ThisTimeLineID = 0; -/* - * Are we doing recovery from XLOG? - * - * This is only ever true in the startup process; it should be read as meaning - * "this process is replaying WAL records", rather than "the system is in - * recovery mode". It should be examined primarily by functions that need - * to act differently when called from a WAL redo function (e.g., to skip WAL - * logging). To check whether the system is in recovery regardless of which - * process you're running in, use RecoveryInProgress() but only after shared - * memory startup and lock initialization. - */ -bool InRecovery = false; - -/* Are we in Hot Standby mode? Only valid in startup process, see xlog.h */ -HotStandbyState standbyState = STANDBY_DISABLED; - static XLogRecPtr LastRec; /* Local copy of WalRcv->flushedUpto */ diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index d17d660f46..b1702bc6be 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -25,6 +25,7 @@ #include "access/xlogutils.h" #include "miscadmin.h" #include "pgstat.h" +#include "storage/fd.h" #include "storage/smgr.h" #include "utils/guc.h" #include "utils/hsearch.h" @@ -35,6 +36,25 @@ bool ignore_invalid_pages = false; /* + * Are we doing recovery from XLOG? + * + * This is only ever true in the startup process; it should be read as meaning + * "this process is replaying WAL records", rather than "the system is in + * recovery mode". It should be examined primarily by functions that need + * to act differently when called from a WAL redo function (e.g., to skip WAL + * logging). To check whether the system is in recovery regardless of which + * process you're running in, use RecoveryInProgress() but only after shared + * memory startup and lock initialization. + * + * This is updated from xlog.c, but lives here because it's mostly read by + * WAL redo functions. + */ +bool InRecovery = false; + +/* Are we in Hot Standby mode? Only valid in startup process, see xlogutils.h */ +HotStandbyState standbyState = STANDBY_DISABLED; + +/* * During XLOG replay, we may see XLOG records for incremental updates of * pages that no longer exist, because their relation was later dropped or * truncated. (Note: this is only possible when full_page_writes = OFF, diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 0385fd6121..a54239a8b3 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -56,8 +56,8 @@ #include "access/sysattr.h" #include "access/tableam.h" #include "access/xact.h" -#include "access/xlog.h" #include "access/xloginsert.h" +#include "access/xlogutils.h" #include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/indexing.h" diff --git a/src/backend/postmaster/startup.c b/src/backend/postmaster/startup.c index 69077bd207..0f4f00d689 100644 --- a/src/backend/postmaster/startup.c +++ b/src/backend/postmaster/startup.c @@ -20,6 +20,7 @@ #include "postgres.h" #include "access/xlog.h" +#include "access/xlogutils.h" #include "libpq/pqsignal.h" #include "miscadmin.h" #include "pgstat.h" diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 86ef607ff3..33d99f604a 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -34,7 +34,7 @@ #include <unistd.h> #include "access/tableam.h" -#include "access/xlog.h" +#include "access/xlogutils.h" #include "catalog/catalog.h" #include "catalog/storage.h" #include "executor/instrument.h" diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 09c97c58b8..c7816fcfb3 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -52,7 +52,7 @@ #include "access/transam.h" #include "access/twophase.h" #include "access/xact.h" -#include "access/xlog.h" +#include "access/xlogutils.h" #include "catalog/catalog.h" #include "catalog/pg_authid.h" #include "commands/dbcommands.h" diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index aeecaf6cab..077251c1a6 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -19,8 +19,8 @@ #include "access/transam.h" #include "access/twophase.h" #include "access/xact.h" -#include "access/xlog.h" #include "access/xloginsert.h" +#include "access/xlogutils.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/bufmgr.h" diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 8c2138f107..364654e106 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -37,6 +37,7 @@ #include "access/twophase_rmgr.h" #include "access/xact.h" #include "access/xlog.h" +#include "access/xlogutils.h" #include "miscadmin.h" #include "pg_trace.h" #include "pgstat.h" diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 2575ea1ca0..b7d9da0aa9 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -37,7 +37,7 @@ #include "access/transam.h" #include "access/twophase.h" -#include "access/xact.h" +#include "access/xlogutils.h" #include "miscadmin.h" #include "pgstat.h" #include "postmaster/autovacuum.h" diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 4dc24649df..0fcef4994b 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -17,7 +17,7 @@ */ #include "postgres.h" -#include "access/xlog.h" +#include "access/xlogutils.h" #include "lib/ilist.h" #include "storage/bufmgr.h" #include "storage/ipc.h" diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index ccfcf43d62..0a8ede700d 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -32,48 +32,6 @@ extern int sync_method; extern PGDLLIMPORT TimeLineID ThisTimeLineID; /* current TLI */ /* - * Prior to 8.4, all activity during recovery was carried out by the startup - * process. This local variable continues to be used in many parts of the - * code to indicate actions taken by RecoveryManagers. Other processes that - * potentially perform work during recovery should check RecoveryInProgress(). - * See XLogCtl notes in xlog.c. - */ -extern bool InRecovery; - -/* - * Like InRecovery, standbyState is only valid in the startup process. - * In all other processes it will have the value STANDBY_DISABLED (so - * InHotStandby will read as false). - * - * In DISABLED state, we're performing crash recovery or hot standby was - * disabled in postgresql.conf. - * - * In INITIALIZED state, we've run InitRecoveryTransactionEnvironment, but - * we haven't yet processed a RUNNING_XACTS or shutdown-checkpoint WAL record - * to initialize our primary-transaction tracking system. - * - * When the transaction tracking is initialized, we enter the SNAPSHOT_PENDING - * state. The tracked information might still be incomplete, so we can't allow - * connections yet, but redo functions must update the in-memory state when - * appropriate. - * - * In SNAPSHOT_READY mode, we have full knowledge of transactions that are - * (or were) running on the primary at the current WAL location. Snapshots - * can be taken, and read-only queries can be run. - */ -typedef enum -{ - STANDBY_DISABLED, - STANDBY_INITIALIZED, - STANDBY_SNAPSHOT_PENDING, - STANDBY_SNAPSHOT_READY -} HotStandbyState; - -extern HotStandbyState standbyState; - -#define InHotStandby (standbyState >= STANDBY_SNAPSHOT_PENDING) - -/* * Recovery target type. * Only set during a Point in Time recovery, not when in standby mode. */ diff --git a/src/include/access/xlogutils.h b/src/include/access/xlogutils.h index 9ac602b674..a5cb3d322c 100644 --- a/src/include/access/xlogutils.h +++ b/src/include/access/xlogutils.h @@ -14,6 +14,48 @@ #include "access/xlogreader.h" #include "storage/bufmgr.h" +/* + * Prior to 8.4, all activity during recovery was carried out by the startup + * process. This local variable continues to be used in many parts of the + * code to indicate actions taken by RecoveryManagers. Other processes that + * potentially perform work during recovery should check RecoveryInProgress(). + * See XLogCtl notes in xlog.c. + */ +extern bool InRecovery; + +/* + * Like InRecovery, standbyState is only valid in the startup process. + * In all other processes it will have the value STANDBY_DISABLED (so + * InHotStandby will read as false). + * + * In DISABLED state, we're performing crash recovery or hot standby was + * disabled in postgresql.conf. + * + * In INITIALIZED state, we've run InitRecoveryTransactionEnvironment, but + * we haven't yet processed a RUNNING_XACTS or shutdown-checkpoint WAL record + * to initialize our primary-transaction tracking system. + * + * When the transaction tracking is initialized, we enter the SNAPSHOT_PENDING + * state. The tracked information might still be incomplete, so we can't allow + * connections yet, but redo functions must update the in-memory state when + * appropriate. + * + * In SNAPSHOT_READY mode, we have full knowledge of transactions that are + * (or were) running on the primary at the current WAL location. Snapshots + * can be taken, and read-only queries can be run. + */ +typedef enum +{ + STANDBY_DISABLED, + STANDBY_INITIALIZED, + STANDBY_SNAPSHOT_PENDING, + STANDBY_SNAPSHOT_READY +} HotStandbyState; + +extern HotStandbyState standbyState; + +#define InHotStandby (standbyState >= STANDBY_SNAPSHOT_PENDING) + extern bool XLogHaveInvalidPages(void); extern void XLogCheckInvalidPages(void); |