PostgreSQL Source Code git master
Loading...
Searching...
No Matches
standbydefs.h File Reference
#include "access/xlogreader.h"
#include "lib/stringinfo.h"
#include "storage/lockdefs.h"
#include "storage/sinval.h"
Include dependency graph for standbydefs.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  xl_standby_locks
 
struct  xl_running_xacts
 
struct  xl_invalidations
 

Macros

#define XLOG_STANDBY_LOCK   0x00
 
#define XLOG_RUNNING_XACTS   0x10
 
#define XLOG_INVALIDATIONS   0x20
 
#define MinSizeOfInvalidations   offsetof(xl_invalidations, msgs)
 

Typedefs

typedef struct xl_standby_locks xl_standby_locks
 
typedef struct xl_running_xacts xl_running_xacts
 
typedef struct xl_invalidations xl_invalidations
 

Functions

void standby_redo (XLogReaderState *record)
 
void standby_desc (StringInfo buf, XLogReaderState *record)
 
const charstandby_identify (uint8 info)
 
void standby_desc_invalidations (StringInfo buf, int nmsgs, SharedInvalidationMessage *msgs, Oid dbId, Oid tsId, bool relcacheInitFileInval)
 

Macro Definition Documentation

◆ MinSizeOfInvalidations

#define MinSizeOfInvalidations   offsetof(xl_invalidations, msgs)

Definition at line 73 of file standbydefs.h.

◆ XLOG_INVALIDATIONS

#define XLOG_INVALIDATIONS   0x20

Definition at line 36 of file standbydefs.h.

◆ XLOG_RUNNING_XACTS

#define XLOG_RUNNING_XACTS   0x10

Definition at line 35 of file standbydefs.h.

◆ XLOG_STANDBY_LOCK

#define XLOG_STANDBY_LOCK   0x00

Definition at line 34 of file standbydefs.h.

Typedef Documentation

◆ xl_invalidations

◆ xl_running_xacts

◆ xl_standby_locks

Function Documentation

◆ standby_desc()

void standby_desc ( StringInfo  buf,
XLogReaderState record 
)
extern

Definition at line 49 of file standbydesc.c.

50{
51 char *rec = XLogRecGetData(record);
52 uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
53
54 if (info == XLOG_STANDBY_LOCK)
55 {
57 int i;
58
59 for (i = 0; i < xlrec->nlocks; i++)
60 appendStringInfo(buf, "xid %u db %u rel %u ",
61 xlrec->locks[i].xid, xlrec->locks[i].dbOid,
62 xlrec->locks[i].relOid);
63 }
64 else if (info == XLOG_RUNNING_XACTS)
65 {
67
69 }
70 else if (info == XLOG_INVALIDATIONS)
71 {
73
75 xlrec->dbId, xlrec->tsId,
76 xlrec->relcacheInitFileInval);
77 }
78}
uint8_t uint8
Definition c.h:622
int i
Definition isn.c:77
static char buf[DEFAULT_XLOG_SEG_SIZE]
static int fb(int x)
#define XLOG_INVALIDATIONS
Definition standbydefs.h:36
#define XLOG_STANDBY_LOCK
Definition standbydefs.h:34
#define XLOG_RUNNING_XACTS
Definition standbydefs.h:35
void standby_desc_invalidations(StringInfo buf, int nmsgs, SharedInvalidationMessage *msgs, Oid dbId, Oid tsId, bool relcacheInitFileInval)
static void standby_desc_running_xacts(StringInfo buf, xl_running_xacts *xlrec)
Definition standbydesc.c:20
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition stringinfo.c:145
#define XLogRecGetInfo(decoder)
Definition xlogreader.h:410
#define XLogRecGetData(decoder)
Definition xlogreader.h:415

References appendStringInfo(), buf, fb(), i, standby_desc_invalidations(), standby_desc_running_xacts(), XLOG_INVALIDATIONS, XLOG_RUNNING_XACTS, XLOG_STANDBY_LOCK, XLogRecGetData, and XLogRecGetInfo.

◆ standby_desc_invalidations()

void standby_desc_invalidations ( StringInfo  buf,
int  nmsgs,
SharedInvalidationMessage msgs,
Oid  dbId,
Oid  tsId,
bool  relcacheInitFileInval 
)
extern

Definition at line 103 of file standbydesc.c.

107{
108 int i;
109
110 /* Do nothing if there are no invalidation messages */
111 if (nmsgs <= 0)
112 return;
113
114 if (relcacheInitFileInval)
115 appendStringInfo(buf, "; relcache init file inval dbid %u tsid %u",
116 dbId, tsId);
117
118 appendStringInfoString(buf, "; inval msgs:");
119 for (i = 0; i < nmsgs; i++)
120 {
121 SharedInvalidationMessage *msg = &msgs[i];
122
123 if (msg->id >= 0)
124 appendStringInfo(buf, " catcache %d", msg->id);
125 else if (msg->id == SHAREDINVALCATALOG_ID)
126 appendStringInfo(buf, " catalog %u", msg->cat.catId);
127 else if (msg->id == SHAREDINVALRELCACHE_ID)
128 appendStringInfo(buf, " relcache %u", msg->rc.relId);
129 /* not expected, but print something anyway */
130 else if (msg->id == SHAREDINVALSMGR_ID)
131 appendStringInfoString(buf, " smgr");
132 /* not expected, but print something anyway */
133 else if (msg->id == SHAREDINVALRELMAP_ID)
134 appendStringInfo(buf, " relmap db %u", msg->rm.dbId);
135 else if (msg->id == SHAREDINVALSNAPSHOT_ID)
136 appendStringInfo(buf, " snapshot %u", msg->sn.relId);
137 else if (msg->id == SHAREDINVALRELSYNC_ID)
138 appendStringInfo(buf, " relsync %u", msg->rs.relid);
139 else
140 appendStringInfo(buf, " unrecognized id %d", msg->id);
141 }
142}
#define SHAREDINVALCATALOG_ID
Definition sinval.h:68
#define SHAREDINVALRELSYNC_ID
Definition sinval.h:114
#define SHAREDINVALSMGR_ID
Definition sinval.h:86
#define SHAREDINVALSNAPSHOT_ID
Definition sinval.h:105
#define SHAREDINVALRELCACHE_ID
Definition sinval.h:77
#define SHAREDINVALRELMAP_ID
Definition sinval.h:97
void appendStringInfoString(StringInfo str, const char *s)
Definition stringinfo.c:230
SharedInvalRelcacheMsg rc
Definition sinval.h:129
SharedInvalCatalogMsg cat
Definition sinval.h:128
SharedInvalRelSyncMsg rs
Definition sinval.h:133
SharedInvalSnapshotMsg sn
Definition sinval.h:132
SharedInvalRelmapMsg rm
Definition sinval.h:131

References appendStringInfo(), appendStringInfoString(), buf, SharedInvalidationMessage::cat, SharedInvalCatalogMsg::catId, SharedInvalRelmapMsg::dbId, i, SharedInvalidationMessage::id, SharedInvalidationMessage::rc, SharedInvalRelcacheMsg::relId, SharedInvalSnapshotMsg::relId, SharedInvalRelSyncMsg::relid, SharedInvalidationMessage::rm, SharedInvalidationMessage::rs, SHAREDINVALCATALOG_ID, SHAREDINVALRELCACHE_ID, SHAREDINVALRELMAP_ID, SHAREDINVALRELSYNC_ID, SHAREDINVALSMGR_ID, SHAREDINVALSNAPSHOT_ID, and SharedInvalidationMessage::sn.

Referenced by heap_desc(), standby_desc(), xact_desc(), xact_desc_commit(), and xact_desc_prepare().

◆ standby_identify()

const char * standby_identify ( uint8  info)
extern

Definition at line 81 of file standbydesc.c.

82{
83 const char *id = NULL;
84
85 switch (info & ~XLR_INFO_MASK)
86 {
88 id = "LOCK";
89 break;
91 id = "RUNNING_XACTS";
92 break;
94 id = "INVALIDATIONS";
95 break;
96 }
97
98 return id;
99}
#define XLR_INFO_MASK
Definition xlogrecord.h:62

References fb(), XLOG_INVALIDATIONS, XLOG_RUNNING_XACTS, XLOG_STANDBY_LOCK, and XLR_INFO_MASK.

◆ standby_redo()

void standby_redo ( XLogReaderState record)
extern

