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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy