4 * PostgreSQL multi-transaction-log manager
6 * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
14 #include "access/xlog.h"
16 #define InvalidMultiXactId ((MultiXactId) 0)
17 #define FirstMultiXactId ((MultiXactId) 1)
19 #define MultiXactIdIsValid(multi) ((multi) != InvalidMultiXactId)
21 /* Number of SLRU buffers to use for multixact */
22 #define NUM_MXACTOFFSET_BUFFERS 8
23 #define NUM_MXACTMEMBER_BUFFERS 16
26 * multixact-related XLOG entries
30 #define XLOG_MULTIXACT_ZERO_OFF_PAGE 0x00
31 #define XLOG_MULTIXACT_ZERO_MEM_PAGE 0x10
32 #define XLOG_MULTIXACT_CREATE_ID 0x20
34 typedef struct xl_multixact_create
36 MultiXactId mid
; /* new MultiXact's ID */
37 MultiXactOffset moff
; /* its starting offset in members file */
38 int32 nxids
; /* number of member XIDs */
39 TransactionId xids
[1]; /* VARIABLE LENGTH ARRAY */
40 } xl_multixact_create
;
42 #define MinSizeOfMultiXactCreate offsetof(xl_multixact_create, xids)
45 extern MultiXactId
MultiXactIdCreate(TransactionId xid1
, TransactionId xid2
);
46 extern MultiXactId
MultiXactIdExpand(MultiXactId multi
, TransactionId xid
);
47 extern bool MultiXactIdIsRunning(MultiXactId multi
);
48 extern bool MultiXactIdIsCurrent(MultiXactId multi
);
49 extern void MultiXactIdWait(MultiXactId multi
);
50 extern bool ConditionalMultiXactIdWait(MultiXactId multi
);
51 extern void MultiXactIdSetOldestMember(void);
52 extern int GetMultiXactIdMembers(MultiXactId multi
, TransactionId
**xids
);
54 extern void AtEOXact_MultiXact(void);
56 extern Size
MultiXactShmemSize(void);
57 extern void MultiXactShmemInit(void);
58 extern void BootStrapMultiXact(void);
59 extern void StartupMultiXact(void);
60 extern void ShutdownMultiXact(void);
61 extern void MultiXactGetCheckptMulti(bool is_shutdown
,
62 MultiXactId
*nextMulti
,
63 MultiXactOffset
*nextMultiOffset
);
64 extern void CheckPointMultiXact(void);
65 extern void MultiXactSetNextMXact(MultiXactId nextMulti
,
66 MultiXactOffset nextMultiOffset
);
67 extern void MultiXactAdvanceNextMXact(MultiXactId minMulti
,
68 MultiXactOffset minMultiOffset
);
70 extern void multixact_redo(XLogRecPtr lsn
, XLogRecord
*record
);
71 extern void multixact_desc(StringInfo buf
, uint8 xl_info
, char *rec
);
73 #endif /* MULTIXACT_H */