Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * mxactdesc.c
4 : : * rmgr descriptor routines for access/transam/multixact.c
5 : : *
6 : : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7 : : * Portions Copyright (c) 1994, Regents of the University of California
8 : : *
9 : : *
10 : : * IDENTIFICATION
11 : : * src/backend/access/rmgrdesc/mxactdesc.c
12 : : *
13 : : *-------------------------------------------------------------------------
14 : : */
15 : : #include "postgres.h"
16 : :
17 : : #include "access/multixact.h"
18 : :
19 : : static void
4099 alvherre@alvh.no-ip. 20 :UBC 0 : out_member(StringInfo buf, MultiXactMember *member)
21 : : {
22 : 0 : appendStringInfo(buf, "%u ", member->xid);
23 [ # # # # : 0 : switch (member->status)
# # # ]
24 : : {
25 : 0 : case MultiXactStatusForKeyShare:
26 : 0 : appendStringInfoString(buf, "(keysh) ");
27 : 0 : break;
28 : 0 : case MultiXactStatusForShare:
29 : 0 : appendStringInfoString(buf, "(sh) ");
30 : 0 : break;
31 : 0 : case MultiXactStatusForNoKeyUpdate:
32 : 0 : appendStringInfoString(buf, "(fornokeyupd) ");
33 : 0 : break;
34 : 0 : case MultiXactStatusForUpdate:
35 : 0 : appendStringInfoString(buf, "(forupd) ");
36 : 0 : break;
37 : 0 : case MultiXactStatusNoKeyUpdate:
38 : 0 : appendStringInfoString(buf, "(nokeyupd) ");
39 : 0 : break;
40 : 0 : case MultiXactStatusUpdate:
41 : 0 : appendStringInfoString(buf, "(upd) ");
42 : 0 : break;
43 : 0 : default:
44 : 0 : appendStringInfoString(buf, "(unk) ");
45 : 0 : break;
46 : : }
47 : 0 : }
48 : :
49 : : void
3433 heikki.linnakangas@i 50 : 0 : multixact_desc(StringInfo buf, XLogReaderState *record)
51 : : {
3592 52 : 0 : char *rec = XLogRecGetData(record);
3433 53 : 0 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
54 : :
3495 andres@anarazel.de 55 [ # # # # ]: 0 : if (info == XLOG_MULTIXACT_ZERO_OFF_PAGE ||
56 : : info == XLOG_MULTIXACT_ZERO_MEM_PAGE)
4155 alvherre@alvh.no-ip. 57 : 0 : {
58 : : int64 pageno;
59 : :
137 akorotkov@postgresql 60 :UNC 0 : memcpy(&pageno, rec, sizeof(pageno));
61 : 0 : appendStringInfo(buf, "%lld", (long long) pageno);
62 : : }
4155 alvherre@alvh.no-ip. 63 [ # # ]:UBC 0 : else if (info == XLOG_MULTIXACT_CREATE_ID)
64 : : {
65 : 0 : xl_multixact_create *xlrec = (xl_multixact_create *) rec;
66 : : int i;
67 : :
3495 andres@anarazel.de 68 : 0 : appendStringInfo(buf, "%u offset %u nmembers %d: ", xlrec->mid,
69 : : xlrec->moff, xlrec->nmembers);
4099 alvherre@alvh.no-ip. 70 [ # # ]: 0 : for (i = 0; i < xlrec->nmembers; i++)
71 : 0 : out_member(buf, &xlrec->members[i]);
72 : : }
3123 andres@anarazel.de 73 [ # # ]: 0 : else if (info == XLOG_MULTIXACT_TRUNCATE_ID)
74 : : {
75 : 0 : xl_multixact_truncate *xlrec = (xl_multixact_truncate *) rec;
76 : :
77 : 0 : appendStringInfo(buf, "offsets [%u, %u), members [%u, %u)",
78 : : xlrec->startTruncOff, xlrec->endTruncOff,
79 : : xlrec->startTruncMemb, xlrec->endTruncMemb);
80 : : }
3495 81 : 0 : }
82 : :
83 : : const char *
84 : 0 : multixact_identify(uint8 info)
85 : : {
86 : 0 : const char *id = NULL;
87 : :
3492 88 [ # # # # : 0 : switch (info & ~XLR_INFO_MASK)
# ]
89 : : {
3495 90 : 0 : case XLOG_MULTIXACT_ZERO_OFF_PAGE:
91 : 0 : id = "ZERO_OFF_PAGE";
92 : 0 : break;
93 : 0 : case XLOG_MULTIXACT_ZERO_MEM_PAGE:
94 : 0 : id = "ZERO_MEM_PAGE";
95 : 0 : break;
96 : 0 : case XLOG_MULTIXACT_CREATE_ID:
97 : 0 : id = "CREATE_ID";
98 : 0 : break;
3123 99 : 0 : case XLOG_MULTIXACT_TRUNCATE_ID:
100 : 0 : id = "TRUNCATE_ID";
101 : 0 : break;
102 : : }
103 : :
3495 104 : 0 : return id;
105 : : }
|