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

Commit94d4d24

Browse files
committed
Rename XLOG_BTREE_NEWPAGE xlog record type into XLOG_HEAP_NEWPAGE, and
shift support code into heapam.c accordingly. This is in service ofsoon-to-be-committed ALTER TABLE SET TABLESPACE code that will want touse this same record type for both heaps and indexes.Theoretically I should have forced initdb for this, but in practice thereis no change in xlog contents because CVS tip will never really emit thisrecord type anyhow...
1 parent98e9775 commit94d4d24

File tree

5 files changed

+68
-65
lines changed

5 files changed

+68
-65
lines changed

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

Lines changed: 46 additions & 1 deletion
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.169 2004/06/18 06:13:09 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.170 2004/07/11 18:01:44 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -2189,6 +2189,39 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
21892189
WriteBuffer(buffer);
21902190
}
21912191

2192+
staticvoid
2193+
heap_xlog_newpage(boolredo,XLogRecPtrlsn,XLogRecord*record)
2194+
{
2195+
xl_heap_newpage*xlrec= (xl_heap_newpage*)XLogRecGetData(record);
2196+
Relationreln;
2197+
Bufferbuffer;
2198+
Pagepage;
2199+
2200+
/*
2201+
* Note: the NEWPAGE log record is used for both heaps and indexes,
2202+
* so do not do anything that assumes we are touching a heap.
2203+
*/
2204+
2205+
if (!redo|| (record->xl_info&XLR_BKP_BLOCK_1))
2206+
return;
2207+
2208+
reln=XLogOpenRelation(redo,RM_HEAP_ID,xlrec->node);
2209+
if (!RelationIsValid(reln))
2210+
return;
2211+
buffer=XLogReadBuffer(true,reln,xlrec->blkno);
2212+
if (!BufferIsValid(buffer))
2213+
elog(PANIC,"heap_newpage_redo: no block");
2214+
page= (Page)BufferGetPage(buffer);
2215+
2216+
Assert(record->xl_len==SizeOfHeapNewpage+BLCKSZ);
2217+
memcpy(page, (char*)xlrec+SizeOfHeapNewpage,BLCKSZ);
2218+
2219+
PageSetLSN(page,lsn);
2220+
PageSetSUI(page,ThisStartUpID);
2221+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2222+
WriteBuffer(buffer);
2223+
}
2224+
21922225
staticvoid
21932226
heap_xlog_delete(boolredo,XLogRecPtrlsn,XLogRecord*record)
21942227
{
@@ -2603,6 +2636,8 @@ heap_redo(XLogRecPtr lsn, XLogRecord *record)
26032636
heap_xlog_update(true,lsn,record, true);
26042637
elseif (info==XLOG_HEAP_CLEAN)
26052638
heap_xlog_clean(true,lsn,record);
2639+
elseif (info==XLOG_HEAP_NEWPAGE)
2640+
heap_xlog_newpage(true,lsn,record);
26062641
else
26072642
elog(PANIC,"heap_redo: unknown op code %u",info);
26082643
}
@@ -2623,6 +2658,8 @@ heap_undo(XLogRecPtr lsn, XLogRecord *record)
26232658
heap_xlog_update(false,lsn,record, true);
26242659
elseif (info==XLOG_HEAP_CLEAN)
26252660
heap_xlog_clean(false,lsn,record);
2661+
elseif (info==XLOG_HEAP_NEWPAGE)
2662+
heap_xlog_newpage(false,lsn,record);
26262663
else
26272664
elog(PANIC,"heap_undo: unknown op code %u",info);
26282665
}
@@ -2677,6 +2714,14 @@ heap_desc(char *buf, uint8 xl_info, char *rec)
26772714
xlrec->node.spcNode,xlrec->node.dbNode,
26782715
xlrec->node.relNode,xlrec->block);
26792716
}
2717+
elseif (info==XLOG_HEAP_NEWPAGE)
2718+
{
2719+
xl_heap_newpage*xlrec= (xl_heap_newpage*)rec;
2720+
2721+
sprintf(buf+strlen(buf),"newpage: rel %u/%u/%u; blk %u",
2722+
xlrec->node.spcNode,xlrec->node.dbNode,
2723+
xlrec->node.relNode,xlrec->blkno);
2724+
}
26802725
else
26812726
strcat(buf,"UNKNOWN");
26822727
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
* Portions Copyright (c) 1994, Regents of the University of California
5757
*
5858
* IDENTIFICATION
59-
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.82 2004/06/02 17:28:17 tgl Exp $
59+
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.83 2004/07/11 18:01:45 tgl Exp $
6060
*
6161
*-------------------------------------------------------------------------
6262
*/
@@ -280,7 +280,8 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
280280
/* XLOG stuff */
281281
if (wstate->btws_use_wal)
282282
{
283-
xl_btree_newpagexlrec;
283+
/* We use the heap NEWPAGE record type for this */
284+
xl_heap_newpagexlrec;
284285
XLogRecPtrrecptr;
285286
XLogRecDatardata[2];
286287

@@ -292,15 +293,15 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
292293

293294
rdata[0].buffer=InvalidBuffer;
294295
rdata[0].data= (char*)&xlrec;
295-
rdata[0].len=SizeOfBtreeNewpage;
296+
rdata[0].len=SizeOfHeapNewpage;
296297
rdata[0].next=&(rdata[1]);
297298

298299
rdata[1].buffer=InvalidBuffer;
299300
rdata[1].data= (char*)page;
300301
rdata[1].len=BLCKSZ;
301302
rdata[1].next=NULL;
302303

303-
recptr=XLogInsert(RM_BTREE_ID,XLOG_BTREE_NEWPAGE,rdata);
304+
recptr=XLogInsert(RM_HEAP_ID,XLOG_HEAP_NEWPAGE,rdata);
304305

305306
PageSetLSN(page,recptr);
306307
PageSetSUI(page,ThisStartUpID);

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

Lines changed: 1 addition & 44 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.14 2004/06/18 06:13:11 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.15 2004/07/11 18:01:45 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -669,34 +669,6 @@ btree_xlog_newmeta(bool redo, XLogRecPtr lsn, XLogRecord *record)
669669
xlrec->meta.fastroot,xlrec->meta.fastlevel);
670670
}
671671

