Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6d61cde

Browse files
committed
Clean up and document the API for XLogOpenRelation and XLogReadBuffer.
This commit doesn't make much functional change, but it does eliminate someduplicated code --- for instance, PageIsNew tests are now done insideXLogReadBuffer rather than by each caller.The GIST xlog code still needs a lot of love, but I'll worry about thatseparately.
1 parent2154e1c commit6d61cde

File tree

14 files changed

+548
-383
lines changed

14 files changed

+548
-383
lines changed

‎src/backend/access/gist/gistxlog.c

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
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)
177177
decodeEntryUpdateRecord(&xlrec,record);
178178

179179
reln=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);
183181
if (!BufferIsValid(buffer))
184182
elog(PANIC,"block %u unfound",xlrec.data->blkno);
185183
page= (Page)BufferGetPage(buffer);
@@ -195,8 +193,6 @@ gistRedoEntryUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot)
195193
}
196194
else
197195
{
198-
if (PageIsNew((PageHeader)page))
199-
elog(PANIC,"uninitialized page %u",xlrec.data->blkno);
200196
if (XLByteLE(lsn,PageGetLSN(page)))
201197
{
202198
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
@@ -302,17 +298,12 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record)
302298

303299
decodePageSplitRecord(&xlrec,record);
304300
reln=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);
310304
if (!BufferIsValid(buffer))
311305
elog(PANIC,"block %u unfound",xlrec.data->origblkno);
312306
page= (Page)BufferGetPage(buffer);
313-
if (PageIsNew((PageHeader)page))
314-
elog(PANIC,"uninitialized page %u",xlrec.data->origblkno);
315-
316307
flags= (GistPageIsLeaf(page)) ?F_LEAF :0;
317308
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
318309
ReleaseBuffer(buffer);
@@ -323,7 +314,7 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record)
323314
NewPage*newpage=xlrec.page+i;
324315
boolisorigpage= (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);
327318
if (!BufferIsValid(buffer))
328319
elog(PANIC,"block %u unfound",newpage->header->blkno);
329320
page= (Page)BufferGetPage(buffer);
@@ -367,24 +358,15 @@ gistRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
367358
Pagepage;
368359

369360
reln=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));
375363
page= (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-
384365
GISTInitBuffer(buffer,F_LEAF);
385366

386367
PageSetLSN(page,lsn);
387368
PageSetTLI(page,ThisTimeLineID);
369+
388370
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
389371
WriteBuffer(buffer);
390372
}
@@ -527,12 +509,10 @@ gist_form_invalid_tuple(BlockNumber blkno)
527509
staticBuffer
528510
gistXLogReadAndLockBuffer(Relationr,BlockNumberblkno)
529511
{
530-
Bufferbuffer=XLogReadBuffer(false,r,blkno);
512+
Bufferbuffer=XLogReadBuffer(r,blkno, false);
531513

532514
if (!BufferIsValid(buffer))
533515
elog(PANIC,"block %u unfound",blkno);
534-
if (PageIsNew((PageHeader) (BufferGetPage(buffer))))
535-
elog(PANIC,"uninitialized page %u",blkno);
536516

537517
returnbuffer;
538518
}
@@ -590,8 +570,6 @@ gistContinueInsert(gistIncompleteInsert *insert)
590570
Relationindex;
591571

592572
index=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)
606584
if (insert->origblkno==GIST_ROOT_BLKNO)
607585
{
608586
/*
609-
* itwas 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-
Bufferbuffer=XLogReadBuffer(true,index,GIST_ROOT_BLKNO);
591+
Bufferbuffer=XLogReadBuffer(index,GIST_ROOT_BLKNO, true);
614592
Pagepage;
615593

616-
if (!BufferIsValid(buffer))
617-
elog(PANIC,"root block unfound");
618-
594+
Assert(BufferIsValid(buffer));
619595
page=BufferGetPage(buffer);
620-
if (XLByteLE(insert->lsn,PageGetLSN(page)))
621-
{
622-
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
623-
ReleaseBuffer(buffer);
624-
return;
625-
}
626596

627597
GISTInitBuffer(buffer,0);
628-
page=BufferGetPage(buffer);
629598
gistfillbuffer(index,page,itup,lenitup,FirstOffsetNumber);
599+
630600
PageSetLSN(page,insert->lsn);
631601
PageSetTLI(page,ThisTimeLineID);
602+
632603
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
633604
WriteBuffer(buffer);
634605
}
@@ -654,12 +625,10 @@ gistContinueInsert(gistIncompleteInsert *insert)
654625
childfound=0;
655626

656627
numbuffer=1;
657-
buffers[numbuffer-1]=XLogReadBuffer(false,index,insert->path[i]);
628+
buffers[numbuffer-1]=XLogReadBuffer(index,insert->path[i], false);
658629
if (!BufferIsValid(buffers[numbuffer-1]))
659630
elog(PANIC,"block %u unfound",insert->path[i]);
660631
pages[numbuffer-1]=BufferGetPage(buffers[numbuffer-1]);
661-
if (PageIsNew((PageHeader) (pages[numbuffer-1])))
662-
elog(PANIC,"uninitialized page %u",insert->path[i]);
663632

664633
if (XLByteLE(insert->lsn,PageGetLSN(pages[numbuffer-1])))
665634
{
@@ -693,7 +662,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
693662
if (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);
697666
if (!BufferIsValid(buffers[numbuffer]))
698667
elog(PANIC,"could not obtain new block");
699668
GISTInitBuffer(buffers[numbuffer],0);
@@ -717,7 +686,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
717686
RelationGetRelationName(index));
718687

719688
/* fill new page */
720-
buffers[numbuffer]=XLogReadBuffer(true,index,P_NEW);
689+
buffers[numbuffer]=XLogReadBuffer(index,P_NEW, true);
721690
if (!BufferIsValid(buffers[numbuffer]))
722691
elog(PANIC,"could not obtain new block");
723692
GISTInitBuffer(buffers[numbuffer],0);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp