aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access')
-rw-r--r--src/backend/access/heap/heapam.c47
-rw-r--r--src/backend/access/nbtree/nbtsort.c9
-rw-r--r--src/backend/access/nbtree/nbtxlog.c45
3 files changed, 52 insertions, 49 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 8e595c18cb8..f0be8123f5c 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.169 2004/06/18 06:13:09 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.170 2004/07/11 18:01:44 tgl Exp $
*
*
* INTERFACE ROUTINES
@@ -2190,6 +2190,39 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
}
static void
+heap_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record)
+{
+ xl_heap_newpage *xlrec = (xl_heap_newpage *) XLogRecGetData(record);
+ Relation reln;
+ Buffer buffer;
+ Page page;
+
+ /*
+ * Note: the NEWPAGE log record is used for both heaps and indexes,
+ * so do not do anything that assumes we are touching a heap.
+ */
+
+ if (!redo || (record->xl_info & XLR_BKP_BLOCK_1))
+ return;
+
+ reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->node);
+ if (!RelationIsValid(reln))
+ return;
+ buffer = XLogReadBuffer(true, reln, xlrec->blkno);
+ if (!BufferIsValid(buffer))
+ elog(PANIC, "heap_newpage_redo: no block");
+ page = (Page) BufferGetPage(buffer);
+
+ Assert(record->xl_len == SizeOfHeapNewpage + BLCKSZ);
+ memcpy(page, (char *) xlrec + SizeOfHeapNewpage, BLCKSZ);
+
+ PageSetLSN(page, lsn);
+ PageSetSUI(page, ThisStartUpID);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
+}
+
+static void
heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
{
xl_heap_delete *xlrec = (xl_heap_delete *) XLogRecGetData(record);
@@ -2603,6 +2636,8 @@ heap_redo(XLogRecPtr lsn, XLogRecord *record)
heap_xlog_update(true, lsn, record, true);
else if (info == XLOG_HEAP_CLEAN)
heap_xlog_clean(true, lsn, record);
+ else if (info == XLOG_HEAP_NEWPAGE)
+ heap_xlog_newpage(true, lsn, record);
else
elog(PANIC, "heap_redo: unknown op code %u", info);
}
@@ -2623,6 +2658,8 @@ heap_undo(XLogRecPtr lsn, XLogRecord *record)
heap_xlog_update(false, lsn, record, true);
else if (info == XLOG_HEAP_CLEAN)
heap_xlog_clean(false, lsn, record);
+ else if (info == XLOG_HEAP_NEWPAGE)
+ heap_xlog_newpage(false, lsn, record);
else
elog(PANIC, "heap_undo: unknown op code %u", info);
}
@@ -2677,6 +2714,14 @@ heap_desc(char *buf, uint8 xl_info, char *rec)
xlrec->node.spcNode, xlrec->node.dbNode,
xlrec->node.relNode, xlrec->block);
}
+ else if (info == XLOG_HEAP_NEWPAGE)
+ {
+ xl_heap_newpage *xlrec = (xl_heap_newpage *) rec;
+
+ sprintf(buf + strlen(buf), "newpage: rel %u/%u/%u; blk %u",
+ xlrec->node.spcNode, xlrec->node.dbNode,
+ xlrec->node.relNode, xlrec->blkno);
+ }
else
strcat(buf, "UNKNOWN");
}
diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c
index ba0383c0bcd..bdd063daa31 100644
--- a/src/backend/access/nbtree/nbtsort.c
+++ b/src/backend/access/nbtree/nbtsort.c
@@ -56,7 +56,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.82 2004/06/02 17:28:17 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.83 2004/07/11 18:01:45 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -280,7 +280,8 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
/* XLOG stuff */
if (wstate->btws_use_wal)
{
- xl_btree_newpage xlrec;
+ /* We use the heap NEWPAGE record type for this */
+ xl_heap_newpage xlrec;
XLogRecPtr recptr;
XLogRecData rdata[2];
@@ -292,7 +293,7 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
rdata[0].buffer = InvalidBuffer;
rdata[0].data = (char *) &xlrec;
- rdata[0].len = SizeOfBtreeNewpage;
+ rdata[0].len = SizeOfHeapNewpage;
rdata[0].next = &(rdata[1]);
rdata[1].buffer = InvalidBuffer;
@@ -300,7 +301,7 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
rdata[1].len = BLCKSZ;
rdata[1].next = NULL;
- recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_NEWPAGE, rdata);
+ recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_NEWPAGE, rdata);
PageSetLSN(page, recptr);
PageSetSUI(page, ThisStartUpID);
diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c
index 3cb2f3836d2..73e2ddf287c 100644
--- a/src/backend/access/nbtree/nbtxlog.c
+++ b/src/backend/access/nbtree/nbtxlog.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.14 2004/06/18 06:13:11 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.15 2004/07/11 18:01:45 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -669,34 +669,6 @@ btree_xlog_newmeta(bool redo, XLogRecPtr lsn, XLogRecord *record)
xlrec->meta.fastroot, xlrec->meta.fastlevel);
}
-static void
-btree_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record)
-{
- xl_btree_newpage *xlrec = (xl_btree_newpage *) XLogRecGetData(record);
- Relation reln;
- Buffer buffer;
- Page page;
-
- if (!redo || (record->xl_info & XLR_BKP_BLOCK_1))
- return;
-
- reln = XLogOpenRelation(redo, RM_BTREE_ID, xlrec->node);
- if (!RelationIsValid(reln))
- return;
- buffer = XLogReadBuffer(true, reln, xlrec->blkno);
- if (!BufferIsValid(buffer))
- elog(PANIC, "btree_newpage_redo: block unfound");
- page = (Page) BufferGetPage(buffer);
-
- Assert(record->xl_len == SizeOfBtreeNewpage + BLCKSZ);
- memcpy(page, (char *) xlrec + SizeOfBtreeNewpage, BLCKSZ);
-
- PageSetLSN(page, lsn);
- PageSetSUI(page, ThisStartUpID);
- LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
- WriteBuffer(buffer);
-}
-
void
btree_redo(XLogRecPtr lsn, XLogRecord *record)
@@ -741,9 +713,6 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record)
case XLOG_BTREE_NEWMETA:
btree_xlog_newmeta(true, lsn, record);
break;
- case XLOG_BTREE_NEWPAGE:
- btree_xlog_newpage(true, lsn, record);
- break;
default:
elog(PANIC, "btree_redo: unknown op code %u", info);
}
@@ -792,9 +761,6 @@ btree_undo(XLogRecPtr lsn, XLogRecord *record)
case XLOG_BTREE_NEWMETA:
btree_xlog_newmeta(false, lsn, record);
break;
- case XLOG_BTREE_NEWPAGE:
- btree_xlog_newpage(false, lsn, record);
- break;
default:
elog(PANIC, "btree_undo: unknown op code %u", info);
}
@@ -921,15 +887,6 @@ btree_desc(char *buf, uint8 xl_info, char *rec)
xlrec->meta.fastroot, xlrec->meta.fastlevel);
break;
}
- case XLOG_BTREE_NEWPAGE:
- {
- xl_btree_newpage *xlrec = (xl_btree_newpage *) rec;
-
- sprintf(buf + strlen(buf), "newpage: rel %u/%u/%u; page %u",
- xlrec->node.spcNode, xlrec->node.dbNode,
- xlrec->node.relNode, xlrec->blkno);
- break;
- }
default:
strcat(buf, "UNKNOWN");
break;