672-
staticvoid
673-
btree_xlog_newpage(boolredo,XLogRecPtrlsn,XLogRecord*record)
674-
{
675-
xl_btree_newpage*xlrec= (xl_btree_newpage*)XLogRecGetData(record);
676-
Relationreln;
677-
Bufferbuffer;
678-
Pagepage;
679-
680-
if (!redo|| (record->xl_info&XLR_BKP_BLOCK_1))
681-
return;
682-
683-
reln=XLogOpenRelation(redo,RM_BTREE_ID,xlrec->node);
684-
if (!RelationIsValid(reln))
685-
return;
686-
buffer=XLogReadBuffer(true,reln,xlrec->blkno);
687-
if (!BufferIsValid(buffer))
688-
elog(PANIC,"btree_newpage_redo: block unfound");
689-
page= (Page)BufferGetPage(buffer);
690-
691-
Assert(record->xl_len==SizeOfBtreeNewpage+BLCKSZ);
692-
memcpy(page, (char*)xlrec+SizeOfBtreeNewpage,BLCKSZ);
693-
694-
PageSetLSN(page,lsn);
695-
PageSetSUI(page,ThisStartUpID);
696-
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
697-
WriteBuffer(buffer);
698-
}
699-
700672

701673
void
702674
btree_redo(XLogRecPtrlsn,XLogRecord*record)
@@ -741,9 +713,6 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record)
741713
caseXLOG_BTREE_NEWMETA:
742714
btree_xlog_newmeta(true,lsn,record);
743715
break;
744-
caseXLOG_BTREE_NEWPAGE:
745-
btree_xlog_newpage(true,lsn,record);
746-
break;
747716
default:
748717
elog(PANIC,"btree_redo: unknown op code %u",info);
749718
}
@@ -792,9 +761,6 @@ btree_undo(XLogRecPtr lsn, XLogRecord *record)
792761
caseXLOG_BTREE_NEWMETA:
793762
btree_xlog_newmeta(false,lsn,record);
794763
break;
795-
caseXLOG_BTREE_NEWPAGE:
796-
btree_xlog_newpage(false,lsn,record);
797-
break;
798764
default:
799765
elog(PANIC,"btree_undo: unknown op code %u",info);
800766
}
@@ -921,15 +887,6 @@ btree_desc(char *buf, uint8 xl_info, char *rec)
921887
xlrec->meta.fastroot,xlrec->meta.fastlevel);
922888
break;
923889
}
924-
caseXLOG_BTREE_NEWPAGE:
925-
{
926-
xl_btree_newpage*xlrec= (xl_btree_newpage*)rec;
927-
928-
sprintf(buf+strlen(buf),"newpage: rel %u/%u/%u; page %u",
929-
xlrec->node.spcNode,xlrec->node.dbNode,
930-
xlrec->node.relNode,xlrec->blkno);
931-
break;
932-
}
933890
default:
934891
strcat(buf,"UNKNOWN");
935892
break;

‎src/include/access/htup.h

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/access/htup.h,v 1.66 2004/07/01 00:51:38 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/access/htup.h,v 1.67 2004/07/11 18:01:45 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -423,6 +423,8 @@ typedef HeapTupleData *HeapTuple;
423423
#defineXLOG_HEAP_UPDATE0x20
424424
#defineXLOG_HEAP_MOVE0x30
425425
#defineXLOG_HEAP_CLEAN0x40
426+
#defineXLOG_HEAP_NEWPAGE0x50
427+
/* opcodes 0x60, 0x70 still free */
426428
#defineXLOG_HEAP_OPMASK0x70
427429
/*
428430
* When we insert 1st item on new page in INSERT/UPDATE
@@ -491,7 +493,7 @@ typedef struct xl_heap_update
491493

492494
#defineSizeOfHeapUpdate(offsetof(xl_heap_update, newtid) + SizeOfIptrData)
493495

494-
/* This is what we need to know about page cleanup */
496+
/* This is what we need to know aboutvacuumpage cleanup */
495497
typedefstructxl_heap_clean
496498
{
497499
RelFileNodenode;
@@ -501,4 +503,15 @@ typedef struct xl_heap_clean
501503

502504
#defineSizeOfHeapClean (offsetof(xl_heap_clean, block) + sizeof(BlockNumber))
503505

506+
/* This is for replacing a page's contents in toto */
507+
/* NB: this is used for indexes as well as heaps */
508+
typedefstructxl_heap_newpage
509+
{
510+
RelFileNodenode;
511+
BlockNumberblkno;/* location of new page */
512+
/* entire page contents follow at end of record */
513+
}xl_heap_newpage;
514+
515+
#defineSizeOfHeapNewpage(offsetof(xl_heap_newpage, blkno) + sizeof(BlockNumber))
516+
504517
#endif/* HTUP_H */

‎src/include/access/nbtree.h

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/access/nbtree.h,v 1.78 2004/06/02 17:28:18 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/access/nbtree.h,v 1.79 2004/07/11 18:01:45 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -197,7 +197,6 @@ typedef BTItemData *BTItem;
197197
* metapage */
198198
#defineXLOG_BTREE_NEWROOT0xA0/* new root page */
199199
#defineXLOG_BTREE_NEWMETA0xB0/* update metadata page */
200-
#defineXLOG_BTREE_NEWPAGE0xC0/* new index page during build */
201200

202201
/*
203202
* All that we need to find changed index tuple
@@ -324,18 +323,6 @@ typedef struct xl_btree_newmeta
324323

325324
#defineSizeOfBtreeNewmeta(sizeof(xl_btree_newmeta))
326325

327-
/*
328-
* New index page log record. This is only used while building a new index.
329-
*/
330-
typedefstructxl_btree_newpage
331-
{
332-
RelFileNodenode;
333-
BlockNumberblkno;/* location of new page */
334-
/* entire page contents follow at end of record */
335-
}xl_btree_newpage;
336-
337-
#defineSizeOfBtreeNewpage(offsetof(xl_btree_newpage, blkno) + sizeof(BlockNumber))
338-
339326

340327
/*
341328
*Operator strategy numbers for B-tree have been moved to access/skey.h,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp