8
8
* Portions Copyright (c) 1994, Regents of the University of California
9
9
*
10
10
* 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 $
12
12
*-------------------------------------------------------------------------
13
13
*/
14
14
#include "postgres.h"
@@ -162,7 +162,7 @@ gistRedoEntryUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot) {
162
162
return ;
163
163
buffer = XLogReadBuffer (false,reln ,xlrec .data -> blkno );
164
164
if (!BufferIsValid (buffer ))
165
- elog (PANIC ,"gistRedoEntryUpdateRecord: block %u unfound" ,xlrec .data -> blkno );
165
+ elog (PANIC ,"block %u unfound" ,xlrec .data -> blkno );
166
166
page = (Page )BufferGetPage (buffer );
167
167
168
168
if (isnewroot ) {
@@ -173,7 +173,7 @@ gistRedoEntryUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot) {
173
173
}
174
174
}else {
175
175
if (PageIsNew ((PageHeader )page ) )
176
- elog (PANIC ,"gistRedoEntryUpdateRecord: uninitialized page blkno %u" ,xlrec .data -> blkno );
176
+ elog (PANIC ,"uninitialized page %u" ,xlrec .data -> blkno );
177
177
if (XLByteLE (lsn ,PageGetLSN (page ))) {
178
178
LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
179
179
ReleaseBuffer (buffer );
@@ -270,11 +270,10 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record ) {
270
270
/* first of all wee need get F_LEAF flag from original page */
271
271
buffer = XLogReadBuffer ( false,reln ,xlrec .data -> origblkno );
272
272
if (!BufferIsValid (buffer ))
273
- elog (PANIC ,"gistRedoEntryUpdateRecord: block %u unfound" ,xlrec .data -> origblkno );
273
+ elog (PANIC ,"block %u unfound" ,xlrec .data -> origblkno );
274
274
page = (Page )BufferGetPage (buffer );
275
275
if (PageIsNew ((PageHeader )page ) )
276
- elog (PANIC ,"gistRedoEntryUpdateRecord: uninitialized page blkno %u" ,
277
- xlrec .data -> origblkno );
276
+ elog (PANIC ,"uninitialized page %u" ,xlrec .data -> origblkno );
278
277
279
278
flags = (GistPageIsLeaf (page ) ) ?F_LEAF :0 ;
280
279
LockBuffer (buffer ,BUFFER_LOCK_UNLOCK );
@@ -287,7 +286,7 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record ) {
287
286
288
287
buffer = XLogReadBuffer ( !isorigpage ,reln ,newpage -> header -> blkno );
289
288
if (!BufferIsValid (buffer ))
290
- elog (PANIC ,"gistRedoEntryUpdateRecord: block %u unfound" ,newpage -> header -> blkno );
289
+ elog (PANIC ,"block %u unfound" ,newpage -> header -> blkno );
291
290
page = (Page )BufferGetPage (buffer );
292
291
293
292
if (XLByteLE (lsn ,PageGetLSN (page ))) {
@@ -330,7 +329,7 @@ gistRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record) {
330
329
return ;
331
330
buffer = XLogReadBuffer ( true,reln ,GIST_ROOT_BLKNO );
332
331
if (!BufferIsValid (buffer ))
333
- elog (PANIC ,"gistRedoCreateIndex: block unfound" );
332
+ elog (PANIC ,"root block unfound" );
334
333
page = (Page )BufferGetPage (buffer );
335
334
336
335
if (!PageIsNew ((PageHeader )page )&& XLByteLE (lsn ,PageGetLSN (page ))) {
@@ -450,6 +449,7 @@ gist_desc(char *buf, uint8 xl_info, char *rec)
450
449
((gistxlogInsertComplete * )rec )-> node .spcNode ,
451
450
((gistxlogInsertComplete * )rec )-> node .dbNode ,
452
451
((gistxlogInsertComplete * )rec )-> node .relNode );
452
+ break ;
453
453
default :
454
454
elog (PANIC ,"gist_desc: unknown op code %u" ,info );
455
455
}
@@ -474,9 +474,9 @@ static Buffer
474
474
gistXLogReadAndLockBuffer (Relation r ,BlockNumber blkno ) {
475
475
Buffer buffer = XLogReadBuffer ( false,r ,blkno );
476
476
if (!BufferIsValid (buffer ))
477
- elog (PANIC ,"gistXLogReadAndLockBuffer: block %u unfound" ,blkno );
477
+ elog (PANIC ,"block %u unfound" ,blkno );
478
478
if (PageIsNew ( (PageHeader )(BufferGetPage (buffer )) ) )
479
- elog (PANIC ,"gistXLogReadAndLockBuffer: uninitialized page blkno %u" ,blkno );
479
+ elog (PANIC ,"uninitialized page %u" ,blkno );
480
480
481
481
return buffer ;
482
482
}
@@ -507,7 +507,7 @@ gixtxlogFindPath( Relation index, gistIncompleteInsert *insert ) {
507
507
ptr = ptr -> parent ;
508
508
}
509
509
}else
510
- elog (LOG ,"gixtxlogFindPath: lost parent for block %u" ,insert -> origblkno );
510
+ elog (LOG ,"lost parent for block %u" ,insert -> origblkno );
511
511
}
512
512
513
513
/*
@@ -545,7 +545,7 @@ gistContinueInsert(gistIncompleteInsert *insert) {
545
545
Page page ;
546
546
547
547
if (!BufferIsValid (buffer ))
548
- elog (PANIC ,"gistContinueInsert: root block unfound" );
548
+ elog (PANIC ,"root block unfound" );
549
549
550
550
page = BufferGetPage (buffer );
551
551
if (XLByteLE (insert -> lsn ,PageGetLSN (page ))) {
@@ -580,10 +580,10 @@ gistContinueInsert(gistIncompleteInsert *insert) {
580
580
numbuffer = 1 ;
581
581
buffers [numbuffer - 1 ]= XLogReadBuffer (false,index ,insert -> path [i ]);
582
582
if (!BufferIsValid (buffers [numbuffer - 1 ]))
583
- elog (PANIC ,"gistContinueInsert: block %u unfound" ,insert -> path [i ]);
583
+ elog (PANIC ,"block %u unfound" ,insert -> path [i ]);
584
584
pages [numbuffer - 1 ]= BufferGetPage (buffers [numbuffer - 1 ] );
585
585
if (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 ]);
587
587
588
588
if (XLByteLE (insert -> lsn ,PageGetLSN (pages [numbuffer - 1 ]))) {
589
589
LockBuffer (buffers [numbuffer - 1 ],BUFFER_LOCK_UNLOCK );
@@ -614,7 +614,7 @@ gistContinueInsert(gistIncompleteInsert *insert) {
614
614
/* no space left on page, so we should split */
615
615
buffers [numbuffer ]= XLogReadBuffer (true,index ,P_NEW );
616
616
if (!BufferIsValid (buffers [numbuffer ]))
617
- elog (PANIC ,"gistContinueInsert: can't create new block" );
617
+ elog (PANIC ,"could not obtain new block" );
618
618
GISTInitBuffer (buffers [numbuffer ],0 );
619
619
pages [numbuffer ]= BufferGetPage (buffers [numbuffer ] );
620
620
gistfillbuffer (index ,pages [numbuffer ],itup ,lenitup ,FirstOffsetNumber );
@@ -628,13 +628,13 @@ gistContinueInsert(gistIncompleteInsert *insert) {
628
628
629
629
/* sanity check */
630
630
if (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 ));
633
633
634
634
/* fill new page */
635
635
buffers [numbuffer ]= XLogReadBuffer (true,index ,P_NEW );
636
636
if (!BufferIsValid (buffers [numbuffer ]))
637
- elog (PANIC ,"gistContinueInsert: can't create new block" );
637
+ elog (PANIC ,"could not obtain new block" );
638
638
GISTInitBuffer (buffers [numbuffer ],0 );
639
639
pages [numbuffer ]= BufferGetPage (buffers [numbuffer ] );
640
640
gistfillbuffer (index ,pages [numbuffer ],parentitup ,pituplen ,FirstOffsetNumber );
@@ -644,12 +644,12 @@ gistContinueInsert(gistIncompleteInsert *insert) {
644
644
GISTInitBuffer (buffers [0 ],0 );
645
645
for (j = 1 ;j < numbuffer ;j ++ ) {
646
646
IndexTuple tuple = gist_form_invalid_tuple (BufferGetBlockNumber (buffers [j ] ) );
647
- if (InvalidOffsetNumber == PageAddItem (pages [0 ],
647
+ if (PageAddItem (pages [0 ],
648
648
(Item )tuple ,
649
649
IndexTupleSize (tuple ),
650
650
(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\" " ,
653
653
RelationGetRelationName (index ));
654
654
}
655
655
}
@@ -668,8 +668,10 @@ gistContinueInsert(gistIncompleteInsert *insert) {
668
668
}
669
669
}
670
670
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." )));
673
675
}
674
676
675
677
void