Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 94d4d24

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 of soon-to-be-committed ALTER TABLE SET TABLESPACE code that will want to use this same record type for both heaps and indexes. Theoretically I should have forced initdb for this, but in practice there is no change in xlog contents because CVS tip will never really emit this record type anyhow...
1 parent 98e9775 commit 94d4d24

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+
static void
2193+
heap_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record)
2194+
{
2195+
xl_heap_newpage *xlrec = (xl_heap_newpage *) XLogRecGetData(record);
2196+
Relation reln;
2197+
Buffer buffer;
2198+
Page page;
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
static void
21932226
heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
21942227
{
@@ -2603,6 +2636,8 @@ heap_redo(XLogRecPtr lsn, XLogRecord *record)
26032636
heap_xlog_update(true, lsn, record, true);
26042637
else if (info == XLOG_HEAP_CLEAN)
26052638
heap_xlog_clean(true, lsn, record);
2639+
else if (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
else if (info == XLOG_HEAP_CLEAN)
26252660
heap_xlog_clean(false, lsn, record);
2661+
else if (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+
else if (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_newpage xlrec;
283+
/* We use the heap NEWPAGE record type for this */
284+
xl_heap_newpage xlrec;
284285
XLogRecPtr recptr;
285286
XLogRecData rdata[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-
static void
673-
btree_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record)
674-
{
675-
xl_btree_newpage *xlrec = (xl_btree_newpage *) XLogRecGetData(record);
676-
Relation reln;
677-
Buffer buffer;
678-
Page page;
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(XLogRecPtr lsn, XLogRecord *record)
@@ -741,9 +713,6 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record)
741713
case XLOG_BTREE_NEWMETA:
742714
btree_xlog_newmeta(true, lsn, record);
743715
break;
744-
case XLOG_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
case XLOG_BTREE_NEWMETA:
793762
btree_xlog_newmeta(false, lsn, record);
794763
break;
795-
case XLOG_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-
case XLOG_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
#define XLOG_HEAP_UPDATE 0x20
424424
#define XLOG_HEAP_MOVE 0x30
425425
#define XLOG_HEAP_CLEAN 0x40
426+
#define XLOG_HEAP_NEWPAGE 0x50
427+
/* opcodes 0x60, 0x70 still free */
426428
#define XLOG_HEAP_OPMASK 0x70
427429
/*
428430
* When we insert 1st item on new page in INSERT/UPDATE
@@ -491,7 +493,7 @@ typedef struct xl_heap_update
491493

492494
#define SizeOfHeapUpdate (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 about vacuum page cleanup */
495497
typedef struct xl_heap_clean
496498
{
497499
RelFileNode node;
@@ -501,4 +503,15 @@ typedef struct xl_heap_clean
501503

502504
#define SizeOfHeapClean (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+
typedef struct xl_heap_newpage
509+
{
510+
RelFileNode node;
511+
BlockNumber blkno; /* location of new page */
512+
/* entire page contents follow at end of record */
513+
} xl_heap_newpage;
514+
515+
#define SizeOfHeapNewpage (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
#define XLOG_BTREE_NEWROOT 0xA0 /* new root page */
199199
#define XLOG_BTREE_NEWMETA 0xB0 /* update metadata page */
200-
#define XLOG_BTREE_NEWPAGE 0xC0 /* 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
#define SizeOfBtreeNewmeta (sizeof(xl_btree_newmeta))
326325

327-
/*
328-
* New index page log record. This is only used while building a new index.
329-
*/
330-
typedef struct xl_btree_newpage
331-
{
332-
RelFileNode node;
333-
BlockNumber blkno; /* location of new page */
334-
/* entire page contents follow at end of record */
335-
} xl_btree_newpage;
336-
337-
#define SizeOfBtreeNewpage (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)