Definition at line 1165 of file standby.c.

1166{
1167 uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
1168
1169 /* Backup blocks are not used in standby records */
1171
1172 /* Do nothing if we're not in hot standby mode */
1174 return;
1175
1176 if (info == XLOG_STANDBY_LOCK)
1177 {
1179 int i;
1180
1181 for (i = 0; i < xlrec->nlocks; i++)
1183 xlrec->locks[i].dbOid,
1184 xlrec->locks[i].relOid);
1185 }
1186 else if (info == XLOG_RUNNING_XACTS)
1187 {
1190
1191 /*
1192 * Records issued for specific database are not suitable for physical
1193 * replication because that affects the whole cluster. In particular,
1194 * the list of XID is probably incomplete here.
1195 */
1196 if (OidIsValid(xlrec->dbid))
1197 return;
1198
1199 running.xcnt = xlrec->xcnt;
1200 running.subxcnt = xlrec->subxcnt;
1201 running.subxid_status = xlrec->subxid_overflow ? SUBXIDS_MISSING : SUBXIDS_IN_ARRAY;
1202 running.nextXid = xlrec->nextXid;
1203 running.latestCompletedXid = xlrec->latestCompletedXid;
1204 running.oldestRunningXid = xlrec->oldestRunningXid;
1205 running.xids = xlrec->xids;
1206
1208
1209 /*
1210 * The startup process currently has no convenient way to schedule
1211 * stats to be reported. XLOG_RUNNING_XACTS records issued at a
1212 * regular cadence, making this a convenient location to report stats.
1213 * While these records aren't generated with wal_level=minimal, stats
1214 * also cannot be accessed during WAL replay.
1215 */
1216 pgstat_report_stat(true);
1217 }
1218 else if (info == XLOG_INVALIDATIONS)
1219 {
1221
1223 xlrec->nmsgs,
1224 xlrec->relcacheInitFileInval,
1225 xlrec->dbId,
1226 xlrec->tsId);
1227 }
1228 else
1229 elog(PANIC, "standby_redo: unknown op code %u", info);
1230}
#define Assert(condition)
Definition c.h:943
#define OidIsValid(objectId)
Definition c.h:858
#define PANIC
Definition elog.h:44
#define elog(elevel,...)
Definition elog.h:228
void ProcessCommittedInvalidationMessages(SharedInvalidationMessage *msgs, int nmsgs, bool RelcacheInitFileInval, Oid dbid, Oid tsid)
Definition inval.c:1135
long pgstat_report_stat(bool force)
Definition pgstat.c:722
void ProcArrayApplyRecoveryInfo(RunningTransactions running)
Definition procarray.c:1045
void StandbyAcquireAccessExclusiveLock(TransactionId xid, Oid dbOid, Oid relOid)
Definition standby.c:988
@ SUBXIDS_MISSING
Definition standby.h:122
@ SUBXIDS_IN_ARRAY
Definition standby.h:121
TransactionId oldestRunningXid
Definition standby.h:134
TransactionId nextXid
Definition standby.h:133
TransactionId latestCompletedXid
Definition standby.h:137
subxids_array_status subxid_status
Definition standby.h:132
TransactionId * xids
Definition standby.h:139
#define XLogRecHasAnyBlockRefs(decoder)
Definition xlogreader.h:417
HotStandbyState standbyState
Definition xlogutils.c:53
@ STANDBY_DISABLED
Definition xlogutils.h:52

References Assert, elog, fb(), i, RunningTransactionsData::latestCompletedXid, RunningTransactionsData::nextXid, OidIsValid, RunningTransactionsData::oldestRunningXid, PANIC, pgstat_report_stat(), ProcArrayApplyRecoveryInfo(), ProcessCommittedInvalidationMessages(), STANDBY_DISABLED, StandbyAcquireAccessExclusiveLock(), standbyState, RunningTransactionsData::subxcnt, RunningTransactionsData::subxid_status, SUBXIDS_IN_ARRAY, SUBXIDS_MISSING, RunningTransactionsData::xcnt, RunningTransactionsData::xids, XLOG_INVALIDATIONS, XLOG_RUNNING_XACTS, XLOG_STANDBY_LOCK, XLogRecGetData, XLogRecGetInfo, and XLogRecHasAnyBlockRefs.