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

Commitaaa4b02

Browse files
author
Artur Zakirov
committed
Fix Generic WAL for vacuum
1 parentf9e5bae commitaaa4b02

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
OffsetNumbernewMaxOff,
276276
oldMaxOff=RumPageGetOpaque(page)->maxoff;
277-
Pointercleaned=NULL;
278-
SizenewSize;
277+
Pointercleaned=NULL;
278+
SizenewSize;
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-
Pagepage=BufferGetPage(buffer,NULL,NULL,
695-
BGP_NO_SNAPSHOT_TEST);
695+
GenericXLogState*state;
696+
Pagepage;
696697
PageresPage;
697698
uint32i;
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)

[8]ページ先頭

©2009-2025 Movatter.jp