1 | /*------------------------------------------------------------------------- |
2 | * |
3 | * smgrdesc.c |
4 | * rmgr descriptor routines for catalog/storage.c |
5 | * |
6 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
7 | * Portions Copyright (c) 1994, Regents of the University of California |
8 | * |
9 | * |
10 | * IDENTIFICATION |
11 | * src/backend/access/rmgrdesc/smgrdesc.c |
12 | * |
13 | *------------------------------------------------------------------------- |
14 | */ |
15 | #include "postgres.h" |
16 | |
17 | #include "catalog/storage_xlog.h" |
18 | |
19 | |
20 | void |
21 | smgr_desc(StringInfo buf, XLogReaderState *record) |
22 | { |
23 | char *rec = XLogRecGetData(record); |
24 | uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK; |
25 | |
26 | if (info == XLOG_SMGR_CREATE) |
27 | { |
28 | xl_smgr_create *xlrec = (xl_smgr_create *) rec; |
29 | char *path = relpathperm(xlrec->rnode, xlrec->forkNum); |
30 | |
31 | appendStringInfoString(buf, path); |
32 | pfree(path); |
33 | } |
34 | else if (info == XLOG_SMGR_TRUNCATE) |
35 | { |
36 | xl_smgr_truncate *xlrec = (xl_smgr_truncate *) rec; |
37 | char *path = relpathperm(xlrec->rnode, MAIN_FORKNUM); |
38 | |
39 | appendStringInfo(buf, "%s to %u blocks flags %d" , path, |
40 | xlrec->blkno, xlrec->flags); |
41 | pfree(path); |
42 | } |
43 | } |
44 | |
45 | const char * |
46 | smgr_identify(uint8 info) |
47 | { |
48 | const char *id = NULL; |
49 | |
50 | switch (info & ~XLR_INFO_MASK) |
51 | { |
52 | case XLOG_SMGR_CREATE: |
53 | id = "CREATE" ; |
54 | break; |
55 | case XLOG_SMGR_TRUNCATE: |
56 | id = "TRUNCATE" ; |
57 | break; |
58 | } |
59 | |
60 | return id; |
61 | } |
62 | |