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

Commit0a20207

Browse files
committed
Arrange to emit a description of the current XLOG record as error context
when an error occurs during xlog replay. Also, replace the former risky'write into a fixed-size buffer with no overflow detection' API for XLOGrecord description routines; use an expansible StringInfo instead. (Thelatter accounts for most of the patch bulk.)Qingqing Zhou
1 parent4fb9271 commit0a20207

File tree

25 files changed

+198
-160
lines changed

25 files changed

+198
-160
lines changed

‎src/backend/access/gist/gistxlog.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/gist/gistxlog.c,v 1.10 2006/03/05 15:58:20 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gist/gistxlog.c,v 1.11 2006/03/24 04:32:12 tgl Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414
#include"postgres.h"
@@ -442,67 +442,67 @@ gist_redo(XLogRecPtr lsn, XLogRecord *record)
442442
}
443443

444444
staticvoid
445-
out_target(char*buf,RelFileNodenode,ItemPointerDatakey)
445+
out_target(StringInfobuf,RelFileNodenode,ItemPointerDatakey)
446446
{
447-
sprintf(buf+strlen(buf),"rel %u/%u/%u; tid %u/%u",
447+
appendStringInfo(buf,"rel %u/%u/%u; tid %u/%u",
448448
node.spcNode,node.dbNode,node.relNode,
449449
ItemPointerGetBlockNumber(&key),
450450
ItemPointerGetOffsetNumber(&key));
451451
}
452452

453453
staticvoid
454-
out_gistxlogEntryUpdate(char*buf,gistxlogEntryUpdate*xlrec)
454+
out_gistxlogEntryUpdate(StringInfobuf,gistxlogEntryUpdate*xlrec)
455455
{
456456
out_target(buf,xlrec->node,xlrec->key);
457-
sprintf(buf+strlen(buf),"; block number %u",
458-
xlrec->blkno);
457+
appendStringInfo(buf,"; block number %u",xlrec->blkno);
459458
}
460459

461460
staticvoid
462-
out_gistxlogPageSplit(char*buf,gistxlogPageSplit*xlrec)
461+
out_gistxlogPageSplit(StringInfobuf,gistxlogPageSplit*xlrec)
463462
{
464-
strcat(buf,"page_split: ");
463+
appendStringInfo(buf,"page_split: ");
465464
out_target(buf,xlrec->node,xlrec->key);
466-
sprintf(buf+strlen(buf),"; block number %u splits to %d pages",
465+
appendStringInfo(buf,"; block number %u splits to %d pages",
467466
xlrec->origblkno,xlrec->npage);
468467
}
469468

470469
void
471-
gist_desc(char*buf,uint8xl_info,char*rec)
470+
gist_desc(StringInfobuf,uint8xl_info,char*rec)
472471
{
473472
uint8info=xl_info& ~XLR_INFO_MASK;
474473

475474
switch (info)
476475
{
477476
caseXLOG_GIST_ENTRY_UPDATE:
478-
strcat(buf,"entry_update: ");
477+
appendStringInfo(buf,"entry_update: ");
479478
out_gistxlogEntryUpdate(buf, (gistxlogEntryUpdate*)rec);
480479
break;
481480
caseXLOG_GIST_ENTRY_DELETE:
482-
strcat(buf,"entry_delete: ");
481+
appendStringInfo(buf,"entry_delete: ");
483482
out_gistxlogEntryUpdate(buf, (gistxlogEntryUpdate*)rec);
484483
break;
485484
caseXLOG_GIST_NEW_ROOT:
486-
strcat(buf,"new_root: ");
485+
appendStringInfo(buf,"new_root: ");
487486
out_target(buf, ((gistxlogEntryUpdate*)rec)->node, ((gistxlogEntryUpdate*)rec)->key);
488487
break;
489488
caseXLOG_GIST_PAGE_SPLIT:
490489
out_gistxlogPageSplit(buf, (gistxlogPageSplit*)rec);
491490
break;
492491
caseXLOG_GIST_CREATE_INDEX:
493-
sprintf(buf+strlen(buf),"create_index: rel %u/%u/%u",
492+
appendStringInfo(buf,"create_index: rel %u/%u/%u",
494493
((RelFileNode*)rec)->spcNode,
495494
((RelFileNode*)rec)->dbNode,
496495
((RelFileNode*)rec)->relNode);
497496
break;
498497
caseXLOG_GIST_INSERT_COMPLETE:
499-
sprintf(buf+strlen(buf),"complete_insert: rel %u/%u/%u",
498+
appendStringInfo(buf,"complete_insert: rel %u/%u/%u",
500499
((gistxlogInsertComplete*)rec)->node.spcNode,
501500
((gistxlogInsertComplete*)rec)->node.dbNode,
502501
((gistxlogInsertComplete*)rec)->node.relNode);
503502
break;
504503
default:
505-
elog(PANIC,"gist_desc: unknown op code %u",info);
504+
appendStringInfo(buf,"unknown gist op code %u",info);
505+
break;
506506
}
507507
}
508508

‎src/backend/access/hash/hash.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.87 2006/03/05 15:58:20 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.88 2006/03/24 04:32:12 tgl Exp $
1212
*
1313
* NOTES
1414
* This file contains only the public interface routines.
@@ -675,6 +675,6 @@ hash_redo(XLogRecPtr lsn, XLogRecord *record)
675675
}
676676

677677
void
678-
hash_desc(char*buf,uint8xl_info,char*rec)
678+
hash_desc(StringInfobuf,uint8xl_info,char*rec)
679679
{
680680
}

‎src/backend/access/heap/heapam.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.208 2006/03/05 15:58:21 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.209 2006/03/24 04:32:12 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -3363,16 +3363,16 @@ heap_redo(XLogRecPtr lsn, XLogRecord *record)
33633363
}
33643364

33653365
staticvoid
3366-
out_target(char*buf,xl_heaptid*target)
3366+
out_target(StringInfobuf,xl_heaptid*target)
33673367
{
3368-
sprintf(buf+strlen(buf),"rel %u/%u/%u; tid %u/%u",
3368+
appendStringInfo(buf,"rel %u/%u/%u; tid %u/%u",
33693369
target->node.spcNode,target->node.dbNode,target->node.relNode,
33703370
ItemPointerGetBlockNumber(&(target->tid)),
33713371
ItemPointerGetOffsetNumber(&(target->tid)));
33723372
}
33733373

33743374
void
3375-
heap_desc(char*buf,uint8xl_info,char*rec)
3375+
heap_desc(StringInfobuf,uint8xl_info,char*rec)
33763376
{
33773377
uint8info=xl_info& ~XLR_INFO_MASK;
33783378

@@ -3381,42 +3381,42 @@ heap_desc(char *buf, uint8 xl_info, char *rec)
33813381
{
33823382
xl_heap_insert*xlrec= (xl_heap_insert*)rec;
33833383

3384-
strcat(buf,"insert: ");
3384+
appendStringInfo(buf,"insert: ");
33853385
out_target(buf,&(xlrec->target));
33863386
}
33873387
elseif (info==XLOG_HEAP_DELETE)
33883388
{
33893389
xl_heap_delete*xlrec= (xl_heap_delete*)rec;
33903390

3391-
strcat(buf,"delete: ");
3391+
appendStringInfo(buf,"delete: ");
33923392
out_target(buf,&(xlrec->target));
33933393
}
33943394
elseif (info==XLOG_HEAP_UPDATE||info==XLOG_HEAP_MOVE)
33953395
{
33963396
xl_heap_update*xlrec= (xl_heap_update*)rec;
33973397

33983398
if (info==XLOG_HEAP_UPDATE)
3399-
strcat(buf,"update: ");
3399+
appendStringInfo(buf,"update: ");
34003400
else
3401-
strcat(buf,"move: ");
3401+
appendStringInfo(buf,"move: ");
34023402
out_target(buf,&(xlrec->target));
3403-
sprintf(buf+strlen(buf),"; new %u/%u",
3403+
appendStringInfo(buf,"; new %u/%u",
34043404
ItemPointerGetBlockNumber(&(xlrec->newtid)),
34053405
ItemPointerGetOffsetNumber(&(xlrec->newtid)));
34063406
}
34073407
elseif (info==XLOG_HEAP_CLEAN)
34083408
{
34093409
xl_heap_clean*xlrec= (xl_heap_clean*)rec;
34103410

3411-
sprintf(buf+strlen(buf),"clean: rel %u/%u/%u; blk %u",
3411+
appendStringInfo(buf,"clean: rel %u/%u/%u; blk %u",
34123412
xlrec->node.spcNode,xlrec->node.dbNode,
34133413
xlrec->node.relNode,xlrec->block);
34143414
}
34153415
elseif (info==XLOG_HEAP_NEWPAGE)
34163416
{
34173417
xl_heap_newpage*xlrec= (xl_heap_newpage*)rec;
34183418

3419-
sprintf(buf+strlen(buf),"newpage: rel %u/%u/%u; blk %u",
3419+
appendStringInfo(buf,"newpage: rel %u/%u/%u; blk %u",
34203420
xlrec->node.spcNode,xlrec->node.dbNode,
34213421
xlrec->node.relNode,xlrec->blkno);
34223422
}
@@ -3425,16 +3425,16 @@ heap_desc(char *buf, uint8 xl_info, char *rec)
34253425
xl_heap_lock*xlrec= (xl_heap_lock*)rec;
34263426

34273427
if (xlrec->shared_lock)
3428-
strcat(buf,"shared_lock: ");
3428+
appendStringInfo(buf,"shared_lock: ");
34293429
else
3430-
strcat(buf,"exclusive_lock: ");
3430+
appendStringInfo(buf,"exclusive_lock: ");
34313431
if (xlrec->xid_is_mxact)
3432-
strcat(buf,"mxid ");
3432+
appendStringInfo(buf,"mxid ");
34333433
else
3434-
strcat(buf,"xid ");
3435-
sprintf(buf+strlen(buf),"%u ",xlrec->locking_xid);
3434+
appendStringInfo(buf,"xid ");
3435+
appendStringInfo(buf,"%u ",xlrec->locking_xid);
34363436
out_target(buf,&(xlrec->target));
34373437
}
34383438
else
3439-
strcat(buf,"UNKNOWN");
3439+
appendStringInfo(buf,"UNKNOWN");
34403440
}

‎src/backend/access/nbtree/nbtxlog.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.26 2006/03/05 15:58:21 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.27 2006/03/24 04:32:12 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -650,16 +650,16 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record)
650650
}
651651

652652
staticvoid
653-
out_target(char*buf,xl_btreetid*target)
653+
out_target(StringInfobuf,xl_btreetid*target)
654654
{
655-
sprintf(buf+strlen(buf),"rel %u/%u/%u; tid %u/%u",
655+
appendStringInfo(buf,"rel %u/%u/%u; tid %u/%u",
656656
target->node.spcNode,target->node.dbNode,target->node.relNode,
657657
ItemPointerGetBlockNumber(&(target->tid)),
658658
ItemPointerGetOffsetNumber(&(target->tid)));
659659
}
660660

661661
void
662-
btree_desc(char*buf,uint8xl_info,char*rec)
662+
btree_desc(StringInfobuf,uint8xl_info,char*rec)
663663
{
664664
uint8info=xl_info& ~XLR_INFO_MASK;
665665

@@ -669,71 +669,71 @@ btree_desc(char *buf, uint8 xl_info, char *rec)
669669
{
670670
xl_btree_insert*xlrec= (xl_btree_insert*)rec;
671671

672-
strcat(buf,"insert: ");
672+
appendStringInfo(buf,"insert: ");
673673
out_target(buf,&(xlrec->target));
674674
break;
675675
}
676676
caseXLOG_BTREE_INSERT_UPPER:
677677
{
678678
xl_btree_insert*xlrec= (xl_btree_insert*)rec;
679679

680-
strcat(buf,"insert_upper: ");
680+
appendStringInfo(buf,"insert_upper: ");
681681
out_target(buf,&(xlrec->target));
682682
break;
683683
}
684684
caseXLOG_BTREE_INSERT_META:
685685
{
686686
xl_btree_insert*xlrec= (xl_btree_insert*)rec;
687687

688-
strcat(buf,"insert_meta: ");
688+
appendStringInfo(buf,"insert_meta: ");
689689
out_target(buf,&(xlrec->target));
690690
break;
691691
}
692692
caseXLOG_BTREE_SPLIT_L:
693693
{
694694
xl_btree_split*xlrec= (xl_btree_split*)rec;
695695

696-
strcat(buf,"split_l: ");
696+
appendStringInfo(buf,"split_l: ");
697697
out_target(buf,&(xlrec->target));
698-
sprintf(buf+strlen(buf),"; oth %u; rgh %u",
698+
appendStringInfo(buf,"; oth %u; rgh %u",
699699
xlrec->otherblk,xlrec->rightblk);
700700
break;
701701
}
702702
caseXLOG_BTREE_SPLIT_R:
703703
{
704704
xl_btree_split*xlrec= (xl_btree_split*)rec;
705705

706-
strcat(buf,"split_r: ");
706+
appendStringInfo(buf,"split_r: ");
707707
out_target(buf,&(xlrec->target));
708-
sprintf(buf+strlen(buf),"; oth %u; rgh %u",
708+
appendStringInfo(buf,"; oth %u; rgh %u",
709709
xlrec->otherblk,xlrec->rightblk);
710710
break;
711711
}
712712
caseXLOG_BTREE_SPLIT_L_ROOT:
713713
{
714714
xl_btree_split*xlrec= (xl_btree_split*)rec;
715715

716-
strcat(buf,"split_l_root: ");
716+
appendStringInfo(buf,"split_l_root: ");
717717
out_target(buf,&(xlrec->target));
718-
sprintf(buf+strlen(buf),"; oth %u; rgh %u",
718+
appendStringInfo(buf,"; oth %u; rgh %u",
719719
xlrec->otherblk,xlrec->rightblk);
720720
break;
721721
}
722722
caseXLOG_BTREE_SPLIT_R_ROOT:
723723
{
724724
xl_btree_split*xlrec= (xl_btree_split*)rec;
725725

726-
strcat(buf,"split_r_root: ");
726+
appendStringInfo(buf,"split_r_root: ");
727727
out_target(buf,&(xlrec->target));
728-
sprintf(buf+strlen(buf),"; oth %u; rgh %u",
728+
appendStringInfo(buf,"; oth %u; rgh %u",
729729
xlrec->otherblk,xlrec->rightblk);
730730
break;
731731
}
732732
caseXLOG_BTREE_DELETE:
733733
{
734734
xl_btree_delete*xlrec= (xl_btree_delete*)rec;
735735

736-
sprintf(buf+strlen(buf),"delete: rel %u/%u/%u; blk %u",
736+
appendStringInfo(buf,"delete: rel %u/%u/%u; blk %u",
737737
xlrec->node.spcNode,xlrec->node.dbNode,
738738
xlrec->node.relNode,xlrec->block);
739739
break;
@@ -743,17 +743,17 @@ btree_desc(char *buf, uint8 xl_info, char *rec)
743743
{
744744
xl_btree_delete_page*xlrec= (xl_btree_delete_page*)rec;
745745

746-
strcat(buf,"delete_page: ");
746+
appendStringInfo(buf,"delete_page: ");
747747
out_target(buf,&(xlrec->target));
748-
sprintf(buf+strlen(buf),"; dead %u; left %u; right %u",
748+
appendStringInfo(buf,"; dead %u; left %u; right %u",
749749
xlrec->deadblk,xlrec->leftblk,xlrec->rightblk);
750750
break;
751751
}
752752
caseXLOG_BTREE_NEWROOT:
753753
{
754754
xl_btree_newroot*xlrec= (xl_btree_newroot*)rec;
755755

756-
sprintf(buf+strlen(buf),"newroot: rel %u/%u/%u; root %u lev %u",
756+
appendStringInfo(buf,"newroot: rel %u/%u/%u; root %u lev %u",
757757
xlrec->node.spcNode,xlrec->node.dbNode,
758758
xlrec->node.relNode,
759759
xlrec->rootblk,xlrec->level);
@@ -763,15 +763,15 @@ btree_desc(char *buf, uint8 xl_info, char *rec)
763763
{
764764
xl_btree_newmeta*xlrec= (xl_btree_newmeta*)rec;
765765

766-
sprintf(buf+strlen(buf),"newmeta: rel %u/%u/%u; root %u lev %u fast %u lev %u",
766+
appendStringInfo(buf,"newmeta: rel %u/%u/%u; root %u lev %u fast %u lev %u",
767767
xlrec->node.spcNode,xlrec->node.dbNode,
768768
xlrec->node.relNode,
769769
xlrec->meta.root,xlrec->meta.level,
770770
xlrec->meta.fastroot,xlrec->meta.fastlevel);
771771
break;
772772
}
773773
default:
774-
strcat(buf,"UNKNOWN");
774+
appendStringInfo(buf,"UNKNOWN");
775775
break;
776776
}
777777
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
2525
* Portions Copyright (c) 1994, Regents of the University of California
2626
*
27-
* $PostgreSQL: pgsql/src/backend/access/transam/clog.c,v 1.37 2006/03/05 15:58:21 momjian Exp $
27+
* $PostgreSQL: pgsql/src/backend/access/transam/clog.c,v 1.38 2006/03/24 04:32:12 tgl Exp $
2828
*
2929
*-------------------------------------------------------------------------
3030
*/
@@ -412,17 +412,17 @@ clog_redo(XLogRecPtr lsn, XLogRecord *record)
412412
}
413413

414414
void
415-
clog_desc(char*buf,uint8xl_info,char*rec)
415+
clog_desc(StringInfobuf,uint8xl_info,char*rec)
416416
{
417-
uint8info=xl_info& ~XLR_INFO_MASK;
417+
uint8info=xl_info& ~XLR_INFO_MASK;
418418

419419
if (info==CLOG_ZEROPAGE)
420420
{
421421
intpageno;
422422

423423
memcpy(&pageno,rec,sizeof(int));
424-
sprintf(buf+strlen(buf),"zeropage: %d",pageno);
424+
appendStringInfo(buf,"zeropage: %d",pageno);
425425
}
426426
else
427-
strcat(buf,"UNKNOWN");
427+
appendStringInfo(buf,"UNKNOWN");
428428
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp