spgist metapages.
authorRobert Haas <[email protected]>
Tue, 12 Jun 2012 12:50:57 +0000 (08:50 -0400)
committerRobert Haas <[email protected]>
Thu, 14 Jun 2012 14:33:04 +0000 (10:33 -0400)
This constitutes a WAL format change for XLOG_SPGIST_CREATE_INDEX.

src/backend/access/spgist/spginsert.c
src/backend/access/spgist/spgutils.c
src/backend/access/spgist/spgxlog.c
src/include/access/spgist_private.h

index 456a71fbba5dabb557510167baaccccea4fa6c9b..b110e8e6c48a66aba12d9a380902b40008ce4e6c 100644 (file)
@@ -82,7 +82,7 @@ spgbuild(PG_FUNCTION_ARGS)
 
        START_CRIT_SECTION();
 
-       SpGistInitMetapage(BufferGetPage(metabuffer));
+       SpGistInitMetapage(index, BufferGetPage(metabuffer));
        MarkBufferDirty(metabuffer);
        SpGistInitBuffer(rootbuffer, SPGIST_LEAF);
        MarkBufferDirty(rootbuffer);
@@ -94,7 +94,10 @@ spgbuild(PG_FUNCTION_ARGS)
                XLogRecPtr      recptr;
                XLogRecData rdata;
 
-               /* WAL data is just the relfilenode */
+               /* log image of metabuffer */
+               log_newpage_buffer(metabuffer);
+
+               /* WAL data for root and null buffers is just the relfilenode */
                rdata.data = (char *) &(index->rd_node);
                rdata.len = sizeof(RelFileNode);
                rdata.buffer = InvalidBuffer;
@@ -102,8 +105,6 @@ spgbuild(PG_FUNCTION_ARGS)
 
                recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_CREATE_INDEX, &rdata);
 
-               PageSetLSN(BufferGetPage(metabuffer), recptr);
-               PageSetTLI(BufferGetPage(metabuffer), ThisTimeLineID);
                PageSetLSN(BufferGetPage(rootbuffer), recptr);
                PageSetTLI(BufferGetPage(rootbuffer), ThisTimeLineID);
                PageSetLSN(BufferGetPage(nullbuffer), recptr);
@@ -152,7 +153,7 @@ spgbuildempty(PG_FUNCTION_ARGS)
 
        /* Construct metapage. */
        page = (Page) palloc(BLCKSZ);
-       SpGistInitMetapage(page);
+       SpGistInitMetapage(index, page);
 
        /* Write the page.      If archiving/streaming, XLOG it. */
        smgrwrite(index->rd_smgr, INIT_FORKNUM, SPGIST_METAPAGE_BLKNO,
index d56c2325fe57d1e3d846ff6ddec42705d298b15a..547cfd318866c9db84d006051627a792d518c2b3 100644 (file)
@@ -471,12 +471,13 @@ SpGistInitBuffer(Buffer b, uint16 f)
  * Initialize metadata page
  */
 void
-SpGistInitMetapage(Page page)
+SpGistInitMetapage(Relation index, Page page)
 {
        SpGistMetaPageData *metadata;
        int                     i;
 
        SpGistInitPage(page, SPGIST_META);
+       MetapageInit(index, page);
        metadata = SpGistPageGetMeta(page);
        memset(metadata, 0, sizeof(SpGistMetaPageData));
        metadata->magicNumber = SPGIST_MAGIC_NUMBER;
index 82f8c8b978a01a426d4019aa5f7fdbfc463a5b36..9c537b3327b62fa0beda4c65c7638acc015a2481 100644 (file)
@@ -75,15 +75,6 @@ spgRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
        Buffer          buffer;
        Page            page;
 
-       buffer = XLogReadBuffer(*node, SPGIST_METAPAGE_BLKNO, true);
-       Assert(BufferIsValid(buffer));
-       page = (Page) BufferGetPage(buffer);
-       SpGistInitMetapage(page);
-       PageSetLSN(page, lsn);
-       PageSetTLI(page, ThisTimeLineID);
-       MarkBufferDirty(buffer);
-       UnlockReleaseBuffer(buffer);
-
        buffer = XLogReadBuffer(*node, SPGIST_ROOT_BLKNO, true);
        Assert(BufferIsValid(buffer));
        SpGistInitBuffer(buffer, SPGIST_LEAF);
index bc068b9579a5d32621b86de2cfebc8d0a087645b..4fd20d49c3a0a66183a33f04bd08feb4b3018376 100644 (file)
@@ -625,7 +625,7 @@ extern Buffer SpGistGetBuffer(Relation index, int flags,
 extern void SpGistSetLastUsedPage(Relation index, Buffer buffer);
 extern void SpGistInitPage(Page page, uint16 f);
 extern void SpGistInitBuffer(Buffer b, uint16 f);
-extern void SpGistInitMetapage(Page page);
+extern void SpGistInitMetapage(Relation index, Page page);
 extern unsigned int SpGistGetTypeSize(SpGistTypeDesc *att, Datum datum);
 extern SpGistLeafTuple spgFormLeafTuple(SpGistState *state,
                                 ItemPointer heapPtr,