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.7 2005/07/01 13: 18:17 teodor Exp $
11+ * $PostgreSQL: pgsql/src/backend/access/gist/gistxlog.c,v 1.8 2005/09/22 18:49:45 tgl Exp $
1212 *-------------------------------------------------------------------------
1313 */
1414#include "postgres.h"
@@ -162,7 +162,7 @@ gistRedoEntryUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot) {
162162return ;
163163buffer = XLogReadBuffer (false,reln ,xlrec .data -> blkno );
164164if (!BufferIsValid (buffer ))
165- elog (PANIC ,"gistRedoEntryUpdateRecord: block %u unfound" ,xlrec .data -> blkno );
165+ elog (PANIC ,"block %u unfound" ,xlrec .data -> blkno );
166166page = (Page )BufferGetPage (buffer );
167167
168168if (isnewroot ) {
@@ -173,7 +173,7 @@ gistRedoEntryUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot) {
173173}
174174}else {
175175if (PageIsNew ((PageHeader )page ) )
176- elog (PANIC ,"gistRedoEntryUpdateRecord: uninitialized page blkno %u" ,xlrec .data -> blkno );
176+ elog (PANIC ,"uninitialized page %u" ,xlrec .data -> blkno );
177177if (XLByteLE (lsn ,PageGetLSN (page ))) {
178178LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
179179ReleaseBuffer (buffer );
@@ -270,11 +270,10 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record ) {
270270/* first of all wee need get F_LEAF flag from original page */
271271buffer = XLogReadBuffer ( false,reln ,xlrec .data -> origblkno );
272272if (!BufferIsValid (buffer ))
273- elog (PANIC ,"gistRedoEntryUpdateRecord: block %u unfound" ,xlrec .data -> origblkno );
273+ elog (PANIC ,"block %u unfound" ,xlrec .data -> origblkno );
274274page = (Page )BufferGetPage (buffer );
275275if (PageIsNew ((PageHeader )page ) )
276- elog (PANIC ,"gistRedoEntryUpdateRecord: uninitialized page blkno %u" ,
277- xlrec .data -> origblkno );
276+ elog (PANIC ,"uninitialized page %u" ,xlrec .data -> origblkno );
278277
279278flags = (GistPageIsLeaf (page ) ) ?F_LEAF :0 ;
280279LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
@@ -287,7 +286,7 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record ) {
287286
288287buffer = XLogReadBuffer ( !isorigpage ,reln ,newpage -> header -> blkno );
289288if (!BufferIsValid (buffer ))
290- elog (PANIC ,"gistRedoEntryUpdateRecord: block %u unfound" ,newpage -> header -> blkno );
289+ elog (PANIC ,"block %u unfound" ,newpage -> header -> blkno );
291290page = (Page )BufferGetPage (buffer );
292291
293292if (XLByteLE (lsn ,PageGetLSN (page ))) {
@@ -330,7 +329,7 @@ gistRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record) {
330329return ;
331330buffer = XLogReadBuffer ( true,reln ,GIST_ROOT_BLKNO );
332331if (!BufferIsValid (buffer ))
333- elog (PANIC ,"gistRedoCreateIndex: block unfound" );
332+ elog (PANIC ,"root block unfound" );
334333page = (Page )BufferGetPage (buffer );
335334
336335if (!PageIsNew ((PageHeader )page )&& XLByteLE (lsn ,PageGetLSN (page ))) {
@@ -450,6 +449,7 @@ gist_desc(char *buf, uint8 xl_info, char *rec)
450449((gistxlogInsertComplete * )rec )-> node .spcNode ,
451450((gistxlogInsertComplete * )rec )-> node .dbNode ,
452451((gistxlogInsertComplete * )rec )-> node .relNode );
452+ break ;
453453default :
454454elog (PANIC ,"gist_desc: unknown op code %u" ,info );
455455}
@@ -474,9 +474,9 @@ static Buffer
474474gistXLogReadAndLockBuffer (Relation r ,BlockNumber blkno ) {
475475Buffer buffer = XLogReadBuffer ( false,r ,blkno );
476476if (!BufferIsValid (buffer ))
477- elog (PANIC ,"gistXLogReadAndLockBuffer: block %u unfound" ,blkno );
477+ elog (PANIC ,"block %u unfound" ,blkno );
478478if (PageIsNew ( (PageHeader )(BufferGetPage (buffer )) ) )
479- elog (PANIC ,"gistXLogReadAndLockBuffer: uninitialized page blkno %u" ,blkno );
479+ elog (PANIC ,"uninitialized page %u" ,blkno );
480480
481481return buffer ;
482482}
@@ -507,7 +507,7 @@ gixtxlogFindPath( Relation index, gistIncompleteInsert *insert ) {
507507ptr = ptr -> parent ;
508508}
509509}else
510- elog (LOG ,"gixtxlogFindPath: lost parent for block %u" ,insert -> origblkno );
510+ elog (LOG ,"lost parent for block %u" ,insert -> origblkno );
511511}
512512
513513/*
@@ -545,7 +545,7 @@ gistContinueInsert(gistIncompleteInsert *insert) {
545545Page page ;
546546
547547if (!BufferIsValid (buffer ))
548- elog (PANIC ,"gistContinueInsert: root block unfound" );
548+ elog (PANIC ,"root block unfound" );
549549
550550page = BufferGetPage (buffer );
551551if (XLByteLE (insert -> lsn ,PageGetLSN (page ))) {
@@ -580,10 +580,10 @@ gistContinueInsert(gistIncompleteInsert *insert) {
580580numbuffer = 1 ;
581581buffers [numbuffer - 1 ]= XLogReadBuffer (false,index ,insert -> path [i ]);
582582if (!BufferIsValid (buffers [numbuffer - 1 ]))
583- elog (PANIC ,"gistContinueInsert: block %u unfound" ,insert -> path [i ]);
583+ elog (PANIC ,"block %u unfound" ,insert -> path [i ]);
584584pages [numbuffer - 1 ]= BufferGetPage (buffers [numbuffer - 1 ] );
585585if (PageIsNew ((PageHeader )(pages [numbuffer - 1 ])) )
586- elog (PANIC ,"gistContinueInsert: uninitialized page blkno %u" ,insert -> path [i ]);
586+ elog (PANIC ,"uninitialized page %u" ,insert -> path [i ]);
587587
588588if (XLByteLE (insert -> lsn ,PageGetLSN (pages [numbuffer - 1 ]))) {
589589LockBuffer (buffers [numbuffer - 1 ],BUFFER_LOCK_UNLOCK );
@@ -614,7 +614,7 @@ gistContinueInsert(gistIncompleteInsert *insert) {
614614/* no space left on page, so we should split */
615615buffers [numbuffer ]= XLogReadBuffer (true,index ,P_NEW );
616616if (!BufferIsValid (buffers [numbuffer ]))
617- elog (PANIC ,"gistContinueInsert: can't create new block" );
617+ elog (PANIC ,"could not obtain new block" );
618618GISTInitBuffer (buffers [numbuffer ],0 );
619619pages [numbuffer ]= BufferGetPage (buffers [numbuffer ] );
620620gistfillbuffer (index ,pages [numbuffer ],itup ,lenitup ,FirstOffsetNumber );
@@ -628,13 +628,13 @@ gistContinueInsert(gistIncompleteInsert *insert) {
628628
629629/* sanity check */
630630if (i + 1 != insert -> pathlen )
631- elog (PANIC ,"gistContinueInsert: can't restore index'%s' " ,
632- RelationGetRelationName (index ));
631+ elog (PANIC ,"unexpected pathlen in index\"%s\" " ,
632+ RelationGetRelationName (index ));
633633
634634/* fill new page */
635635buffers [numbuffer ]= XLogReadBuffer (true,index ,P_NEW );
636636if (!BufferIsValid (buffers [numbuffer ]))
637- elog (PANIC ,"gistContinueInsert: can't create new block" );
637+ elog (PANIC ,"could not obtain new block" );
638638GISTInitBuffer (buffers [numbuffer ],0 );
639639pages [numbuffer ]= BufferGetPage (buffers [numbuffer ] );
640640gistfillbuffer (index ,pages [numbuffer ],parentitup ,pituplen ,FirstOffsetNumber );
@@ -644,12 +644,12 @@ gistContinueInsert(gistIncompleteInsert *insert) {
644644GISTInitBuffer (buffers [0 ],0 );
645645for (j = 1 ;j < numbuffer ;j ++ ) {
646646IndexTuple tuple = gist_form_invalid_tuple (BufferGetBlockNumber (buffers [j ] ) );
647- if (InvalidOffsetNumber == PageAddItem (pages [0 ],
647+ if (PageAddItem (pages [0 ],
648648(Item )tuple ,
649649IndexTupleSize (tuple ),
650650(OffsetNumber )j ,
651- LP_USED ) )
652- elog (PANIC ,"gistContinueInsert: can't restore index'%s' " ,
651+ LP_USED )== InvalidOffsetNumber )
652+ elog (PANIC ,"failed to add item to indexpage in \"%s\" " ,
653653RelationGetRelationName (index ));
654654}
655655}
@@ -668,8 +668,10 @@ gistContinueInsert(gistIncompleteInsert *insert) {
668668}
669669}
670670
671- elog (LOG ,"Detected incomplete insert into GiST index %u/%u/%u; It's desirable to vacuum or reindex index" ,
672- insert -> node .spcNode ,insert -> node .dbNode ,insert -> node .relNode );
671+ ereport (LOG ,
672+ (errmsg ("index %u/%u/%u needs VACUUM or REINDEX to finish crash recovery" ,
673+ insert -> node .spcNode ,insert -> node .dbNode ,insert -> node .relNode ),
674+ errdetail ("Incomplete insertion detected during crash replay." )));
673675}
674676
675677void