PostgreSQL Source Code git master
Loading...
Searching...
No Matches
multixact.h
Go to the documentation of this file.
1/*
2 * multixact.h
3 *
4 * PostgreSQL multi-transaction-log manager
5 *
6 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * src/include/access/multixact.h
10 */
11#ifndef MULTIXACT_H
12#define MULTIXACT_H
13
14#include "access/transam.h"
15#include "access/xlogreader.h"
16#include "lib/stringinfo.h"
17#include "storage/sync.h"
18
19
20/*
21 * The first two MultiXactId values are reserved to store the truncation Xid
22 * and epoch of the first segment, so we start assigning multixact values from
23 * 2.
24 */
25#define InvalidMultiXactId ((MultiXactId) 0)
26#define FirstMultiXactId ((MultiXactId) 1)
27#define MaxMultiXactId ((MultiXactId) 0xFFFFFFFF)
28
29#define MultiXactIdIsValid(multi) ((multi) != InvalidMultiXactId)
30
31/*
32 * Possible multixact lock modes ("status"). The first four modes are for
33 * tuple locks (FOR KEY SHARE, FOR SHARE, FOR NO KEY UPDATE, FOR UPDATE); the
34 * next two are used for update and delete modes.
35 */
36typedef enum
37{
42 /* an update that doesn't touch "key" columns */
44 /* other updates, and delete */
47
48#define MaxMultiXactStatus MultiXactStatusUpdate
49
50/* does a status value correspond to a tuple update? */
51#define ISUPDATE_from_mxstatus(status) \
52 ((status) > MultiXactStatusForUpdate)
53
54
60
61
62/* ----------------
63 * multixact-related XLOG entries
64 * ----------------
65 */
66
67#define XLOG_MULTIXACT_ZERO_OFF_PAGE 0x00
68#define XLOG_MULTIXACT_ZERO_MEM_PAGE 0x10
69#define XLOG_MULTIXACT_CREATE_ID 0x20
70#define XLOG_MULTIXACT_TRUNCATE_ID 0x30
71
72typedef struct xl_multixact_create
73{
74 MultiXactId mid; /* new MultiXact's ID */
75 MultiXactOffset moff; /* its starting offset in members file */
76 int32 nmembers; /* number of member XIDs */
79
80#define SizeOfMultiXactCreate (offsetof(xl_multixact_create, members))
81
83{
85
86 /* truncate multixact offsets older than this */
88
89 /* truncate multixact members older than this */
92
93#define SizeOfMultiXactTruncate (sizeof(xl_multixact_truncate))
94
95
100 MultiXactStatus status);
101extern MultiXactId MultiXactIdCreateFromMembers(int nmembers,
102 MultiXactMember *members);
103
106extern bool MultiXactIdIsRunning(MultiXactId multi, bool isLockOnly);
107extern void MultiXactIdSetOldestMember(void);
108extern int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members,
109 bool from_pgupgrade, bool isLockOnly);
110extern void GetMultiXactInfo(uint32 *multixacts, MultiXactOffset *nextOffset,
111 MultiXactId *oldestMultiXactId,
112 MultiXactOffset *oldestOffset);
116
117extern int multixactoffsetssyncfiletag(const FileTag *ftag, char *path);
118extern int multixactmemberssyncfiletag(const FileTag *ftag, char *path);
119
120extern void AtEOXact_MultiXact(void);
121extern void AtPrepare_MultiXact(void);
123
124extern void BootStrapMultiXact(void);
125extern void StartupMultiXact(void);
126extern void TrimMultiXact(void);
129extern void MultiXactGetCheckptMulti(bool is_shutdown,
130 MultiXactId *nextMulti,
131 MultiXactOffset *nextMultiOffset,
132 MultiXactId *oldestMulti,
133 Oid *oldestMultiDB);
134extern void CheckPointMultiXact(void);
138extern void MultiXactSetNextMXact(MultiXactId nextMulti,
139 MultiXactOffset nextMultiOffset);
142extern void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB);
143extern int MultiXactMemberFreezeThreshold(void);
144
146 void *recdata, uint32 len);
148 void *recdata, uint32 len);
150 void *recdata, uint32 len);
151
152extern void multixact_redo(XLogReaderState *record);
153extern void multixact_desc(StringInfo buf, XLogReaderState *record);
154extern const char *multixact_identify(uint8 info);
155extern char *mxid_to_string(MultiXactId multi, int nmembers,
156 MultiXactMember *members);
157extern char *mxstatus_to_string(MultiXactStatus status);
158
159#endif /* MULTIXACT_H */
static int32 next
Definition blutils.c:225
uint8_t uint8
Definition c.h:622
TransactionId MultiXactId
Definition c.h:746
#define FLEXIBLE_ARRAY_MEMBER
Definition c.h:558
uint64 MultiXactOffset
Definition c.h:748
int32_t int32
Definition c.h:620
uint16_t uint16
Definition c.h:623
uint32_t uint32
Definition c.h:624
uint32 TransactionId
Definition c.h:736
MultiXactId MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status)
Definition multixact.c:411
void ReadMultiXactIdRange(MultiXactId *oldest, MultiXactId *next)
Definition multixact.c:696
bool MultiXactIdPrecedes(MultiXactId multi1, MultiXactId multi2)
Definition multixact.c:2865
char * mxstatus_to_string(MultiXactStatus status)
Definition multixact.c:1574
void multixact_redo(XLogReaderState *record)
Definition multixact.c:2915
MultiXactStatus
Definition multixact.h:37
@ MultiXactStatusForShare
Definition multixact.h:39
@ MultiXactStatusForNoKeyUpdate
Definition multixact.h:40
@ MultiXactStatusNoKeyUpdate
Definition multixact.h:43
@ MultiXactStatusUpdate
Definition multixact.h:45
@ MultiXactStatusForUpdate
Definition multixact.h:41
@ MultiXactStatusForKeyShare
Definition multixact.h:38
void multixact_twophase_postcommit(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition multixact.c:1740
int multixactoffsetssyncfiletag(const FileTag *ftag, char *path)
Definition multixact.c:3002
void PostPrepare_MultiXact(FullTransactionId fxid)
Definition multixact.c:1670
void MultiXactSetNextMXact(MultiXactId nextMulti, MultiXactOffset nextMultiOffset)
Definition multixact.c:2063
void AtPrepare_MultiXact(void)
Definition multixact.c:1656
bool MultiXactIdPrecedesOrEquals(MultiXactId multi1, MultiXactId multi2)
Definition multixact.c:2879
void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB)
Definition multixact.c:2266
void GetMultiXactInfo(uint32 *multixacts, MultiXactOffset *nextOffset, MultiXactId *oldestMultiXactId, MultiXactOffset *oldestOffset)
Definition multixact.c:2546
bool MultiXactIdIsRunning(MultiXactId multi, bool isLockOnly)
Definition multixact.c:522
void MultiXactIdSetOldestMember(void)
Definition multixact.c:596
void multixact_desc(StringInfo buf, XLogReaderState *record)
Definition mxactdesc.c:50
void MultiXactGetCheckptMulti(bool is_shutdown, MultiXactId *nextMulti, MultiXactOffset *nextMultiOffset, MultiXactId *oldestMulti, Oid *oldestMultiDB)
Definition multixact.c:2017
int multixactmemberssyncfiletag(const FileTag *ftag, char *path)
Definition multixact.c:3011
MultiXactId GetOldestMultiXactId(void)
Definition multixact.c:2378
void CheckPointMultiXact(void)
Definition multixact.c:2039
MultiXactId MultiXactIdCreateFromMembers(int nmembers, MultiXactMember *members)
Definition multixact.c:715
void TrimMultiXact(void)
Definition multixact.c:1904
char * mxid_to_string(MultiXactId multi, int nmembers, MultiXactMember *members)
Definition multixact.c:1597
void multixact_twophase_postabort(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition multixact.c:1755
int MultiXactMemberFreezeThreshold(void)
Definition multixact.c:2590
void MultiXactAdvanceNextMXact(MultiXactId minMulti, MultiXactOffset minMultiOffset)
Definition multixact.c:2239
MultiXactId ReadNextMultiXactId(void)
Definition multixact.c:679
void BootStrapMultiXact(void)
Definition multixact.c:1863
void multixact_twophase_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition multixact.c:1719
MultiXactId MultiXactIdCreate(TransactionId xid1, MultiXactStatus status1, TransactionId xid2, MultiXactStatus status2)
Definition multixact.c:358
void TruncateMultiXact(MultiXactId newOldestMulti, Oid newOldestMultiDB)
Definition multixact.c:2678
const char * multixact_identify(uint8 info)
Definition mxactdesc.c:83
void AtEOXact_MultiXact(void)
Definition multixact.c:1628
void StartupMultiXact(void)
Definition multixact.c:1879
void SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid)
Definition multixact.c:2085
int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, bool from_pgupgrade, bool isLockOnly)
Definition multixact.c:1172
const void size_t len
static char buf[DEFAULT_XLOG_SEG_SIZE]
unsigned int Oid
static int fb(int x)
Definition sync.h:51
TransactionId xid
Definition multixact.h:57
MultiXactStatus status
Definition multixact.h:58
MultiXactId mid
Definition multixact.h:74
MultiXactMember members[FLEXIBLE_ARRAY_MEMBER]
Definition multixact.h:77
MultiXactOffset moff
Definition multixact.h:75
MultiXactOffset oldestOffset
Definition multixact.h:90
MultiXactId oldestMulti
Definition multixact.h:87