Thanks to visit codestin.com
Credit goes to doxygen.postgresql.org

PostgreSQL Source Code git master
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-2025, 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#define MaxMultiXactOffset ((MultiXactOffset) 0xFFFFFFFF)
32
33/*
34 * Possible multixact lock modes ("status"). The first four modes are for
35 * tuple locks (FOR KEY SHARE, FOR SHARE, FOR NO KEY UPDATE, FOR UPDATE); the
36 * next two are used for update and delete modes.
37 */
38typedef enum
39{
44 /* an update that doesn't touch "key" columns */
46 /* other updates, and delete */
49
50#define MaxMultiXactStatus MultiXactStatusUpdate
51
52/* does a status value correspond to a tuple update? */
53#define ISUPDATE_from_mxstatus(status) \
54 ((status) > MultiXactStatusForUpdate)
55
56
57typedef struct MultiXactMember
58{
62
63
64/* ----------------
65 * multixact-related XLOG entries
66 * ----------------
67 */
68
69#define XLOG_MULTIXACT_ZERO_OFF_PAGE 0x00
70#define XLOG_MULTIXACT_ZERO_MEM_PAGE 0x10
71#define XLOG_MULTIXACT_CREATE_ID 0x20
72#define XLOG_MULTIXACT_TRUNCATE_ID 0x30
73
74typedef struct xl_multixact_create
75{
76 MultiXactId mid; /* new MultiXact's ID */
77 MultiXactOffset moff; /* its starting offset in members file */
78 int32 nmembers; /* number of member XIDs */
81
82#define SizeOfMultiXactCreate (offsetof(xl_multixact_create, members))
83
85{
87
88 /* to-be-truncated range of multixact offsets */
89 MultiXactId startTruncOff; /* just for completeness' sake */
91
92 /* to-be-truncated range of multixact members */
96
97#define SizeOfMultiXactTruncate (sizeof(xl_multixact_truncate))
98
99
101 MultiXactStatus status1, TransactionId xid2,
102 MultiXactStatus status2);
104 MultiXactStatus status);
105extern MultiXactId MultiXactIdCreateFromMembers(int nmembers,
106 MultiXactMember *members);
107
109extern void ReadMultiXactIdRange(MultiXactId *oldest, MultiXactId *next);
110extern bool MultiXactIdIsRunning(MultiXactId multi, bool isLockOnly);
111extern void MultiXactIdSetOldestMember(void);
112extern int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members,
113 bool from_pgupgrade, bool isLockOnly);
114extern bool GetMultiXactInfo(uint32 *multixacts, MultiXactOffset *members,
115 MultiXactId *oldestMultiXactId,
116 MultiXactOffset *oldestOffset);
117extern bool MultiXactIdPrecedes(MultiXactId multi1, MultiXactId multi2);
119 MultiXactId multi2);
120
121extern int multixactoffsetssyncfiletag(const FileTag *ftag, char *path);
122extern int multixactmemberssyncfiletag(const FileTag *ftag, char *path);
123
124extern void AtEOXact_MultiXact(void);
125extern void AtPrepare_MultiXact(void);
127
128extern Size MultiXactShmemSize(void);
129extern void MultiXactShmemInit(void);
130extern void BootStrapMultiXact(void);
131extern void StartupMultiXact(void);
132extern void TrimMultiXact(void);
133extern void SetMultiXactIdLimit(MultiXactId oldest_datminmxid,
134 Oid oldest_datoid,
135 bool is_startup);
136extern void MultiXactGetCheckptMulti(bool is_shutdown,
137 MultiXactId *nextMulti,
138 MultiXactOffset *nextMultiOffset,
139 MultiXactId *oldestMulti,
140 Oid *oldestMultiDB);
141extern void CheckPointMultiXact(void);
143extern void TruncateMultiXact(MultiXactId newOldestMulti,
144 Oid newOldestMultiDB);
145extern void MultiXactSetNextMXact(MultiXactId nextMulti,
146 MultiXactOffset nextMultiOffset);
147extern void MultiXactAdvanceNextMXact(MultiXactId minMulti,
148 MultiXactOffset minMultiOffset);
149extern void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB);
150extern int MultiXactMemberFreezeThreshold(void);
151
153 void *recdata, uint32 len);
155 void *recdata, uint32 len);
157 void *recdata, uint32 len);
158
159extern void multixact_redo(XLogReaderState *record);
160extern void multixact_desc(StringInfo buf, XLogReaderState *record);
161extern const char *multixact_identify(uint8 info);
162extern char *mxid_to_string(MultiXactId multi, int nmembers,
163 MultiXactMember *members);
164extern char *mxstatus_to_string(MultiXactStatus status);
165
166#endif /* MULTIXACT_H */
static int32 next
Definition: blutils.c:224
uint8_t uint8
Definition: c.h:537
uint32 MultiXactOffset
Definition: c.h:670
TransactionId MultiXactId
Definition: c.h:668
#define FLEXIBLE_ARRAY_MEMBER
Definition: c.h:471
int32_t int32
Definition: c.h:535
uint16_t uint16
Definition: c.h:538
uint32_t uint32
Definition: c.h:539
uint32 TransactionId
Definition: c.h:658
size_t Size
Definition: c.h:611
void MultiXactShmemInit(void)
Definition: multixact.c:1955
MultiXactId MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status)
Definition: multixact.c:478
void ReadMultiXactIdRange(MultiXactId *oldest, MultiXactId *next)
Definition: multixact.c:782
bool MultiXactIdPrecedes(MultiXactId multi1, MultiXactId multi2)
Definition: multixact.c:3265
char * mxstatus_to_string(MultiXactStatus status)
Definition: multixact.c:1745
void multixact_redo(XLogReaderState *record)
Definition: multixact.c:3330
MultiXactStatus
Definition: multixact.h:39
@ MultiXactStatusForShare
Definition: multixact.h:41
@ MultiXactStatusForNoKeyUpdate
Definition: multixact.h:42
@ MultiXactStatusNoKeyUpdate
Definition: multixact.h:45
@ MultiXactStatusUpdate
Definition: multixact.h:47
@ MultiXactStatusForUpdate
Definition: multixact.h:43
@ MultiXactStatusForKeyShare
Definition: multixact.h:40
void multixact_twophase_postcommit(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition: multixact.c:1911
int multixactoffsetssyncfiletag(const FileTag *ftag, char *path)
Definition: multixact.c:3429
void PostPrepare_MultiXact(FullTransactionId fxid)
Definition: multixact.c:1841
void MultiXactSetNextMXact(MultiXactId nextMulti, MultiXactOffset nextMultiOffset)
Definition: multixact.c:2258
void AtPrepare_MultiXact(void)
Definition: multixact.c:1827
bool MultiXactIdPrecedesOrEquals(MultiXactId multi1, MultiXactId multi2)
Definition: multixact.c:3279
void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB)
Definition: multixact.c:2466
bool MultiXactIdIsRunning(MultiXactId multi, bool isLockOnly)
Definition: multixact.c:590
void MultiXactIdSetOldestMember(void)
Definition: multixact.c:664
void multixact_desc(StringInfo buf, XLogReaderState *record)
Definition: mxactdesc.c:50
Size MultiXactShmemSize(void)
Definition: multixact.c:1938
void MultiXactGetCheckptMulti(bool is_shutdown, MultiXactId *nextMulti, MultiXactOffset *nextMultiOffset, MultiXactId *oldestMulti, Oid *oldestMultiDB)
Definition: multixact.c:2212
void SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid, bool is_startup)
Definition: multixact.c:2292
int multixactmemberssyncfiletag(const FileTag *ftag, char *path)
Definition: multixact.c:3438
MultiXactId GetOldestMultiXactId(void)
Definition: multixact.c:2594
void CheckPointMultiXact(void)
Definition: multixact.c:2234
MultiXactId MultiXactIdCreateFromMembers(int nmembers, MultiXactMember *members)
Definition: multixact.c:806
void TrimMultiXact(void)
Definition: multixact.c:2108
char * mxid_to_string(MultiXactId multi, int nmembers, MultiXactMember *members)
Definition: multixact.c:1768
void multixact_twophase_postabort(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition: multixact.c:1926
int MultiXactMemberFreezeThreshold(void)
Definition: multixact.c:2924
void MultiXactAdvanceNextMXact(MultiXactId minMulti, MultiXactOffset minMultiOffset)
Definition: multixact.c:2441
MultiXactId ReadNextMultiXactId(void)
Definition: multixact.c:762
void BootStrapMultiXact(void)
Definition: multixact.c:2025
void multixact_twophase_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
Definition: multixact.c:1890
MultiXactId MultiXactIdCreate(TransactionId xid1, MultiXactStatus status1, TransactionId xid2, MultiXactStatus status2)
Definition: multixact.c:425
void TruncateMultiXact(MultiXactId newOldestMulti, Oid newOldestMultiDB)
Definition: multixact.c:3050
struct MultiXactMember MultiXactMember
bool GetMultiXactInfo(uint32 *multixacts, MultiXactOffset *members, MultiXactId *oldestMultiXactId, MultiXactOffset *oldestOffset)
Definition: multixact.c:2867
const char * multixact_identify(uint8 info)
Definition: mxactdesc.c:84
void AtEOXact_MultiXact(void)
Definition: multixact.c:1799
struct xl_multixact_truncate xl_multixact_truncate
void StartupMultiXact(void)
Definition: multixact.c:2083
struct xl_multixact_create xl_multixact_create
int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, bool from_pgupgrade, bool isLockOnly)
Definition: multixact.c:1290
const void size_t len
static char * buf
Definition: pg_test_fsync.c:72
unsigned int Oid
Definition: postgres_ext.h:32
Definition: sync.h:51
TransactionId xid
Definition: multixact.h:59
MultiXactStatus status
Definition: multixact.h:60
MultiXactId mid
Definition: multixact.h:76
MultiXactMember members[FLEXIBLE_ARRAY_MEMBER]
Definition: multixact.h:79
MultiXactOffset moff
Definition: multixact.h:77
MultiXactId endTruncOff
Definition: multixact.h:90
MultiXactOffset startTruncMemb
Definition: multixact.h:93
MultiXactOffset endTruncMemb
Definition: multixact.h:94
MultiXactId startTruncOff
Definition: multixact.h:89