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

Commitf744262

Browse files
committed
Move call of MarkBufferDirty() before XLogInsert() as required.
Many thanks to Heikki Linnakangas <heikki@enterprisedb.com> for hissharp eyes.
1 parent4c0fe51 commitf744262

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

‎src/backend/access/gin/ginbtree.c

Lines changed: 12 additions & 7 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/ginbtree.c,v 1.8 2007/02/01 04:16:07 neilc Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/ginbtree.c,v 1.9 2007/06/05 12:47:49 teodor Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -294,6 +294,8 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
294294
START_CRIT_SECTION();
295295
btree->placeToPage(btree,stack->buffer,stack->off,&rdata);
296296

297+
MarkBufferDirty(stack->buffer);
298+
297299
if (!btree->index->rd_istemp)
298300
{
299301
XLogRecPtrrecptr;
@@ -303,7 +305,6 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
303305
PageSetTLI(page,ThisTimeLineID);
304306
}
305307

306-
MarkBufferDirty(stack->buffer);
307308
UnlockReleaseBuffer(stack->buffer);
308309
END_CRIT_SECTION();
309310

@@ -351,6 +352,11 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
351352
GinInitBuffer(stack->buffer,GinPageGetOpaque(newlpage)->flags& ~GIN_LEAF);
352353
PageRestoreTempPage(newlpage,lpage);
353354
btree->fillRoot(btree,stack->buffer,lbuffer,rbuffer);
355+
356+
MarkBufferDirty(rbuffer);
357+
MarkBufferDirty(lbuffer);
358+
MarkBufferDirty(stack->buffer);
359+
354360
if (!btree->index->rd_istemp)
355361
{
356362
XLogRecPtrrecptr;
@@ -364,11 +370,8 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
364370
PageSetTLI(rpage,ThisTimeLineID);
365371
}
366372

367-
MarkBufferDirty(rbuffer);
368373
UnlockReleaseBuffer(rbuffer);
369-
MarkBufferDirty(lbuffer);
370374
UnlockReleaseBuffer(lbuffer);
371-
MarkBufferDirty(stack->buffer);
372375
UnlockReleaseBuffer(stack->buffer);
373376

374377
END_CRIT_SECTION();
@@ -389,6 +392,10 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
389392

390393
START_CRIT_SECTION();
391394
PageRestoreTempPage(newlpage,lpage);
395+
396+
MarkBufferDirty(rbuffer);
397+
MarkBufferDirty(stack->buffer);
398+
392399
if (!btree->index->rd_istemp)
393400
{
394401
XLogRecPtrrecptr;
@@ -399,9 +406,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
399406
PageSetLSN(rpage,recptr);
400407
PageSetTLI(rpage,ThisTimeLineID);
401408
}
402-
MarkBufferDirty(rbuffer);
403409
UnlockReleaseBuffer(rbuffer);
404-
MarkBufferDirty(stack->buffer);
405410
END_CRIT_SECTION();
406411
}
407412
}

‎src/backend/access/gin/gininsert.c

Lines changed: 5 additions & 3 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/gininsert.c,v 1.8 2007/02/01 04:16:08 neilc Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/gininsert.c,v 1.9 2007/06/05 12:47:49 teodor Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -48,6 +48,8 @@ createPostingTree(Relation index, ItemPointerData *items, uint32 nitems)
4848
memcpy(GinDataPageGetData(page),items,sizeof(ItemPointerData)*nitems);
4949
GinPageGetOpaque(page)->maxoff=nitems;
5050

51+
MarkBufferDirty(buffer);
52+
5153
if (!index->rd_istemp)
5254
{
5355
XLogRecPtrrecptr;
@@ -76,7 +78,6 @@ createPostingTree(Relation index, ItemPointerData *items, uint32 nitems)
7678

7779
}
7880

79-
MarkBufferDirty(buffer);
8081
UnlockReleaseBuffer(buffer);
8182

8283
END_CRIT_SECTION();
@@ -281,6 +282,8 @@ ginbuild(PG_FUNCTION_ARGS)
281282
buffer=GinNewBuffer(index);
282283
START_CRIT_SECTION();
283284
GinInitBuffer(buffer,GIN_LEAF);
285+
MarkBufferDirty(buffer);
286+
284287
if (!index->rd_istemp)
285288
{
286289
XLogRecPtrrecptr;
@@ -301,7 +304,6 @@ ginbuild(PG_FUNCTION_ARGS)
301304

302305
}
303306

304-
MarkBufferDirty(buffer);
305307
UnlockReleaseBuffer(buffer);
306308
END_CRIT_SECTION();
307309

‎src/backend/access/gin/ginvacuum.c

Lines changed: 8 additions & 8 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.14 2007/06/04 15:56:28 teodor Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.15 2007/06/05 12:47:49 teodor Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -191,9 +191,9 @@ ginVacuumPostingTreeLeaves(GinVacuumState *gvs, BlockNumber blkno, bool isRoot,
191191
pfree(cleaned);
192192
GinPageGetOpaque(page)->maxoff=newMaxOff;
193193

194+
MarkBufferDirty(buffer);
194195
xlogVacuumPage(gvs->index,buffer);
195196

196-
MarkBufferDirty(buffer);
197197
END_CRIT_SECTION();
198198

199199
/* if root is a leaf page, we don't desire further processing */
@@ -282,6 +282,11 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
282282
*/
283283
GinPageGetOpaque(page)->flags=GIN_DELETED;
284284

285+
MarkBufferDirty(pBuffer);
286+
if (leftBlkno!=InvalidBlockNumber)
287+
MarkBufferDirty(lBuffer);
288+
MarkBufferDirty(dBuffer);
289+
285290
if (!gvs->index->rd_istemp)
286291
{
287292
XLogRecPtrrecptr;
@@ -339,18 +344,13 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
339344
}
340345
}
341346

342-
MarkBufferDirty(pBuffer);
343347
if (!isParentRoot)
344348
LockBuffer(pBuffer,GIN_UNLOCK);
345349
ReleaseBuffer(pBuffer);
346350

347351
if (leftBlkno!=InvalidBlockNumber)
348-
{
349-
MarkBufferDirty(lBuffer);
350352
UnlockReleaseBuffer(lBuffer);
351-
}
352353

353-
MarkBufferDirty(dBuffer);
354354
UnlockReleaseBuffer(dBuffer);
355355

356356
END_CRIT_SECTION();
@@ -636,8 +636,8 @@ ginbulkdelete(PG_FUNCTION_ARGS)
636636
{
637637
START_CRIT_SECTION();
638638
PageRestoreTempPage(resPage,page);
639-
xlogVacuumPage(gvs.index,buffer);
640639
MarkBufferDirty(buffer);
640+
xlogVacuumPage(gvs.index,buffer);
641641
UnlockReleaseBuffer(buffer);
642642
END_CRIT_SECTION();
643643
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp