Skip to content

Commit 54af876

Browse files
committed
Replace ReadBuffer to ReadBufferWithStrategy in all vacuum-involved places
to implement limited-size "ring" of buffers for VACUUM for GIN & GIST
1 parent 71fb7b9 commit 54af876

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

src/backend/access/gin/ginvacuum.c

Lines changed: 14 additions & 11 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/gin/ginvacuum.c,v 1.12 2007/02/01 04:16:08 neilc Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.13 2007/05/31 14:03:09 teodor Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -28,6 +28,7 @@ typedef struct
2828
IndexBulkDeleteCallback callback;
2929
void *callback_state;
3030
GinState ginstate;
31+
BufferAccessStrategy strategy;
3132
} GinVacuumState;
3233

3334

@@ -152,7 +153,7 @@ xlogVacuumPage(Relation index, Buffer buffer)
152153
static bool
153154
ginVacuumPostingTreeLeaves(GinVacuumState *gvs, BlockNumber blkno, bool isRoot, Buffer *rootBuffer)
154155
{
155-
Buffer buffer = ReadBuffer(gvs->index, blkno);
156+
Buffer buffer = ReadBufferWithStrategy(gvs->index, blkno, gvs->strategy);
156157
Page page = BufferGetPage(buffer);
157158
bool hasVoidPage = FALSE;
158159

@@ -238,9 +239,10 @@ static void
238239
ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkno,
239240
BlockNumber parentBlkno, OffsetNumber myoff, bool isParentRoot)
240241
{
241-
Buffer dBuffer = ReadBuffer(gvs->index, deleteBlkno);
242-
Buffer lBuffer = (leftBlkno == InvalidBlockNumber) ? InvalidBuffer : ReadBuffer(gvs->index, leftBlkno);
243-
Buffer pBuffer = ReadBuffer(gvs->index, parentBlkno);
242+
Buffer dBuffer = ReadBufferWithStrategy(gvs->index, deleteBlkno, gvs->strategy);
243+
Buffer lBuffer = (leftBlkno == InvalidBlockNumber) ?
244+
InvalidBuffer : ReadBufferWithStrategy(gvs->index, leftBlkno, gvs->strategy);
245+
Buffer pBuffer = ReadBufferWithStrategy(gvs->index, parentBlkno, gvs->strategy);
244246
Page page,
245247
parentPage;
246248

@@ -390,7 +392,7 @@ ginScanToDelete(GinVacuumState *gvs, BlockNumber blkno, bool isRoot, DataPageDel
390392
me = parent->child;
391393
}
392394

393-
buffer = ReadBuffer(gvs->index, blkno);
395+
buffer = ReadBufferWithStrategy(gvs->index, blkno, gvs->strategy);
394396
page = BufferGetPage(buffer);
395397

396398
Assert(GinPageIsData(page));
@@ -574,9 +576,10 @@ ginbulkdelete(PG_FUNCTION_ARGS)
574576
gvs.result = stats;
575577
gvs.callback = callback;
576578
gvs.callback_state = callback_state;
579+
gvs.strategy = info->strategy;
577580
initGinState(&gvs.ginstate, index);
578581

579-
buffer = ReadBuffer(index, blkno);
582+
buffer = ReadBufferWithStrategy(index, blkno, info->strategy);
580583

581584
/* find leaf page */
582585
for (;;)
@@ -607,8 +610,8 @@ ginbulkdelete(PG_FUNCTION_ARGS)
607610
blkno = GinItemPointerGetBlockNumber(&(itup)->t_tid);
608611
Assert(blkno != InvalidBlockNumber);
609612

610-
LockBuffer(buffer, GIN_UNLOCK);
611-
buffer = ReleaseAndReadBuffer(buffer, index, blkno);
613+
UnlockReleaseBuffer(buffer);
614+
buffer = ReadBufferWithStrategy(index, blkno, info->strategy);
612615
}
613616

614617
/* right now we found leftmost page in entry's BTree */
@@ -650,7 +653,7 @@ ginbulkdelete(PG_FUNCTION_ARGS)
650653
if (blkno == InvalidBlockNumber) /* rightmost page */
651654
break;
652655

653-
buffer = ReadBuffer(index, blkno);
656+
buffer = ReadBufferWithStrategy(index, blkno, info->strategy);
654657
LockBuffer(buffer, GIN_EXCLUSIVE);
655658
}
656659

@@ -713,7 +716,7 @@ ginvacuumcleanup(PG_FUNCTION_ARGS)
713716

714717
vacuum_delay_point();
715718

716-
buffer = ReadBuffer(index, blkno);
719+
buffer = ReadBufferWithStrategy(index, blkno, info->strategy);
717720
LockBuffer(buffer, GIN_SHARE);
718721
page = (Page) BufferGetPage(buffer);
719722

src/backend/access/gist/gistvacuum.c

Lines changed: 7 additions & 5 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/gistvacuum.c,v 1.29 2007/01/05 22:19:22 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.30 2007/05/31 14:03:09 teodor Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -35,6 +35,7 @@ typedef struct
3535
Relation index;
3636
MemoryContext opCtx;
3737
GistBulkDeleteResult *result;
38+
BufferAccessStrategy strategy;
3839
} GistVacuum;
3940

4041
typedef struct
@@ -83,7 +84,7 @@ gistDeleteSubtree(GistVacuum *gv, BlockNumber blkno)
8384
Buffer buffer;
8485
Page page;
8586

86-
buffer = ReadBuffer(gv->index, blkno);
87+
buffer = ReadBufferWithStrategy(gv->index, blkno, gv->strategy);
8788
LockBuffer(buffer, GIST_EXCLUSIVE);
8889
page = (Page) BufferGetPage(buffer);
8990

@@ -303,7 +304,7 @@ gistVacuumUpdate(GistVacuum *gv, BlockNumber blkno, bool needunion)
303304

304305
vacuum_delay_point();
305306

306-
buffer = ReadBuffer(gv->index, blkno);
307+
buffer = ReadBufferWithStrategy(gv->index, blkno, gv->strategy);
307308
LockBuffer(buffer, GIST_EXCLUSIVE);
308309
gistcheckpage(gv->index, buffer);
309310
page = (Page) BufferGetPage(buffer);
@@ -550,6 +551,7 @@ gistvacuumcleanup(PG_FUNCTION_ARGS)
550551
initGISTstate(&(gv.giststate), rel);
551552
gv.opCtx = createTempGistContext();
552553
gv.result = stats;
554+
gv.strategy = info->strategy;
553555

554556
/* walk through the entire index for update tuples */
555557
res = gistVacuumUpdate(&gv, GIST_ROOT_BLKNO, false);
@@ -600,7 +602,7 @@ gistvacuumcleanup(PG_FUNCTION_ARGS)
600602

601603
vacuum_delay_point();
602604

603-
buffer = ReadBuffer(rel, blkno);
605+
buffer = ReadBufferWithStrategy(rel, blkno, info->strategy);
604606
LockBuffer(buffer, GIST_SHARE);
605607
page = (Page) BufferGetPage(buffer);
606608

@@ -704,7 +706,7 @@ gistbulkdelete(PG_FUNCTION_ARGS)
704706

705707
while (stack)
706708
{
707-
Buffer buffer = ReadBuffer(rel, stack->blkno);
709+
Buffer buffer = ReadBufferWithStrategy(rel, stack->blkno, info->strategy);
708710
Page page;
709711
OffsetNumber i,
710712
maxoff;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy