Skip to content

Commit aaa4b02

Browse files
author
Artur Zakirov
committed
Fix Generic WAL for vacuum
1 parent f9e5bae commit aaa4b02

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

rumfast.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,8 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
528528
buffers[data.ndeleted] = ReadBuffer(index, blknoToDelete);
529529
LockBuffer(buffers[data.ndeleted], RUM_EXCLUSIVE);
530530

531-
page = BufferGetPage(buffers[data.ndeleted]);
531+
page = BufferGetPage(buffers[data.ndeleted], NULL, NULL,
532+
BGP_NO_SNAPSHOT_TEST);
532533

533534
data.ndeleted++;
534535

@@ -739,7 +740,7 @@ rumInsertCleanup(RumState *rumstate,
739740
metabuffer = ReadBuffer(index, RUM_METAPAGE_BLKNO);
740741
LockBuffer(metabuffer, RUM_SHARE);
741742

742-
metapage = BufferGetPage(metabuffer);
743+
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
743744
metadata = RumPageGetMeta(metapage);
744745

745746
if (metadata->head == InvalidBlockNumber)
@@ -755,7 +756,7 @@ rumInsertCleanup(RumState *rumstate,
755756
blkno = metadata->head;
756757
buffer = ReadBuffer(index, blkno);
757758
LockBuffer(buffer, RUM_SHARE);
758-
page = BufferGetPage(buffer);
759+
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
759760

760761
LockBuffer(metabuffer, RUM_UNLOCK);
761762

@@ -941,7 +942,7 @@ rumInsertCleanup(RumState *rumstate,
941942
vacuum_delay_point();
942943
buffer = ReadBuffer(index, blkno);
943944
LockBuffer(buffer, RUM_SHARE);
944-
page = BufferGetPage(buffer);
945+
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
945946
}
946947

947948
ReleaseBuffer(metabuffer);

rumvacuum.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,12 @@ rumVacuumPostingTreeLeaves(RumVacuumState *gvs, OffsetNumber attnum, BlockNumber
274274
{
275275
OffsetNumber newMaxOff,
276276
oldMaxOff = RumPageGetOpaque(page)->maxoff;
277-
Pointer cleaned = NULL;
278-
Size newSize;
277+
Pointer cleaned = NULL;
278+
Size newSize;
279+
GenericXLogState *state;
280+
281+
state = GenericXLogStart(gvs->index);
282+
page = GenericXLogRegisterBuffer(state, buffer, 0);
279283

280284
newMaxOff = rumVacuumPostingList(gvs, attnum,
281285
RumDataPageGetData(page), oldMaxOff, &cleaned,
@@ -284,24 +288,21 @@ rumVacuumPostingTreeLeaves(RumVacuumState *gvs, OffsetNumber attnum, BlockNumber
284288
/* saves changes about deleted tuple ... */
285289
if (oldMaxOff != newMaxOff)
286290
{
287-
START_CRIT_SECTION();
288-
289291
if (newMaxOff > 0)
290292
memcpy(RumDataPageGetData(page), cleaned, newSize);
291293

292294
pfree(cleaned);
293295
RumPageGetOpaque(page)->maxoff = newMaxOff;
294296
updateItemIndexes(page, attnum, &gvs->rumstate);
295297

296-
MarkBufferDirty(buffer);
297-
xlogVacuumPage(gvs->index, buffer, attnum, &gvs->rumstate);
298-
299-
END_CRIT_SECTION();
298+
GenericXLogFinish(state);
300299

301300
/* if root is a leaf page, we don't desire further processing */
302301
if (!isRoot && RumPageGetOpaque(page)->maxoff < FirstOffsetNumber)
303302
hasVoidPage = TRUE;
304303
}
304+
else
305+
GenericXLogAbort(state);
305306
}
306307
else
307308
{
@@ -691,11 +692,14 @@ rumbulkdelete(IndexVacuumInfo *info,
691692

692693
for (;;)
693694
{
694-
Page page = BufferGetPage(buffer, NULL, NULL,
695-
BGP_NO_SNAPSHOT_TEST);
695+
GenericXLogState *state;
696+
Page page;
696697
Page resPage;
697698
uint32 i;
698699

700+
state = GenericXLogStart(index);
701+
page = GenericXLogRegisterBuffer(state, buffer, 0);
702+
699703
Assert(!RumPageIsData(page));
700704

701705
resPage = rumVacuumEntryPage(&gvs, buffer, rootOfPostingTree, attnumOfPostingTree, &nRoot);
@@ -704,15 +708,13 @@ rumbulkdelete(IndexVacuumInfo *info,
704708

705709
if (resPage)
706710
{
707-
START_CRIT_SECTION();
708711
PageRestoreTempPage(resPage, page);
709-
MarkBufferDirty(buffer);
710-
xlogVacuumPage(gvs.index, buffer, InvalidOffsetNumber, &gvs.rumstate);
712+
GenericXLogFinish(state);
711713
UnlockReleaseBuffer(buffer);
712-
END_CRIT_SECTION();
713714
}
714715
else
715716
{
717+
GenericXLogAbort(state);
716718
UnlockReleaseBuffer(buffer);
717719
}
718720

0 commit comments

Comments
 (0)