|
8 | 8 | * Portions Copyright (c) 1994, Regents of the University of California
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - *$PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.23 2008/10/06 08:04:11 heikki Exp $ |
| 11 | + *$PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.24 2008/10/31 15:04:59 heikki Exp $ |
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
14 | 14 |
|
@@ -155,10 +155,14 @@ xlogVacuumPage(Relation index, Buffer buffer)
|
155 | 155 | staticbool
|
156 | 156 | ginVacuumPostingTreeLeaves(GinVacuumState*gvs,BlockNumberblkno,boolisRoot,Buffer*rootBuffer)
|
157 | 157 | {
|
158 |
| -Bufferbuffer=ReadBufferWithStrategy(gvs->index,blkno,gvs->strategy); |
159 |
| -Pagepage=BufferGetPage(buffer); |
| 158 | +Bufferbuffer; |
| 159 | +Pagepage; |
160 | 160 | boolhasVoidPage= FALSE;
|
161 | 161 |
|
| 162 | +buffer=ReadBufferExtended(gvs->index,MAIN_FORKNUM,blkno, |
| 163 | +RBM_NORMAL,gvs->strategy); |
| 164 | +page=BufferGetPage(buffer); |
| 165 | + |
162 | 166 | /*
|
163 | 167 | * We should be sure that we don't concurrent with inserts, insert process
|
164 | 168 | * never release root page until end (but it can unlock it and lock
|
@@ -241,13 +245,24 @@ static void
|
241 | 245 | ginDeletePage(GinVacuumState*gvs,BlockNumberdeleteBlkno,BlockNumberleftBlkno,
|
242 | 246 | BlockNumberparentBlkno,OffsetNumbermyoff,boolisParentRoot)
|
243 | 247 | {
|
244 |
| -BufferdBuffer=ReadBufferWithStrategy(gvs->index,deleteBlkno,gvs->strategy); |
245 |
| -BufferlBuffer= (leftBlkno==InvalidBlockNumber) ? |
246 |
| -InvalidBuffer :ReadBufferWithStrategy(gvs->index,leftBlkno,gvs->strategy); |
247 |
| -BufferpBuffer=ReadBufferWithStrategy(gvs->index,parentBlkno,gvs->strategy); |
| 248 | +BufferdBuffer; |
| 249 | +BufferlBuffer; |
| 250 | +BufferpBuffer; |
248 | 251 | Pagepage,
|
249 | 252 | parentPage;
|
250 | 253 |
|
| 254 | +dBuffer=ReadBufferExtended(gvs->index,MAIN_FORKNUM,deleteBlkno, |
| 255 | +RBM_NORMAL,gvs->strategy); |
| 256 | + |
| 257 | +if (leftBlkno!=InvalidBlockNumber) |
| 258 | +lBuffer=ReadBufferExtended(gvs->index,MAIN_FORKNUM,leftBlkno, |
| 259 | +RBM_NORMAL,gvs->strategy); |
| 260 | +else |
| 261 | +lBuffer=InvalidBuffer; |
| 262 | + |
| 263 | +pBuffer=ReadBufferExtended(gvs->index,MAIN_FORKNUM,parentBlkno, |
| 264 | +RBM_NORMAL,gvs->strategy); |
| 265 | + |
251 | 266 | LockBuffer(dBuffer,GIN_EXCLUSIVE);
|
252 | 267 | if (!isParentRoot)/* parent is already locked by
|
253 | 268 | * LockBufferForCleanup() */
|
@@ -401,7 +416,8 @@ ginScanToDelete(GinVacuumState *gvs, BlockNumber blkno, bool isRoot, DataPageDel
|
401 | 416 | me=parent->child;
|
402 | 417 | }
|
403 | 418 |
|
404 |
| -buffer=ReadBufferWithStrategy(gvs->index,blkno,gvs->strategy); |
| 419 | +buffer=ReadBufferExtended(gvs->index,MAIN_FORKNUM,blkno, |
| 420 | +RBM_NORMAL,gvs->strategy); |
405 | 421 | page=BufferGetPage(buffer);
|
406 | 422 |
|
407 | 423 | Assert(GinPageIsData(page));
|
@@ -589,7 +605,8 @@ ginbulkdelete(PG_FUNCTION_ARGS)
|
589 | 605 | gvs.strategy=info->strategy;
|
590 | 606 | initGinState(&gvs.ginstate,index);
|
591 | 607 |
|
592 |
| -buffer=ReadBufferWithStrategy(index,blkno,info->strategy); |
| 608 | +buffer=ReadBufferExtended(index,MAIN_FORKNUM,blkno, |
| 609 | +RBM_NORMAL,info->strategy); |
593 | 610 |
|
594 | 611 | /* find leaf page */
|
595 | 612 | for (;;)
|
@@ -621,7 +638,8 @@ ginbulkdelete(PG_FUNCTION_ARGS)
|
621 | 638 | Assert(blkno!=InvalidBlockNumber);
|
622 | 639 |
|
623 | 640 | UnlockReleaseBuffer(buffer);
|
624 |
| -buffer=ReadBufferWithStrategy(index,blkno,info->strategy); |
| 641 | +buffer=ReadBufferExtended(index,MAIN_FORKNUM,blkno, |
| 642 | +RBM_NORMAL,info->strategy); |
625 | 643 | }
|
626 | 644 |
|
627 | 645 | /* right now we found leftmost page in entry's BTree */
|
@@ -663,7 +681,8 @@ ginbulkdelete(PG_FUNCTION_ARGS)
|
663 | 681 | if (blkno==InvalidBlockNumber)/* rightmost page */
|
664 | 682 | break;
|
665 | 683 |
|
666 |
| -buffer=ReadBufferWithStrategy(index,blkno,info->strategy); |
| 684 | +buffer=ReadBufferExtended(index,MAIN_FORKNUM,blkno, |
| 685 | +RBM_NORMAL,info->strategy); |
667 | 686 | LockBuffer(buffer,GIN_EXCLUSIVE);
|
668 | 687 | }
|
669 | 688 |
|
@@ -718,7 +737,8 @@ ginvacuumcleanup(PG_FUNCTION_ARGS)
|
718 | 737 |
|
719 | 738 | vacuum_delay_point();
|
720 | 739 |
|
721 |
| -buffer=ReadBufferWithStrategy(index,blkno,info->strategy); |
| 740 | +buffer=ReadBufferExtended(index,MAIN_FORKNUM,blkno, |
| 741 | +RBM_NORMAL,info->strategy); |
722 | 742 | LockBuffer(buffer,GIN_SHARE);
|
723 | 743 | page= (Page)BufferGetPage(buffer);
|
724 | 744 |
|
|