*** pgsql/src/backend/access/gin/ginxlog.c 2008/05/12 00:00:44 1.13 --- pgsql/src/backend/access/gin/ginxlog.c 2008/06/12 09:12:29 1.14 *************** *** 8,14 **** * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/access/gin/ginxlog.c,v 1.12 2008/01/01 19:45:46 momjian Exp $ *------------------------------------------------------------------------- */ #include "postgres.h" --- 8,14 ---- * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/access/gin/ginxlog.c,v 1.13 2008/05/12 00:00:44 alvherre Exp $ *------------------------------------------------------------------------- */ #include "postgres.h" *************** static void *** 71,82 **** ginRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record) { RelFileNode *node = (RelFileNode *) XLogRecGetData(record); - Relation reln; Buffer buffer; Page page; ! reln = XLogOpenRelation(*node); ! buffer = XLogReadBuffer(reln, GIN_ROOT_BLKNO, true); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); --- 71,80 ---- ginRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record) { RelFileNode *node = (RelFileNode *) XLogRecGetData(record); Buffer buffer; Page page; ! buffer = XLogReadBuffer(*node, GIN_ROOT_BLKNO, true); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); *************** ginRedoCreatePTree(XLogRecPtr lsn, XLogR *** 94,105 **** { ginxlogCreatePostingTree *data = (ginxlogCreatePostingTree *) XLogRecGetData(record); ItemPointerData *items = (ItemPointerData *) (XLogRecGetData(record) + sizeof(ginxlogCreatePostingTree)); - Relation reln; Buffer buffer; Page page; ! reln = XLogOpenRelation(data->node); ! buffer = XLogReadBuffer(reln, data->blkno, true); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); --- 92,101 ---- { ginxlogCreatePostingTree *data = (ginxlogCreatePostingTree *) XLogRecGetData(record); ItemPointerData *items = (ItemPointerData *) (XLogRecGetData(record) + sizeof(ginxlogCreatePostingTree)); Buffer buffer; Page page; ! buffer = XLogReadBuffer(data->node, data->blkno, true); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); *************** static void *** 118,124 **** ginRedoInsert(XLogRecPtr lsn, XLogRecord *record) { ginxlogInsert *data = (ginxlogInsert *) XLogRecGetData(record); - Relation reln; Buffer buffer; Page page; --- 114,119 ---- *************** ginRedoInsert(XLogRecPtr lsn, XLogRecord *** 126,133 **** if (record->xl_info & XLR_BKP_BLOCK_1) return; ! reln = XLogOpenRelation(data->node); ! buffer = XLogReadBuffer(reln, data->blkno, false); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); --- 121,127 ---- if (record->xl_info & XLR_BKP_BLOCK_1) return; ! buffer = XLogReadBuffer(data->node, data->blkno, false); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); *************** static void *** 228,253 **** ginRedoSplit(XLogRecPtr lsn, XLogRecord *record) { ginxlogSplit *data = (ginxlogSplit *) XLogRecGetData(record); - Relation reln; Buffer lbuffer, rbuffer; Page lpage, rpage; uint32 flags = 0; - reln = XLogOpenRelation(data->node); - if (data->isLeaf) flags |= GIN_LEAF; if (data->isData) flags |= GIN_DATA; ! lbuffer = XLogReadBuffer(reln, data->lblkno, data->isRootSplit); Assert(BufferIsValid(lbuffer)); lpage = (Page) BufferGetPage(lbuffer); GinInitBuffer(lbuffer, flags); ! rbuffer = XLogReadBuffer(reln, data->rblkno, true); Assert(BufferIsValid(rbuffer)); rpage = (Page) BufferGetPage(rbuffer); GinInitBuffer(rbuffer, flags); --- 222,244 ---- ginRedoSplit(XLogRecPtr lsn, XLogRecord *record) { ginxlogSplit *data = (ginxlogSplit *) XLogRecGetData(record); Buffer lbuffer, rbuffer; Page lpage, rpage; uint32 flags = 0; if (data->isLeaf) flags |= GIN_LEAF; if (data->isData) flags |= GIN_DATA; ! lbuffer = XLogReadBuffer(data->node, data->lblkno, data->isRootSplit); Assert(BufferIsValid(lbuffer)); lpage = (Page) BufferGetPage(lbuffer); GinInitBuffer(lbuffer, flags); ! rbuffer = XLogReadBuffer(data->node, data->rblkno, true); Assert(BufferIsValid(rbuffer)); rpage = (Page) BufferGetPage(rbuffer); GinInitBuffer(rbuffer, flags); *************** ginRedoSplit(XLogRecPtr lsn, XLogRecord *** 319,325 **** if (data->isRootSplit) { ! Buffer rootBuf = XLogReadBuffer(reln, data->rootBlkno, false); Page rootPage = BufferGetPage(rootBuf); GinInitBuffer(rootBuf, flags & ~GIN_LEAF); --- 310,316 ---- if (data->isRootSplit) { ! Buffer rootBuf = XLogReadBuffer(data->node, data->rootBlkno, false); Page rootPage = BufferGetPage(rootBuf); GinInitBuffer(rootBuf, flags & ~GIN_LEAF); *************** static void *** 352,358 **** ginRedoVacuumPage(XLogRecPtr lsn, XLogRecord *record) { ginxlogVacuumPage *data = (ginxlogVacuumPage *) XLogRecGetData(record); - Relation reln; Buffer buffer; Page page; --- 343,348 ---- *************** ginRedoVacuumPage(XLogRecPtr lsn, XLogRe *** 360,367 **** if (record->xl_info & XLR_BKP_BLOCK_1) return; ! reln = XLogOpenRelation(data->node); ! buffer = XLogReadBuffer(reln, data->blkno, false); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); --- 350,356 ---- if (record->xl_info & XLR_BKP_BLOCK_1) return; ! buffer = XLogReadBuffer(data->node, data->blkno, false); Assert(BufferIsValid(buffer)); page = (Page) BufferGetPage(buffer); *************** static void *** 403,417 **** ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record) { ginxlogDeletePage *data = (ginxlogDeletePage *) XLogRecGetData(record); - Relation reln; Buffer buffer; Page page; - reln = XLogOpenRelation(data->node); - if (!(record->xl_info & XLR_BKP_BLOCK_1)) { ! buffer = XLogReadBuffer(reln, data->blkno, false); page = BufferGetPage(buffer); Assert(GinPageIsData(page)); GinPageGetOpaque(page)->flags = GIN_DELETED; --- 392,403 ---- ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record) { ginxlogDeletePage *data = (ginxlogDeletePage *) XLogRecGetData(record); Buffer buffer; Page page; if (!(record->xl_info & XLR_BKP_BLOCK_1)) { ! buffer = XLogReadBuffer(data->node, data->blkno, false); page = BufferGetPage(buffer); Assert(GinPageIsData(page)); GinPageGetOpaque(page)->flags = GIN_DELETED; *************** ginRedoDeletePage(XLogRecPtr lsn, XLogRe *** 423,429 **** if (!(record->xl_info & XLR_BKP_BLOCK_2)) { ! buffer = XLogReadBuffer(reln, data->parentBlkno, false); page = BufferGetPage(buffer); Assert(GinPageIsData(page)); Assert(!GinPageIsLeaf(page)); --- 409,415 ---- if (!(record->xl_info & XLR_BKP_BLOCK_2)) { ! buffer = XLogReadBuffer(data->node, data->parentBlkno, false); page = BufferGetPage(buffer); Assert(GinPageIsData(page)); Assert(!GinPageIsLeaf(page)); *************** ginRedoDeletePage(XLogRecPtr lsn, XLogRe *** 436,442 **** if (!(record->xl_info & XLR_BKP_BLOCK_3) && data->leftBlkno != InvalidBlockNumber) { ! buffer = XLogReadBuffer(reln, data->leftBlkno, false); page = BufferGetPage(buffer); Assert(GinPageIsData(page)); GinPageGetOpaque(page)->rightlink = data->rightLink; --- 422,428 ---- if (!(record->xl_info & XLR_BKP_BLOCK_3) && data->leftBlkno != InvalidBlockNumber) { ! buffer = XLogReadBuffer(data->node, data->leftBlkno, false); page = BufferGetPage(buffer); Assert(GinPageIsData(page)); GinPageGetOpaque(page)->rightlink = data->rightLink; *************** ginContinueSplit(ginIncompleteSplit *spl *** 557,565 **** * elog(NOTICE,"ginContinueSplit root:%u l:%u r:%u", split->rootBlkno, * split->leftBlkno, split->rightBlkno); */ ! reln = XLogOpenRelation(split->node); ! buffer = XLogReadBuffer(reln, split->leftBlkno, false); if (split->rootBlkno == GIN_ROOT_BLKNO) { --- 543,551 ---- * elog(NOTICE,"ginContinueSplit root:%u l:%u r:%u", split->rootBlkno, * split->leftBlkno, split->rightBlkno); */ ! buffer = XLogReadBuffer(split->node, split->leftBlkno, false); ! reln = CreateFakeRelcacheEntry(split->node); if (split->rootBlkno == GIN_ROOT_BLKNO) { *************** ginContinueSplit(ginIncompleteSplit *spl *** 581,586 **** --- 567,574 ---- GinPageGetOpaque(page)->maxoff))->key; } + FreeFakeRelcacheEntry(reln); + btree.rightblkno = split->rightBlkno; stack.blkno = split->leftBlkno;