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 Size MultiXactShmemSize(void);
125extern void MultiXactShmemInit(void);
126extern void BootStrapMultiXact(void);
127extern void StartupMultiXact(void);
128extern void TrimMultiXact(void);
131extern void MultiXactGetCheckptMulti(bool is_shutdown,
132 MultiXactId *nextMulti,
133 MultiXactOffset *nextMultiOffset,
134 MultiXactId *oldestMulti,
135 Oid *oldestMultiDB);
136extern void CheckPointMultiXact(void);
140extern void MultiXactSetNextMXact(MultiXactId nextMulti,
141 MultiXactOffset nextMultiOffset);
144extern void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB);
145extern int MultiXactMemberFreezeThreshold(void);
146
148 void *recdata, uint32 len);
150 void *recdata, uint32 len);
152 void *recdata, uint32 len);
153
154extern void multixact_redo(XLogReaderState *record);
155extern void multixact_desc(StringInfo buf, XLogReaderState *record);
156extern const char *multixact_identify(uint8 info);
157extern char *mxid_to_string(MultiXactId multi, int nmembers,
158 MultiXactMember *members);
159extern char *mxstatus_to_string(MultiXactStatus status);
160
161#endif /* MULTIXACT_H */
static int32 next
Definition blutils.c:225
uint8_t uint8
Definition c.h:554
TransactionId MultiXactId
Definition c.h:686
#define FLEXIBLE_ARRAY_MEMBER
Definition c.h:490
uint64 MultiXactOffset
Definition c.h:688
int32_t int32
Definition c.h:552
uint16_t uint16
Definition c.h:555
uint32_t uint32
Definition c.h:556
uint32 TransactionId
Definition c.h:676
size_t Size
Definition c.h:629
void MultiXactShmemInit(void)
Definition multixact.c:1724
MultiXactId MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status)
Definition multixact.c:352
void ReadMultiXactIdRange(MultiXactId *oldest, MultiXactId *next)
Definition multixact.c:637
bool MultiXactIdPrecedes(MultiXactId multi1, MultiXactId multi2)
Definition multixact.c:2765
char * mxstatus_to_string(MultiXactStatus status)
Definition multixact.c:1514
void multixact_redo(XLogReaderState *record)
Definition multixact.c:2815
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:1680
int multixactoffsetssyncfiletag(const FileTag *ftag, char *path)
Definition multixact.c:2912
void PostPrepare_MultiXact(FullTransactionId fxid)
Definition multixact.c:1610
void MultiXactSetNextMXact(MultiXactId nextMulti, MultiXactOffset nextMultiOffset)
Definition multixact.c:1992
void AtPrepare_MultiXact(void)
Definition multixact.c:1596
bool MultiXactIdPrecedesOrEquals(MultiXactId multi1, MultiXactId multi2)
Definition multixact.c:2779
void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB)
Definition multixact.c:2191
void GetMultiXactInfo(uint32 *multixacts, MultiXactOffset *nextOffset, MultiXactId *oldestMultiXactId, MultiXactOffset *oldestOffset)
Definition multixact.c:2467
bool MultiXactIdIsRunning(MultiXactId multi, bool isLockOnly)
Definition multixact.c:463
void MultiXactIdSetOldestMember(void)
Definition multixact.c:537
void multixact_desc(StringInfo buf, XLogReaderState *record)
Definition mxactdesc.c:50
Size MultiXactShmemSize(void)
Definition multixact.c:1707
void MultiXactGetCheckptMulti(bool is_shutdown, MultiXactId *nextMulti, MultiXactOffset *nextMultiOffset, MultiXactId *oldestMulti, Oid *oldestMultiDB)
Definition multixact.c:1946
int multixactmemberssyncfiletag(const FileTag *ftag, char *path)
Definition multixact.c:2921
MultiXactId GetOldestMultiXactId(void)
Definition multixact.c:2303
void CheckPointMultiXact(void)
Definition multixact.c:1968
MultiXactId MultiXactIdCreateFromMembers(int nmembers, MultiXactMember *members)
Definition multixact.c:656
void TrimMultiXact(void)
Definition multixact.c:1834
char * mxid_to_string(MultiXactId multi, int nmembers, MultiXactMember *members)
Definition multixact.c:1537
void multixact_twophase_postabort(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition multixact.c:1695
int MultiXactMemberFreezeThreshold(void)
Definition multixact.c:2511
void MultiXactAdvanceNextMXact(MultiXactId minMulti, MultiXactOffset minMultiOffset)
Definition multixact.c:2164
MultiXactId ReadNextMultiXactId(void)
Definition multixact.c:620
void BootStrapMultiXact(void)
Definition multixact.c:1793
void multixact_twophase_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition multixact.c:1659
MultiXactId MultiXactIdCreate(TransactionId xid1, MultiXactStatus status1, TransactionId xid2, MultiXactStatus status2)
Definition multixact.c:299
void TruncateMultiXact(MultiXactId newOldestMulti, Oid newOldestMultiDB)
Definition multixact.c:2599
const char * multixact_identify(uint8 info)
Definition mxactdesc.c:83
void AtEOXact_MultiXact(void)
Definition multixact.c:1568
void StartupMultiXact(void)
Definition multixact.c:1809
void SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid)
Definition multixact.c:2014
int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, bool from_pgupgrade, bool isLockOnly)
Definition multixact.c:1113
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