@@ -221,8 +221,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
221
221
222
222
state = GenericXLogStart (rumstate -> index );
223
223
metabuffer = ReadBuffer (index , RUM_METAPAGE_BLKNO );
224
- metapage = GenericXLogRegisterBuffer (state , metabuffer ,
225
- GENERIC_XLOG_FULL_IMAGE );
224
+ metapage = GenericXLogRegisterBuffer (state , metabuffer , 0 );
226
225
227
226
if (collector -> sumsize + collector -> ntuples * sizeof (ItemIdData ) > RumListPageSize )
228
227
{
@@ -290,8 +289,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
290
289
291
290
buffer = ReadBuffer (index , metadata -> tail );
292
291
LockBuffer (buffer , RUM_EXCLUSIVE );
293
- page = GenericXLogRegisterBuffer (state , buffer ,
294
- GENERIC_XLOG_FULL_IMAGE );
292
+ page = GenericXLogRegisterBuffer (state , buffer , 0 );
295
293
296
294
rdata [0 ].next = rdata + 1 ;
297
295
@@ -329,8 +327,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
329
327
330
328
buffer = ReadBuffer (index , metadata -> tail );
331
329
LockBuffer (buffer , RUM_EXCLUSIVE );
332
- page = GenericXLogRegisterBuffer (state , buffer ,
333
- GENERIC_XLOG_FULL_IMAGE );
330
+ page = GenericXLogRegisterBuffer (state , buffer , 0 );
334
331
335
332
off = (PageIsEmpty (page )) ? FirstOffsetNumber :
336
333
OffsetNumberNext (PageGetMaxOffsetNumber (page ));
@@ -597,8 +594,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
597
594
buffers [data .ndeleted ] = ReadBuffer (index , blknoToDelete );
598
595
LockBuffer (buffers [data .ndeleted ], RUM_EXCLUSIVE );
599
596
600
- page = GenericXLogRegisterBuffer (state , buffers [data .ndeleted ],
601
- GENERIC_XLOG_FULL_IMAGE );
597
+ page = GenericXLogRegisterBuffer (state , buffers [data .ndeleted ], 0 );
602
598
603
599
data .ndeleted ++ ;
604
600
@@ -641,8 +637,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
641
637
642
638
for (i = 0 ; i < data .ndeleted ; i ++ )
643
639
{
644
- page = GenericXLogRegisterBuffer (state , buffers [i ],
645
- GENERIC_XLOG_FULL_IMAGE );
640
+ page = GenericXLogRegisterBuffer (state , buffers [i ], 0 );
646
641
647
642
RumPageGetOpaque (page )-> flags = RUM_DELETED ;
648
643
MarkBufferDirty (buffers [i ]);
@@ -812,15 +807,20 @@ rumInsertCleanup(RumState *rumstate,
812
807
BuildAccumulator accum ;
813
808
KeyArray datums ;
814
809
BlockNumber blkno ;
810
+ GenericXLogState * metastate ;
811
+
812
+ metastate = GenericXLogStart (rumstate -> index );
815
813
816
814
metabuffer = ReadBuffer (index , RUM_METAPAGE_BLKNO );
817
815
LockBuffer (metabuffer , RUM_SHARE );
818
- metapage = BufferGetPage (metabuffer , NULL , NULL , BGP_NO_SNAPSHOT_TEST );
816
+
817
+ metapage = GenericXLogRegisterBuffer (metastate , metabuffer , 0 );
819
818
metadata = RumPageGetMeta (metapage );
820
819
821
820
if (metadata -> head == InvalidBlockNumber )
822
821
{
823
822
/* Nothing to do */
823
+ GenericXLogAbort (metastate );
824
824
UnlockReleaseBuffer (metabuffer );
825
825
return ;
826
826
}
@@ -829,9 +829,6 @@ rumInsertCleanup(RumState *rumstate,
829
829
* Read and lock head of pending list
830
830
*/
831
831
blkno = metadata -> head ;
832
- buffer = ReadBuffer (index , blkno );
833
- LockBuffer (buffer , RUM_SHARE );
834
- page = BufferGetPage (buffer , NULL , NULL , BGP_NO_SNAPSHOT_TEST );
835
832
836
833
LockBuffer (metabuffer , RUM_UNLOCK );
837
834
@@ -857,9 +854,18 @@ rumInsertCleanup(RumState *rumstate,
857
854
*/
858
855
for (;;)
859
856
{
857
+ GenericXLogState * state ;
858
+
859
+ state = GenericXLogStart (index );
860
+
861
+ buffer = ReadBuffer (index , blkno );
862
+ LockBuffer (buffer , RUM_SHARE );
863
+ page = GenericXLogRegisterBuffer (state , buffer , 0 );
864
+
860
865
if (RumPageIsDeleted (page ))
861
866
{
862
867
/* another cleanup process is running concurrently */
868
+ GenericXLogAbort (state );
863
869
UnlockReleaseBuffer (buffer );
864
870
break ;
865
871
}
@@ -932,6 +938,7 @@ rumInsertCleanup(RumState *rumstate,
932
938
if (RumPageIsDeleted (page ))
933
939
{
934
940
/* another cleanup process is running concurrently */
941
+ GenericXLogAbort (state );
935
942
UnlockReleaseBuffer (buffer );
936
943
LockBuffer (metabuffer , RUM_UNLOCK );
937
944
break ;
@@ -975,6 +982,7 @@ rumInsertCleanup(RumState *rumstate,
975
982
* Remember next page - it will become the new list head
976
983
*/
977
984
blkno = RumPageGetOpaque (page )-> rightlink ;
985
+ GenericXLogFinish (state );
978
986
UnlockReleaseBuffer (buffer ); /* shiftList will do exclusive
979
987
* locking */
980
988
@@ -1008,18 +1016,18 @@ rumInsertCleanup(RumState *rumstate,
1008
1016
else
1009
1017
{
1010
1018
blkno = RumPageGetOpaque (page )-> rightlink ;
1019
+ GenericXLogFinish (state );
1011
1020
UnlockReleaseBuffer (buffer );
1012
1021
}
1013
1022
1014
1023
/*
1015
1024
* Read next page in pending list
1016
1025
*/
1017
1026
vacuum_delay_point ();
1018
- buffer = ReadBuffer (index , blkno );
1019
- LockBuffer (buffer , RUM_SHARE );
1020
- page = BufferGetPage (buffer , NULL , NULL , BGP_NO_SNAPSHOT_TEST );
1021
1027
}
1022
1028
1029
+ GenericXLogFinish (metastate );
1030
+
1023
1031
ReleaseBuffer (metabuffer );
1024
1032
1025
1033
/* Clean up temporary space */
0 commit comments