88 * Portions Copyright (c) 1994, Regents of the University of California
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/backend/access/gist/gistxlog.c,v 1.11 2006/03/24 04:32:12 tgl Exp $
11+ * $PostgreSQL: pgsql/src/backend/access/gist/gistxlog.c,v 1.12 2006/03/29 21:17:36 tgl Exp $
1212 *-------------------------------------------------------------------------
1313 */
1414#include "postgres.h"
@@ -177,9 +177,7 @@ gistRedoEntryUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot)
177177decodeEntryUpdateRecord (& xlrec ,record );
178178
179179reln = XLogOpenRelation (xlrec .data -> node );
180- if (!RelationIsValid (reln ))
181- return ;
182- buffer = XLogReadBuffer (false,reln ,xlrec .data -> blkno );
180+ buffer = XLogReadBuffer (reln ,xlrec .data -> blkno , false);
183181if (!BufferIsValid (buffer ))
184182elog (PANIC ,"block %u unfound" ,xlrec .data -> blkno );
185183page = (Page )BufferGetPage (buffer );
@@ -195,8 +193,6 @@ gistRedoEntryUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot)
195193}
196194else
197195{
198- if (PageIsNew ((PageHeader )page ))
199- elog (PANIC ,"uninitialized page %u" ,xlrec .data -> blkno );
200196if (XLByteLE (lsn ,PageGetLSN (page )))
201197{
202198LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
@@ -302,17 +298,12 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record)
302298
303299decodePageSplitRecord (& xlrec ,record );
304300reln = XLogOpenRelation (xlrec .data -> node );
305- if (!RelationIsValid (reln ))
306- return ;
307301
308302/* first of all wee need get F_LEAF flag from original page */
309- buffer = XLogReadBuffer (false, reln ,xlrec .data -> origblkno );
303+ buffer = XLogReadBuffer (reln ,xlrec .data -> origblkno , false );
310304if (!BufferIsValid (buffer ))
311305elog (PANIC ,"block %u unfound" ,xlrec .data -> origblkno );
312306page = (Page )BufferGetPage (buffer );
313- if (PageIsNew ((PageHeader )page ))
314- elog (PANIC ,"uninitialized page %u" ,xlrec .data -> origblkno );
315-
316307flags = (GistPageIsLeaf (page )) ?F_LEAF :0 ;
317308LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
318309ReleaseBuffer (buffer );
@@ -323,7 +314,7 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record)
323314NewPage * newpage = xlrec .page + i ;
324315bool isorigpage = (xlrec .data -> origblkno == newpage -> header -> blkno ) ? true : false;
325316
326- buffer = XLogReadBuffer (! isorigpage , reln ,newpage -> header -> blkno );
317+ buffer = XLogReadBuffer (reln ,newpage -> header -> blkno , ! isorigpage );
327318if (!BufferIsValid (buffer ))
328319elog (PANIC ,"block %u unfound" ,newpage -> header -> blkno );
329320page = (Page )BufferGetPage (buffer );
@@ -367,24 +358,15 @@ gistRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
367358Page page ;
368359
369360reln = XLogOpenRelation (* node );
370- if (!RelationIsValid (reln ))
371- return ;
372- buffer = XLogReadBuffer (true,reln ,GIST_ROOT_BLKNO );
373- if (!BufferIsValid (buffer ))
374- elog (PANIC ,"root block unfound" );
361+ buffer = XLogReadBuffer (reln ,GIST_ROOT_BLKNO , true);
362+ Assert (BufferIsValid (buffer ));
375363page = (Page )BufferGetPage (buffer );
376364
377- if (!PageIsNew ((PageHeader )page )&& XLByteLE (lsn ,PageGetLSN (page )))
378- {
379- LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
380- ReleaseBuffer (buffer );
381- return ;
382- }
383-
384365GISTInitBuffer (buffer ,F_LEAF );
385366
386367PageSetLSN (page ,lsn );
387368PageSetTLI (page ,ThisTimeLineID );
369+
388370LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
389371WriteBuffer (buffer );
390372}
@@ -527,12 +509,10 @@ gist_form_invalid_tuple(BlockNumber blkno)
527509static Buffer
528510gistXLogReadAndLockBuffer (Relation r ,BlockNumber blkno )
529511{
530- Buffer buffer = XLogReadBuffer (false, r ,blkno );
512+ Buffer buffer = XLogReadBuffer (r ,blkno , false );
531513
532514if (!BufferIsValid (buffer ))
533515elog (PANIC ,"block %u unfound" ,blkno );
534- if (PageIsNew ((PageHeader ) (BufferGetPage (buffer ))))
535- elog (PANIC ,"uninitialized page %u" ,blkno );
536516
537517return buffer ;
538518}
@@ -590,8 +570,6 @@ gistContinueInsert(gistIncompleteInsert *insert)
590570Relation index ;
591571
592572index = XLogOpenRelation (insert -> node );
593- if (!RelationIsValid (index ))
594- return ;
595573
596574/*
597575 * needed vector itup never will be more than initial lenblkno+2, because
@@ -606,29 +584,22 @@ gistContinueInsert(gistIncompleteInsert *insert)
606584if (insert -> origblkno == GIST_ROOT_BLKNO )
607585{
608586/*
609- * it was split root, so we should only make new root. it can't be
587+ * it was split root, so we should only make new root. it can't be
610588 * simple insert into root, look at call pushIncompleteInsert in
611589 * gistRedoPageSplitRecord
612590 */
613- Buffer buffer = XLogReadBuffer (true, index ,GIST_ROOT_BLKNO );
591+ Buffer buffer = XLogReadBuffer (index ,GIST_ROOT_BLKNO , true );
614592Page page ;
615593
616- if (!BufferIsValid (buffer ))
617- elog (PANIC ,"root block unfound" );
618-
594+ Assert (BufferIsValid (buffer ));
619595page = BufferGetPage (buffer );
620- if (XLByteLE (insert -> lsn ,PageGetLSN (page )))
621- {
622- LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
623- ReleaseBuffer (buffer );
624- return ;
625- }
626596
627597GISTInitBuffer (buffer ,0 );
628- page = BufferGetPage (buffer );
629598gistfillbuffer (index ,page ,itup ,lenitup ,FirstOffsetNumber );
599+
630600PageSetLSN (page ,insert -> lsn );
631601PageSetTLI (page ,ThisTimeLineID );
602+
632603LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
633604WriteBuffer (buffer );
634605}
@@ -654,12 +625,10 @@ gistContinueInsert(gistIncompleteInsert *insert)
654625childfound = 0 ;
655626
656627numbuffer = 1 ;
657- buffers [numbuffer - 1 ]= XLogReadBuffer (false, index ,insert -> path [i ]);
628+ buffers [numbuffer - 1 ]= XLogReadBuffer (index ,insert -> path [i ], false );
658629if (!BufferIsValid (buffers [numbuffer - 1 ]))
659630elog (PANIC ,"block %u unfound" ,insert -> path [i ]);
660631pages [numbuffer - 1 ]= BufferGetPage (buffers [numbuffer - 1 ]);
661- if (PageIsNew ((PageHeader ) (pages [numbuffer - 1 ])))
662- elog (PANIC ,"uninitialized page %u" ,insert -> path [i ]);
663632
664633if (XLByteLE (insert -> lsn ,PageGetLSN (pages [numbuffer - 1 ])))
665634{
@@ -693,7 +662,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
693662if (gistnospace (pages [numbuffer - 1 ],itup ,lenitup ))
694663{
695664/* no space left on page, so we should split */
696- buffers [numbuffer ]= XLogReadBuffer (true, index ,P_NEW );
665+ buffers [numbuffer ]= XLogReadBuffer (index ,P_NEW , true );
697666if (!BufferIsValid (buffers [numbuffer ]))
698667elog (PANIC ,"could not obtain new block" );
699668GISTInitBuffer (buffers [numbuffer ],0 );
@@ -717,7 +686,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
717686RelationGetRelationName (index ));
718687
719688/* fill new page */
720- buffers [numbuffer ]= XLogReadBuffer (true, index ,P_NEW );
689+ buffers [numbuffer ]= XLogReadBuffer (index ,P_NEW , true );
721690if (!BufferIsValid (buffers [numbuffer ]))
722691elog (PANIC ,"could not obtain new block" );
723692GISTInitBuffer (buffers [numbuffer ],0 );