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

Commit13dadef

Browse files
committed
Improve coding of log_heap_clean() and heap_xlog_clean().
1 parent88dc31e commit13dadef

File tree

4 files changed

+33
-40
lines changed

4 files changed

+33
-40
lines changed

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

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.150 2003/02/13 05:35:07 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.151 2003/02/23 20:32:11 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -1891,36 +1891,40 @@ heap_restrpos(HeapScanDesc scan)
18911891
}
18921892

18931893
XLogRecPtr
1894-
log_heap_clean(Relationreln,Bufferbuffer,char*unused,intunlen)
1894+
log_heap_clean(Relationreln,Bufferbuffer,OffsetNumber*unused,intuncnt)
18951895
{
18961896
xl_heap_cleanxlrec;
18971897
XLogRecPtrrecptr;
1898-
XLogRecDatardata[3];
1898+
XLogRecDatardata[2];
18991899

19001900
/* Caller should not call me on a temp relation */
19011901
Assert(!reln->rd_istemp);
19021902

19031903
xlrec.node=reln->rd_node;
19041904
xlrec.block=BufferGetBlockNumber(buffer);
1905+
19051906
rdata[0].buffer=InvalidBuffer;
19061907
rdata[0].data= (char*)&xlrec;
19071908
rdata[0].len=SizeOfHeapClean;
19081909
rdata[0].next=&(rdata[1]);
19091910

1910-
if (unlen>0)
1911+
/*
1912+
* The unused-offsets array is not actually in the buffer, but pretend
1913+
* that it is. When XLogInsert stores the whole buffer, the offsets
1914+
* array need not be stored too.
1915+
*/
1916+
rdata[1].buffer=buffer;
1917+
if (uncnt>0)
19111918
{
1912-
rdata[1].buffer=buffer;
1913-
rdata[1].data=unused;
1914-
rdata[1].len=unlen;
1915-
rdata[1].next=&(rdata[2]);
1919+
rdata[1].data= (char*)unused;
1920+
rdata[1].len=uncnt*sizeof(OffsetNumber);
19161921
}
19171922
else
1918-
rdata[0].next=&(rdata[2]);
1919-
1920-
rdata[2].buffer=buffer;
1921-
rdata[2].data=NULL;
1922-
rdata[2].len=0;
1923-
rdata[2].next=NULL;
1923+
{
1924+
rdata[1].data=NULL;
1925+
rdata[1].len=0;
1926+
}
1927+
rdata[1].next=NULL;
19241928

19251929
recptr=XLogInsert(RM_HEAP_ID,XLOG_HEAP_CLEAN,rdata);
19261930

@@ -2032,7 +2036,6 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
20322036
return;
20332037

20342038
reln=XLogOpenRelation(redo,RM_HEAP_ID,xlrec->node);
2035-
20362039
if (!RelationIsValid(reln))
20372040
return;
20382041

@@ -2052,18 +2055,14 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
20522055

20532056
if (record->xl_len>SizeOfHeapClean)
20542057
{
2055-
OffsetNumberunbuf[BLCKSZ /sizeof(OffsetNumber)];
2056-
OffsetNumber*unused=unbuf;
2057-
char*unend;
2058+
OffsetNumber*unused;
2059+
OffsetNumber*unend;
20582060
ItemIdlp;
20592061

2060-
Assert((record->xl_len-SizeOfHeapClean) <=BLCKSZ);
2061-
memcpy((char*)unbuf,
2062-
(char*)xlrec+SizeOfHeapClean,
2063-
record->xl_len-SizeOfHeapClean);
2064-
unend= (char*)unbuf+ (record->xl_len-SizeOfHeapClean);
2062+
unused= (OffsetNumber*) ((char*)xlrec+SizeOfHeapClean);
2063+
unend= (OffsetNumber*) ((char*)xlrec+record->xl_len);
20652064

2066-
while ((char*)unused<unend)
2065+
while (unused<unend)
20672066
{
20682067
lp=PageGetItemId(page,*unused+1);
20692068
lp->lp_flags &= ~LP_USED;

‎src/backend/commands/vacuum.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
*
1515
* IDENTIFICATION
16-
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.248 2003/02/22 00:45:05 tgl Exp $
16+
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.249 2003/02/23 20:32:12 tgl Exp $
1717
*
1818
*-------------------------------------------------------------------------
1919
*/
@@ -2386,8 +2386,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
23862386
if (vacpage->blkno== (blkno-1)&&
23872387
vacpage->offsets_free>0)
23882388
{
2389-
OffsetNumberunbuf[BLCKSZ /sizeof(OffsetNumber)];
2390-
OffsetNumber*unused=unbuf;
2389+
OffsetNumberunused[BLCKSZ /sizeof(OffsetNumber)];
23912390
intuncnt;
23922391

23932392
buf=ReadBuffer(onerel,vacpage->blkno);
@@ -2430,8 +2429,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
24302429
{
24312430
XLogRecPtrrecptr;
24322431

2433-
recptr=log_heap_clean(onerel,buf, (char*)unused,
2434-
(char*) (&(unused[uncnt]))- (char*)unused);
2432+
recptr=log_heap_clean(onerel,buf,unused,uncnt);
24352433
PageSetLSN(page,recptr);
24362434
PageSetSUI(page,ThisStartUpID);
24372435
}
@@ -2555,8 +2553,7 @@ vacuum_heap(VRelStats *vacrelstats, Relation onerel, VacPageList vacuum_pages)
25552553
staticvoid
25562554
vacuum_page(Relationonerel,Bufferbuffer,VacPagevacpage)
25572555
{
2558-
OffsetNumberunbuf[BLCKSZ /sizeof(OffsetNumber)];
2559-
OffsetNumber*unused=unbuf;
2556+
OffsetNumberunused[BLCKSZ /sizeof(OffsetNumber)];
25602557
intuncnt;
25612558
Pagepage=BufferGetPage(buffer);
25622559
ItemIditemid;
@@ -2580,8 +2577,7 @@ vacuum_page(Relation onerel, Buffer buffer, VacPage vacpage)
25802577
{
25812578
XLogRecPtrrecptr;
25822579

2583-
recptr=log_heap_clean(onerel,buffer, (char*)unused,
2584-
(char*) (&(unused[uncnt]))- (char*)unused);
2580+
recptr=log_heap_clean(onerel,buffer,unused,uncnt);
25852581
PageSetLSN(page,recptr);
25862582
PageSetSUI(page,ThisStartUpID);
25872583
}

‎src/backend/commands/vacuumlazy.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
*
3232
*
3333
* IDENTIFICATION
34-
* $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.24 2003/02/22 00:45:05 tgl Exp $
34+
* $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.25 2003/02/23 20:32:12 tgl Exp $
3535
*
3636
*-------------------------------------------------------------------------
3737
*/
@@ -497,8 +497,7 @@ static int
497497
lazy_vacuum_page(Relationonerel,BlockNumberblkno,Bufferbuffer,
498498
inttupindex,LVRelStats*vacrelstats)
499499
{
500-
OffsetNumberunbuf[BLCKSZ /sizeof(OffsetNumber)];
501-
OffsetNumber*unused=unbuf;
500+
OffsetNumberunused[BLCKSZ /sizeof(OffsetNumber)];
502501
intuncnt;
503502
Pagepage=BufferGetPage(buffer);
504503
ItemIditemid;
@@ -524,8 +523,7 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer,
524523
{
525524
XLogRecPtrrecptr;
526525

527-
recptr=log_heap_clean(onerel,buffer, (char*)unused,
528-
(char*) (&(unused[uncnt]))- (char*)unused);
526+
recptr=log_heap_clean(onerel,buffer,unused,uncnt);
529527
PageSetLSN(page,recptr);
530528
PageSetSUI(page,ThisStartUpID);
531529
}

‎src/include/access/heapam.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: heapam.h,v 1.80 2003/02/13 05:35:11 momjian Exp $
10+
* $Id: heapam.h,v 1.81 2003/02/23 20:32:12 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -173,7 +173,7 @@ extern void heap_redo(XLogRecPtr lsn, XLogRecord *rptr);
173173
externvoidheap_undo(XLogRecPtrlsn,XLogRecord*rptr);
174174
externvoidheap_desc(char*buf,uint8xl_info,char*rec);
175175
externXLogRecPtrlog_heap_clean(Relationreln,Bufferbuffer,
176-
char*unused,intunlen);
176+
OffsetNumber*unused,intuncnt);
177177
externXLogRecPtrlog_heap_move(Relationreln,Bufferoldbuf,
178178
ItemPointerDatafrom,
179179
Buffernewbuf,HeapTuplenewtup);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp