@@ -274,8 +274,12 @@ rumVacuumPostingTreeLeaves(RumVacuumState *gvs, OffsetNumber attnum, BlockNumber
274
274
{
275
275
OffsetNumber newMaxOff ,
276
276
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 );
279
283
280
284
newMaxOff = rumVacuumPostingList (gvs , attnum ,
281
285
RumDataPageGetData (page ), oldMaxOff , & cleaned ,
@@ -284,24 +288,21 @@ rumVacuumPostingTreeLeaves(RumVacuumState *gvs, OffsetNumber attnum, BlockNumber
284
288
/* saves changes about deleted tuple ... */
285
289
if (oldMaxOff != newMaxOff )
286
290
{
287
- START_CRIT_SECTION ();
288
-
289
291
if (newMaxOff > 0 )
290
292
memcpy (RumDataPageGetData (page ), cleaned , newSize );
291
293
292
294
pfree (cleaned );
293
295
RumPageGetOpaque (page )-> maxoff = newMaxOff ;
294
296
updateItemIndexes (page , attnum , & gvs -> rumstate );
295
297
296
- MarkBufferDirty (buffer );
297
- xlogVacuumPage (gvs -> index , buffer , attnum , & gvs -> rumstate );
298
-
299
- END_CRIT_SECTION ();
298
+ GenericXLogFinish (state );
300
299
301
300
/* if root is a leaf page, we don't desire further processing */
302
301
if (!isRoot && RumPageGetOpaque (page )-> maxoff < FirstOffsetNumber )
303
302
hasVoidPage = TRUE;
304
303
}
304
+ else
305
+ GenericXLogAbort (state );
305
306
}
306
307
else
307
308
{
@@ -691,11 +692,14 @@ rumbulkdelete(IndexVacuumInfo *info,
691
692
692
693
for (;;)
693
694
{
694
- Page page = BufferGetPage ( buffer , NULL , NULL ,
695
- BGP_NO_SNAPSHOT_TEST ) ;
695
+ GenericXLogState * state ;
696
+ Page page ;
696
697
Page resPage ;
697
698
uint32 i ;
698
699
700
+ state = GenericXLogStart (index );
701
+ page = GenericXLogRegisterBuffer (state , buffer , 0 );
702
+
699
703
Assert (!RumPageIsData (page ));
700
704
701
705
resPage = rumVacuumEntryPage (& gvs , buffer , rootOfPostingTree , attnumOfPostingTree , & nRoot );
@@ -704,15 +708,13 @@ rumbulkdelete(IndexVacuumInfo *info,
704
708
705
709
if (resPage )
706
710
{
707
- START_CRIT_SECTION ();
708
711
PageRestoreTempPage (resPage , page );
709
- MarkBufferDirty (buffer );
710
- xlogVacuumPage (gvs .index , buffer , InvalidOffsetNumber , & gvs .rumstate );
712
+ GenericXLogFinish (state );
711
713
UnlockReleaseBuffer (buffer );
712
- END_CRIT_SECTION ();
713
714
}
714
715
else
715
716
{
717
+ GenericXLogAbort (state );
716
718
UnlockReleaseBuffer (buffer );
717
719
}
718
720
0 commit comments