]> granicus.if.org Git - postgresql/blob - src/include/access/multixact.h
Update copyright for the year 2010.
[postgresql] / src / include / access / multixact.h
1 /*
2  * multixact.h
3  *
4  * PostgreSQL multi-transaction-log manager
5  *
6  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * $PostgreSQL: pgsql/src/include/access/multixact.h,v 1.16 2010/01/02 16:58:00 momjian Exp $
10  */
11 #ifndef MULTIXACT_H
12 #define MULTIXACT_H
13
14 #include "access/xlog.h"
15
16 #define InvalidMultiXactId      ((MultiXactId) 0)
17 #define FirstMultiXactId        ((MultiXactId) 1)
18
19 #define MultiXactIdIsValid(multi) ((multi) != InvalidMultiXactId)
20
21 /* Number of SLRU buffers to use for multixact */
22 #define NUM_MXACTOFFSET_BUFFERS         8
23 #define NUM_MXACTMEMBER_BUFFERS         16
24
25 /* ----------------
26  *              multixact-related XLOG entries
27  * ----------------
28  */
29
30 #define XLOG_MULTIXACT_ZERO_OFF_PAGE    0x00
31 #define XLOG_MULTIXACT_ZERO_MEM_PAGE    0x10
32 #define XLOG_MULTIXACT_CREATE_ID                0x20
33
34 typedef struct xl_multixact_create
35 {
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;
41
42 #define MinSizeOfMultiXactCreate offsetof(xl_multixact_create, xids)
43
44
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);
53
54 extern void AtEOXact_MultiXact(void);
55 extern void AtPrepare_MultiXact(void);
56 extern void PostPrepare_MultiXact(TransactionId xid);
57
58 extern Size MultiXactShmemSize(void);
59 extern void MultiXactShmemInit(void);
60 extern void BootStrapMultiXact(void);
61 extern void StartupMultiXact(void);
62 extern void ShutdownMultiXact(void);
63 extern void MultiXactGetCheckptMulti(bool is_shutdown,
64                                                  MultiXactId *nextMulti,
65                                                  MultiXactOffset *nextMultiOffset);
66 extern void CheckPointMultiXact(void);
67 extern void MultiXactSetNextMXact(MultiXactId nextMulti,
68                                           MultiXactOffset nextMultiOffset);
69 extern void MultiXactAdvanceNextMXact(MultiXactId minMulti,
70                                                   MultiXactOffset minMultiOffset);
71
72 extern void multixact_twophase_recover(TransactionId xid, uint16 info,
73                                                    void *recdata, uint32 len);
74 extern void multixact_twophase_postcommit(TransactionId xid, uint16 info,
75                                                           void *recdata, uint32 len);
76 extern void multixact_twophase_postabort(TransactionId xid, uint16 info,
77                                                          void *recdata, uint32 len);
78
79 extern void multixact_redo(XLogRecPtr lsn, XLogRecord *record);
80 extern void multixact_desc(StringInfo buf, uint8 xl_info, char *rec);
81
82 #endif   /* MULTIXACT_H */