Age Owner 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-2023, 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
3728 alvherre 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
3062 heikki.linnakangas 50 0 : multixact_desc(StringInfo buf, XLogReaderState *record)
51 : {
3221 52 0 : char *rec = XLogRecGetData(record);
3062 53 0 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
54 :
3124 andres 55 0 : if (info == XLOG_MULTIXACT_ZERO_OFF_PAGE ||
56 : info == XLOG_MULTIXACT_ZERO_MEM_PAGE)
3784 alvherre 57 0 : {
58 : int pageno;
59 :
60 0 : memcpy(&pageno, rec, sizeof(int));
3124 andres 61 0 : appendStringInfo(buf, "%d", pageno);
62 : }
3784 alvherre 63 0 : else if (info == XLOG_MULTIXACT_CREATE_ID)
64 : {
65 0 : xl_multixact_create *xlrec = (xl_multixact_create *) rec;
66 : int i;
67 :
3124 andres 68 0 : appendStringInfo(buf, "%u offset %u nmembers %d: ", xlrec->mid,
69 : xlrec->moff, xlrec->nmembers);
3728 alvherre 70 0 : for (i = 0; i < xlrec->nmembers; i++)
71 0 : out_member(buf, &xlrec->members[i]);
72 : }
2752 andres 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 : }
3124 81 0 : }
82 :
83 : const char *
84 0 : multixact_identify(uint8 info)
85 : {
86 0 : const char *id = NULL;
87 :
3121 88 0 : switch (info & ~XLR_INFO_MASK)
89 : {
3124 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;
2752 99 0 : case XLOG_MULTIXACT_TRUNCATE_ID:
100 0 : id = "TRUNCATE_ID";
101 0 : break;
102 : }
103 :
3124 104 0 : return id;
105 : }
|