Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit728f152

Browse files
committed
Add rmgr callback to name xlog record types for display purposes.
This is primarily useful for the upcoming pg_xlogdump --stats feature,but also allows to remove some duplicated code in the rmgr_descroutines.Due to the separation and harmonization, the output of dipsplayedrecords changes somewhat. But since this isn't enduser orientedcontent that's ok.It's potentially desirable to further change pg_xlogdump's display ofrecords. It previously wasn't possible to show the record typeseparately from the description forcing it to be in the lastcolumn. But that's better done in a separate commit.Author: Abhijit Menon-Sen, slightly editorialized by meReviewed-By: Álvaro Herrera, Andres Freund, and Heikki LinnakangasDiscussion: 20140604104716.GA3989@toroid.org
1 parent7e3f728 commit728f152

40 files changed

+587
-233
lines changed

‎contrib/pg_xlogdump/pg_xlogdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogRecPtr ReadRecPtr, XLogRecord
339339

340340
config->already_displayed_records++;
341341

342-
printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, bkp: %u%u%u%u, desc: ",
342+
printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, bkp: %u%u%u%u, desc:%s",
343343
desc->rm_name,
344344
record->xl_len,record->xl_tot_len,
345345
record->xl_xid,
@@ -348,7 +348,8 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogRecPtr ReadRecPtr, XLogRecord
348348
!!(XLR_BKP_BLOCK(0)&record->xl_info),
349349
!!(XLR_BKP_BLOCK(1)&record->xl_info),
350350
!!(XLR_BKP_BLOCK(2)&record->xl_info),
351-
!!(XLR_BKP_BLOCK(3)&record->xl_info));
351+
!!(XLR_BKP_BLOCK(3)&record->xl_info),
352+
desc->rm_identify(record->xl_info));
352353

353354
/* the desc routine will printf the description directly to stdout */
354355
desc->rm_desc(NULL,record);

‎contrib/pg_xlogdump/rmgrdesc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
#include"storage/standby.h"
2828
#include"utils/relmapper.h"
2929

30-
#definePG_RMGR(symname,name,redo,desc,startup,cleanup) \
31-
{ name, desc, },
30+
#definePG_RMGR(symname,name,redo,desc,identify,startup,cleanup) \
31+
{ name, desc,identify},
3232

3333
constRmgrDescDataRmgrDescTable[RM_MAX_ID+1]= {
3434
#include"access/rmgrlist.h"

‎contrib/pg_xlogdump/rmgrdesc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ typedef struct RmgrDescData
1414
{
1515
constchar*rm_name;
1616
void(*rm_desc) (StringInfobuf,XLogRecord*record);
17+
constchar*(*rm_identify) (uint8info);
1718
}RmgrDescData;
1819

1920
externconstRmgrDescDataRmgrDescTable[];

‎src/backend/access/rmgrdesc/clogdesc.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,29 @@ clog_desc(StringInfo buf, XLogRecord *record)
2323
char*rec=XLogRecGetData(record);
2424
uint8info=record->xl_info& ~XLR_INFO_MASK;
2525

26-
if (info==CLOG_ZEROPAGE)
26+
if (info==CLOG_ZEROPAGE||info==CLOG_TRUNCATE)
2727
{
2828
intpageno;
2929

3030
memcpy(&pageno,rec,sizeof(int));
31-
appendStringInfo(buf,"zeropage:%d",pageno);
31+
appendStringInfo(buf,"%d",pageno);
3232
}
33-
elseif (info==CLOG_TRUNCATE)
34-
{
35-
intpageno;
33+
}
3634

37-
memcpy(&pageno,rec,sizeof(int));
38-
appendStringInfo(buf,"truncate before: %d",pageno);
35+
constchar*
36+
clog_identify(uint8info)
37+
{
38+
constchar*id=NULL;
39+
40+
switch (info)
41+
{
42+
caseCLOG_ZEROPAGE:
43+
id="ZEROPAGE";
44+
break;
45+
caseCLOG_TRUNCATE:
46+
id="TRUNCATE";
47+
break;
3948
}
40-
else
41-
appendStringInfoString(buf,"UNKNOWN");
49+
50+
returnid;
4251
}

‎src/backend/access/rmgrdesc/dbasedesc.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,33 @@ dbase_desc(StringInfo buf, XLogRecord *record)
2828
{
2929
xl_dbase_create_rec*xlrec= (xl_dbase_create_rec*)rec;
3030

31-
appendStringInfo(buf,"create db:copy dir %u/%u to %u/%u",
31+
appendStringInfo(buf,"copy dir %u/%u to %u/%u",
3232
xlrec->src_db_id,xlrec->src_tablespace_id,
3333
xlrec->db_id,xlrec->tablespace_id);
3434
}
3535
elseif (info==XLOG_DBASE_DROP)
3636
{
3737
xl_dbase_drop_rec*xlrec= (xl_dbase_drop_rec*)rec;
3838

39-
appendStringInfo(buf,"drop db:dir %u/%u",
39+
appendStringInfo(buf,"dir %u/%u",
4040
xlrec->db_id,xlrec->tablespace_id);
4141
}
42-
else
43-
appendStringInfoString(buf,"UNKNOWN");
42+
}
43+
44+
constchar*
45+
dbase_identify(uint8info)
46+
{
47+
constchar*id=NULL;
48+
49+
switch (info)
50+
{
51+
caseXLOG_DBASE_CREATE:
52+
id="CREATE";
53+
break;
54+
caseXLOG_DBASE_DROP:
55+
id="DROP";
56+
break;
57+
}
58+
59+
returnid;
4460
}

‎src/backend/access/rmgrdesc/gindesc.c

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,16 @@ gin_desc(StringInfo buf, XLogRecord *record)
8585
switch (info)
8686
{
8787
caseXLOG_GIN_CREATE_INDEX:
88-
appendStringInfoString(buf,"Create index, ");
8988
desc_node(buf,*(RelFileNode*)rec,GIN_ROOT_BLKNO);
9089
break;
9190
caseXLOG_GIN_CREATE_PTREE:
92-
appendStringInfoString(buf,"Create posting tree, ");
9391
desc_node(buf, ((ginxlogCreatePostingTree*)rec)->node, ((ginxlogCreatePostingTree*)rec)->blkno);
9492
break;
9593
caseXLOG_GIN_INSERT:
9694
{
9795
ginxlogInsert*xlrec= (ginxlogInsert*)rec;
9896
char*payload=rec+sizeof(ginxlogInsert);
9997

100-
appendStringInfoString(buf,"Insert item, ");
10198
desc_node(buf,xlrec->node,xlrec->blkno);
10299
appendStringInfo(buf," isdata: %c isleaf: %c",
103100
(xlrec->flags&GIN_INSERT_ISDATA) ?'T' :'F',
@@ -142,7 +139,6 @@ gin_desc(StringInfo buf, XLogRecord *record)
142139
{
143140
ginxlogSplit*xlrec= (ginxlogSplit*)rec;
144141

145-
appendStringInfoString(buf,"Page split, ");
146142
desc_node(buf, ((ginxlogSplit*)rec)->node, ((ginxlogSplit*)rec)->lblkno);
147143
appendStringInfo(buf," isrootsplit: %c", (((ginxlogSplit*)rec)->flags&GIN_SPLIT_ROOT) ?'T' :'F');
148144
appendStringInfo(buf," isdata: %c isleaf: %c",
@@ -151,14 +147,12 @@ gin_desc(StringInfo buf, XLogRecord *record)
151147
}
152148
break;
153149
caseXLOG_GIN_VACUUM_PAGE:
154-
appendStringInfoString(buf,"Vacuum page, ");
155150
desc_node(buf, ((ginxlogVacuumPage*)rec)->node, ((ginxlogVacuumPage*)rec)->blkno);
156151
break;
157152
caseXLOG_GIN_VACUUM_DATA_LEAF_PAGE:
158153
{
159154
ginxlogVacuumDataLeafPage*xlrec= (ginxlogVacuumDataLeafPage*)rec;
160155

161-
appendStringInfoString(buf,"Vacuum data leaf page, ");
162156
desc_node(buf,xlrec->node,xlrec->blkno);
163157
if (record->xl_info&XLR_BKP_BLOCK(0))
164158
appendStringInfo(buf," (full page image)");
@@ -167,23 +161,59 @@ gin_desc(StringInfo buf, XLogRecord *record)
167161
}
168162
break;
169163
caseXLOG_GIN_DELETE_PAGE:
170-
appendStringInfoString(buf,"Delete page, ");
171164
desc_node(buf, ((ginxlogDeletePage*)rec)->node, ((ginxlogDeletePage*)rec)->blkno);
172165
break;
173166
caseXLOG_GIN_UPDATE_META_PAGE:
174-
appendStringInfoString(buf,"Update metapage, ");
175167
desc_node(buf, ((ginxlogUpdateMeta*)rec)->node,GIN_METAPAGE_BLKNO);
176168
break;
177169
caseXLOG_GIN_INSERT_LISTPAGE:
178-
appendStringInfoString(buf,"Insert new list page, ");
179170
desc_node(buf, ((ginxlogInsertListPage*)rec)->node, ((ginxlogInsertListPage*)rec)->blkno);
180171
break;
181172
caseXLOG_GIN_DELETE_LISTPAGE:
182-
appendStringInfo(buf,"Delete list pages (%d), ", ((ginxlogDeleteListPages*)rec)->ndeleted);
173+
appendStringInfo(buf,"%d pages, ", ((ginxlogDeleteListPages*)rec)->ndeleted);
183174
desc_node(buf, ((ginxlogDeleteListPages*)rec)->node,GIN_METAPAGE_BLKNO);
184175
break;
185-
default:
186-
appendStringInfo(buf,"unknown gin op code %u",info);
176+
}
177+
}
178+
179+
constchar*
180+
gin_identify(uint8info)
181+
{
182+
constchar*id=NULL;
183+
184+
switch (info)
185+
{
186+
caseXLOG_GIN_CREATE_INDEX:
187+
id="CREATE_INDEX";
188+
break;
189+
caseXLOG_GIN_CREATE_PTREE:
190+
id="CREATE_PTREE";
191+
break;
192+
caseXLOG_GIN_INSERT:
193+
id="INSERT";
194+
break;
195+
caseXLOG_GIN_SPLIT:
196+
id="SPLIT";
197+
break;
198+
caseXLOG_GIN_VACUUM_PAGE:
199+
id="VACUUM_PAGE";
200+
break;
201+
caseXLOG_GIN_VACUUM_DATA_LEAF_PAGE:
202+
id="VACUUM_DATA_LEAF_PAGE";
203+
break;
204+
caseXLOG_GIN_DELETE_PAGE:
205+
id="DELETE_PAGE";
206+
break;
207+
caseXLOG_GIN_UPDATE_META_PAGE:
208+
id="UPDATE_META_PAGE";
209+
break;
210+
caseXLOG_GIN_INSERT_LISTPAGE:
211+
id="INSERT_LISTPAGE";
212+
break;
213+
caseXLOG_GIN_DELETE_LISTPAGE:
214+
id="DELETE_LISTPAGE";
187215
break;
188216
}
217+
218+
returnid;
189219
}

‎src/backend/access/rmgrdesc/gistdesc.c

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,37 @@ gist_desc(StringInfo buf, XLogRecord *record)
5050
switch (info)
5151
{
5252
caseXLOG_GIST_PAGE_UPDATE:
53-
appendStringInfoString(buf,"page_update: ");
5453
out_gistxlogPageUpdate(buf, (gistxlogPageUpdate*)rec);
5554
break;
5655
caseXLOG_GIST_PAGE_SPLIT:
5756
out_gistxlogPageSplit(buf, (gistxlogPageSplit*)rec);
5857
break;
5958
caseXLOG_GIST_CREATE_INDEX:
60-
appendStringInfo(buf,"create_index:rel %u/%u/%u",
59+
appendStringInfo(buf,"rel %u/%u/%u",
6160
((RelFileNode*)rec)->spcNode,
6261
((RelFileNode*)rec)->dbNode,
6362
((RelFileNode*)rec)->relNode);
6463
break;
65-
default:
66-
appendStringInfo(buf,"unknown gist op code %u",info);
64+
}
65+
}
66+
67+
constchar*
68+
gist_identify(uint8info)
69+
{
70+
constchar*id=NULL;
71+
72+
switch (info)
73+
{
74+
caseXLOG_GIST_PAGE_UPDATE:
75+
id="PAGE_UPDATE";
76+
break;
77+
caseXLOG_GIST_PAGE_SPLIT:
78+
id="PAGE_SPLIT";
79+
break;
80+
caseXLOG_GIST_CREATE_INDEX:
81+
id="CREATE_INDEX";
6782
break;
6883
}
84+
85+
returnid;
6986
}

‎src/backend/access/rmgrdesc/hashdesc.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,9 @@ void
2020
hash_desc(StringInfobuf,XLogRecord*record)
2121
{
2222
}
23+
24+
constchar*
25+
hash_identify(uint8info)
26+
{
27+
returnNULL;
28+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp