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

Commit604f795

Browse files
committed
Improve code around the recently added rm_identify rmgr callback.
There are four weaknesses in728f152e07f998d2cb4fe5f24ec8da2c3bda98f2:* append_init() in heapdesc.c was ugly and required that rm_identify return values are only valid till the next call. Instead just add a couple more switch() cases for the INIT_PAGE cases. Now the returned value will always be valid.* a couple rm_identify() callbacks missed masking xl_info with ~XLR_INFO_MASK.* pg_xlogdump didn't map a NULL rm_identify to UNKNOWN or a similar string.* append_init() was called when id=NULL - which should never actually happen. But it's better to be careful.
1 parent898f8a9 commit604f795

File tree

18 files changed

+36
-38
lines changed

18 files changed

+36
-38
lines changed

‎contrib/pg_xlogdump/pg_xlogdump.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,8 +382,13 @@ XLogDumpCountRecord(XLogDumpConfig *config, XLogDumpStats *stats, XLogRecPtr Rea
382382
staticvoid
383383
XLogDumpDisplayRecord(XLogDumpConfig*config,XLogRecPtrReadRecPtr,XLogRecord*record)
384384
{
385+
constchar*id;
385386
constRmgrDescData*desc=&RmgrDescTable[record->xl_rmid];
386387

388+
id=desc->rm_identify(record->xl_info);
389+
if (id==NULL)
390+
id=psprintf("UNKNOWN (%x)",record->xl_info& ~XLR_INFO_MASK);
391+
387392
printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, bkp: %u%u%u%u, desc: %s ",
388393
desc->rm_name,
389394
record->xl_len,record->xl_tot_len,
@@ -394,7 +399,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogRecPtr ReadRecPtr, XLogRecord
394399
!!(XLR_BKP_BLOCK(1)&record->xl_info),
395400
!!(XLR_BKP_BLOCK(2)&record->xl_info),
396401
!!(XLR_BKP_BLOCK(3)&record->xl_info),
397-
desc->rm_identify(record->xl_info));
402+
id);
398403

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ clog_identify(uint8 info)
3737
{
3838
constchar*id=NULL;
3939

40-
switch (info)
40+
switch (info& ~XLR_INFO_MASK)
4141
{
4242
caseCLOG_ZEROPAGE:
4343
id="ZEROPAGE";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ dbase_identify(uint8 info)
4646
{
4747
constchar*id=NULL;
4848

49-
switch (info)
49+
switch (info& ~XLR_INFO_MASK)
5050
{
5151
caseXLOG_DBASE_CREATE:
5252
id="CREATE";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ gin_identify(uint8 info)
181181
{
182182
constchar*id=NULL;
183183

184-
switch (info)
184+
switch (info& ~XLR_INFO_MASK)
185185
{
186186
caseXLOG_GIN_CREATE_INDEX:
187187
id="CREATE_INDEX";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ gist_identify(uint8 info)
6969
{
7070
constchar*id=NULL;
7171

72-
switch (info)
72+
switch (info& ~XLR_INFO_MASK)
7373
{
7474
caseXLOG_GIST_PAGE_UPDATE:
7575
id="PAGE_UPDATE";

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

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -166,36 +166,34 @@ heap2_desc(StringInfo buf, XLogRecord *record)
166166
}
167167
}
168168

169-
staticconstchar*
170-
append_init(constchar*str)
171-
{
172-
staticcharx[32];
173-
174-
strcpy(x,str);
175-
strcat(x,"+INIT");
176-
177-
returnx;
178-
}
179-
180169
constchar*
181170
heap_identify(uint8info)
182171
{
183172
constchar*id=NULL;
184173

185-
switch (info&XLOG_HEAP_OPMASK)
174+
switch (info&~XLR_INFO_MASK)
186175
{
187176
caseXLOG_HEAP_INSERT:
188177
id="INSERT";
189178
break;
179+
caseXLOG_HEAP_INSERT |XLOG_HEAP_INIT_PAGE:
180+
id="INSERT+INIT";
181+
break;
190182
caseXLOG_HEAP_DELETE:
191183
id="DELETE";
192184
break;
193185
caseXLOG_HEAP_UPDATE:
194186
id="UPDATE";
195187
break;
188+
caseXLOG_HEAP_UPDATE |XLOG_HEAP_INIT_PAGE:
189+
id="UPDATE+INIT";
190+
break;
196191
caseXLOG_HEAP_HOT_UPDATE:
197192
id="HOT_UPDATE";
198193
break;
194+
caseXLOG_HEAP_HOT_UPDATE |XLOG_HEAP_INIT_PAGE:
195+
id="HOT_UPDATE+INIT";
196+
break;
199197
caseXLOG_HEAP_LOCK:
200198
id="LOCK";
201199
break;
@@ -204,9 +202,6 @@ heap_identify(uint8 info)
204202
break;
205203
}
206204

207-
if (info&XLOG_HEAP_INIT_PAGE)
208-
id=append_init(id);
209-
210205
returnid;
211206
}
212207

@@ -215,7 +210,7 @@ heap2_identify(uint8 info)
215210
{
216211
constchar*id=NULL;
217212

218-
switch (info&XLOG_HEAP_OPMASK)
213+
switch (info&~XLR_INFO_MASK)
219214
{
220215
caseXLOG_HEAP2_CLEAN:
221216
id="CLEAN";
@@ -232,6 +227,9 @@ heap2_identify(uint8 info)
232227
caseXLOG_HEAP2_MULTI_INSERT:
233228
id="MULTI_INSERT";
234229
break;
230+
caseXLOG_HEAP2_MULTI_INSERT |XLOG_HEAP_INIT_PAGE:
231+
id="MULTI_INSERT+INIT";
232+
break;
235233
caseXLOG_HEAP2_LOCK_UPDATED:
236234
id="LOCK_UPDATED";
237235
break;
@@ -243,8 +241,5 @@ heap2_identify(uint8 info)
243241
break;
244242
}
245243

246-
if (info&XLOG_HEAP_INIT_PAGE)
247-
id=append_init(id);
248-
249244
returnid;
250245
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ multixact_identify(uint8 info)
7777
{
7878
constchar*id=NULL;
7979

80-
switch (info)
80+
switch (info& ~XLR_INFO_MASK)
8181
{
8282
caseXLOG_MULTIXACT_ZERO_OFF_PAGE:
8383
id="ZERO_OFF_PAGE";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ btree_identify(uint8 info)
126126
{
127127
constchar*id=NULL;
128128

129-
switch (info)
129+
switch (info& ~XLR_INFO_MASK)
130130
{
131131
caseXLOG_BTREE_INSERT_LEAF:
132132
id="INSERT_LEAF";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ relmap_identify(uint8 info)
3636
{
3737
constchar*id=NULL;
3838

39-
switch (info)
39+
switch (info& ~XLR_INFO_MASK)
4040
{
4141
caseXLOG_RELMAP_UPDATE:
4242
id="UPDATE";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ seq_identify(uint8 info)
3535
{
3636
constchar*id=NULL;
3737

38-
switch (info)
38+
switch (info& ~XLR_INFO_MASK)
3939
{
4040
caseXLOG_SEQ_LOG:
4141
id="LOG";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ smgr_identify(uint8 info)
4747
{
4848
constchar*id=NULL;
4949

50-
switch (info)
50+
switch (info& ~XLR_INFO_MASK)
5151
{
5252
caseXLOG_SMGR_CREATE:
5353
id="CREATE";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ spg_identify(uint8 info)
9090
{
9191
constchar*id=NULL;
9292

93-
switch (info)
93+
switch (info& ~XLR_INFO_MASK)
9494
{
9595
caseXLOG_SPGIST_CREATE_INDEX:
9696
id="CREATE_INDEX";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ standby_identify(uint8 info)
6565
{
6666
constchar*id=NULL;
6767

68-
switch (info)
68+
switch (info& ~XLR_INFO_MASK)
6969
{
7070
caseXLOG_STANDBY_LOCK:
7171
id="LOCK";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ tblspc_identify(uint8 info)
4242
{
4343
constchar*id=NULL;
4444

45-
switch (info)
45+
switch (info& ~XLR_INFO_MASK)
4646
{
4747
caseXLOG_TBLSPC_CREATE:
4848
id="CREATE";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ xact_identify(uint8 info)
193193
{
194194
constchar*id=NULL;
195195

196-
switch (info)
196+
switch (info& ~XLR_INFO_MASK)
197197
{
198198
caseXLOG_XACT_COMMIT:
199199
id="COMMIT";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ xlog_identify(uint8 info)
139139
{
140140
constchar*id=NULL;
141141

142-
switch (info)
142+
switch (info& ~XLR_INFO_MASK)
143143
{
144144
caseXLOG_CHECKPOINT_SHUTDOWN:
145145
id="CHECKPOINT_SHUTDOWN";

‎src/backend/access/transam/xlog.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9642,7 +9642,8 @@ xlog_outdesc(StringInfo buf, RmgrId rmid, XLogRecord *record)
96429642

96439643
id=RmgrTable[rmid].rm_identify(record->xl_info);
96449644
if (id==NULL)
9645-
appendStringInfo(buf,"UNKNOWN (%X): ",record->xl_info);
9645+
appendStringInfo(buf,"UNKNOWN (%X): ",
9646+
record->xl_info& ~XLR_INFO_MASK);
96469647
else
96479648
appendStringInfo(buf,"%s: ",id);
96489649

‎src/include/access/xlog_internal.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,6 @@ struct XLogRecord;
244244
* "VACUUM". rm_desc can then be called to obtain additional detail for the
245245
* record, if available (e.g. the last block).
246246
*
247-
* The return value from rm_identify is a pointer to a statically allocated
248-
* buffer, and only valid until the next invocation of the callback.
249-
*
250247
* RmgrTable[] is indexed by RmgrId values (see rmgrlist.h).
251248
*/
252249
typedefstructRmgrData

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp