@@ -47,33 +47,33 @@ typedef struct KeyArray
4747 *
4848 * Returns amount of free space left on the page.
4949 */
50- static int32
51- writeListPage (Relation index ,Buffer buffer ,
52- IndexTuple * tuples ,int32 ntuples ,BlockNumber rightlink )
50+ static uint32
51+ writeListPage (RumState * rumstate ,Buffer buffer ,
52+ IndexTuple * tuples ,uint32 ntuples ,BlockNumber rightlink )
5353{
5454Page page ;
55- int32 i ,
55+ uint32 i ,
5656freesize ;
5757OffsetNumber l ,
5858off ;
5959GenericXLogState * state ;
6060
61- state = GenericXLogStart ( index );
61+ state = RumGenericXLogStart ( rumstate -> index , rumstate -> isBuild );
6262
63- page = GenericXLogRegisterBuffer (state ,buffer ,0 );
63+ page = RumGenericXLogRegisterBuffer (state ,buffer ,0 , rumstate -> isBuild );
6464RumInitPage (page ,RUM_LIST ,BufferGetPageSize (buffer ));
6565
6666off = FirstOffsetNumber ;
6767
6868for (i = 0 ;i < ntuples ;i ++ )
6969{
70- int this_size = IndexTupleSize (tuples [i ]);
70+ Size this_size = IndexTupleSize (tuples [i ]);
7171
7272l = PageAddItem (page , (Item )tuples [i ],this_size ,off , false, false);
7373
7474if (l == InvalidOffsetNumber )
7575elog (ERROR ,"failed to add item to index page in \"%s\"" ,
76- RelationGetRelationName (index ));
76+ RelationGetRelationName (rumstate -> index ));
7777
7878off ++ ;
7979}
@@ -97,22 +97,22 @@ writeListPage(Relation index, Buffer buffer,
9797
9898/* get free space before releasing buffer */
9999freesize = PageGetExactFreeSpace (page );
100- GenericXLogFinish (state );
100+ RumGenericXLogFinish (state , rumstate -> isBuild );
101101UnlockReleaseBuffer (buffer );
102102
103103return freesize ;
104104}
105105
106106static void
107- makeSublist (Relation index ,IndexTuple * tuples ,int32 ntuples ,
107+ makeSublist (RumState * rumstate ,IndexTuple * tuples ,uint32 ntuples ,
108108RumMetaPageData * res )
109109{
110110Buffer curBuffer = InvalidBuffer ;
111111Buffer prevBuffer = InvalidBuffer ;
112- int i ,
113- size = 0 ,
112+ uint32 i ,
113+ startTuple = 0 ;
114+ uint64 size = 0 ,
114115tupsize ;
115- int startTuple = 0 ;
116116
117117Assert (ntuples > 0 );
118118
@@ -123,12 +123,12 @@ makeSublist(Relation index, IndexTuple *tuples, int32 ntuples,
123123{
124124if (curBuffer == InvalidBuffer )
125125{
126- curBuffer = RumNewBuffer (index );
126+ curBuffer = RumNewBuffer (rumstate -> index );
127127
128128if (prevBuffer != InvalidBuffer )
129129{
130130res -> nPendingPages ++ ;
131- writeListPage (index ,prevBuffer ,
131+ writeListPage (rumstate ,prevBuffer ,
132132tuples + startTuple ,
133133i - startTuple ,
134134BufferGetBlockNumber (curBuffer ));
@@ -161,7 +161,7 @@ makeSublist(Relation index, IndexTuple *tuples, int32 ntuples,
161161 * Write last page
162162 */
163163res -> tail = BufferGetBlockNumber (curBuffer );
164- res -> tailFreeSize = writeListPage (index ,curBuffer ,
164+ res -> tailFreeSize = writeListPage (rumstate ,curBuffer ,
165165tuples + startTuple ,
166166ntuples - startTuple ,
167167InvalidBlockNumber );
@@ -193,7 +193,7 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
193193if (collector -> ntuples == 0 )
194194return ;
195195
196- state = GenericXLogStart (rumstate -> index );
196+ state = RumGenericXLogStart (rumstate -> index , rumstate -> isBuild );
197197metabuffer = ReadBuffer (index ,RUM_METAPAGE_BLKNO );
198198
199199if (collector -> sumsize + collector -> ntuples * sizeof (ItemIdData )> RumListPageSize )
@@ -230,13 +230,14 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
230230RumMetaPageData sublist ;
231231
232232memset (& sublist ,0 ,sizeof (RumMetaPageData ));
233- makeSublist (index ,collector -> tuples ,collector -> ntuples ,& sublist );
233+ makeSublist (rumstate ,collector -> tuples ,collector -> ntuples ,& sublist );
234234
235235/*
236236 * metapage was unlocked, see above
237237 */
238238LockBuffer (metabuffer ,RUM_EXCLUSIVE );
239- metapage = GenericXLogRegisterBuffer (state ,metabuffer ,0 );
239+ metapage = RumGenericXLogRegisterBuffer (state ,metabuffer ,0 ,
240+ rumstate -> isBuild );
240241metadata = RumPageGetMeta (metapage );
241242
242243if (metadata -> head == InvalidBlockNumber )
@@ -259,7 +260,8 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
259260
260261buffer = ReadBuffer (index ,metadata -> tail );
261262LockBuffer (buffer ,RUM_EXCLUSIVE );
262- page = GenericXLogRegisterBuffer (state ,buffer ,0 );
263+ page = RumGenericXLogRegisterBuffer (state ,buffer ,0 ,
264+ rumstate -> isBuild );
263265
264266Assert (RumPageGetOpaque (page )-> rightlink == InvalidBlockNumber );
265267
@@ -279,15 +281,16 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
279281 */
280282OffsetNumber l ,
281283off ;
282- int i ,
283- tupsize ;
284+ uint32 i ;
285+ Size tupsize ;
284286
285- metapage = GenericXLogRegisterBuffer (state ,metabuffer ,0 );
287+ metapage = RumGenericXLogRegisterBuffer (state ,metabuffer ,0 ,
288+ rumstate -> isBuild );
286289metadata = RumPageGetMeta (metapage );
287290
288291buffer = ReadBuffer (index ,metadata -> tail );
289292LockBuffer (buffer ,RUM_EXCLUSIVE );
290- page = GenericXLogRegisterBuffer (state ,buffer ,0 );
293+ page = RumGenericXLogRegisterBuffer (state ,buffer ,0 , rumstate -> isBuild );
291294
292295off = (PageIsEmpty (page )) ?FirstOffsetNumber :
293296OffsetNumberNext (PageGetMaxOffsetNumber (page ));
@@ -306,7 +309,7 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
306309
307310if (l == InvalidOffsetNumber )
308311{
309- GenericXLogAbort (state );
312+ RumGenericXLogAbort (state , rumstate -> isBuild );
310313elog (ERROR ,"failed to add item to index page in \"%s\"" ,
311314RelationGetRelationName (index ));
312315}
@@ -329,7 +332,7 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
329332if (metadata -> nPendingPages * RUM_PAGE_FREESIZE > work_mem * 1024L )
330333needCleanup = true;
331334
332- GenericXLogFinish (state );
335+ RumGenericXLogFinish (state , rumstate -> isBuild );
333336
334337if (buffer != InvalidBuffer )
335338UnlockReleaseBuffer (buffer );
@@ -349,7 +352,7 @@ RumFastFormTuple(RumState * rumstate,
349352Datum datums [3 ];
350353bool isnull [3 ];
351354IndexTuple itup ;
352- uint32 newsize ;
355+ Size newsize ;
353356
354357/* Build the basic tuple: optional column number, plus key datum */
355358
@@ -380,7 +383,7 @@ RumFastFormTuple(RumState * rumstate,
380383
381384if (category != RUM_CAT_NORM_KEY )
382385{
383- uint32 minsize ;
386+ Size minsize ;
384387
385388Assert (IndexTupleHasNulls (itup ));
386389minsize = IndexInfoFindDataOffset (itup -> t_info )+
@@ -497,17 +500,18 @@ rumHeapTupleFastCollect(RumState * rumstate,
497500 * (if so, we can just abandon our own efforts)
498501 */
499502static bool
500- shiftList (Relation index ,Buffer metabuffer ,BlockNumber newHead ,
503+ shiftList (RumState * rumstate ,Buffer metabuffer ,BlockNumber newHead ,
501504IndexBulkDeleteResult * stats )
502505{
503506Page metapage ;
504507RumMetaPageData * metadata ;
505508BlockNumber blknoToDelete ;
506509GenericXLogState * metastate ;
507510
508- metastate = GenericXLogStart (index );
509- metapage = GenericXLogRegisterBuffer (metastate ,metabuffer ,
510- GENERIC_XLOG_FULL_IMAGE );
511+ metastate = RumGenericXLogStart (rumstate -> index ,rumstate -> isBuild );
512+ metapage = RumGenericXLogRegisterBuffer (metastate ,metabuffer ,
513+ GENERIC_XLOG_FULL_IMAGE ,
514+ rumstate -> isBuild );
511515metadata = RumPageGetMeta (metapage );
512516blknoToDelete = metadata -> head ;
513517
@@ -522,7 +526,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
522526
523527while (nDeleted < RUM_NDELETE_AT_ONCE && blknoToDelete != newHead )
524528{
525- buffers [nDeleted ]= ReadBuffer (index ,blknoToDelete );
529+ buffers [nDeleted ]= ReadBuffer (rumstate -> index ,blknoToDelete );
526530LockBuffer (buffers [nDeleted ],RUM_EXCLUSIVE );
527531
528532page = BufferGetPage (buffers [nDeleted ]);
@@ -531,7 +535,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
531535
532536if (RumPageIsDeleted (page ))
533537{
534- GenericXLogAbort (metastate );
538+ RumGenericXLogAbort (metastate , rumstate -> isBuild );
535539/* concurrent cleanup process is detected */
536540for (i = 0 ;i < nDeleted ;i ++ )
537541UnlockReleaseBuffer (buffers [i ]);
@@ -565,18 +569,19 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
565569
566570for (i = 0 ;i < nDeleted ;i ++ )
567571{
568- state = GenericXLogStart (index );
569- page = GenericXLogRegisterBuffer (state ,buffers [i ],0 );
572+ state = RumGenericXLogStart (rumstate -> index ,rumstate -> isBuild );
573+ page = RumGenericXLogRegisterBuffer (state ,buffers [i ],0 ,
574+ rumstate -> isBuild );
570575
571576RumPageGetOpaque (page )-> flags = RUM_DELETED ;
572- GenericXLogFinish (state );
577+ RumGenericXLogFinish (state , rumstate -> isBuild );
573578}
574579
575580for (i = 0 ;i < nDeleted ;i ++ )
576581UnlockReleaseBuffer (buffers [i ]);
577582}while (blknoToDelete != newHead );
578583
579- GenericXLogFinish (metastate );
584+ RumGenericXLogFinish (metastate , rumstate -> isBuild );
580585
581586return false;
582587}
@@ -882,7 +887,7 @@ rumInsertCleanup(RumState * rumstate,
882887 * remove read pages from pending list, at this point all content
883888 * of read pages is in regular structure
884889 */
885- if (shiftList (index ,metabuffer ,blkno ,stats ))
890+ if (shiftList (rumstate ,metabuffer ,blkno ,stats ))
886891{
887892/* another cleanup process is running concurrently */
888893LockBuffer (metabuffer ,RUM_UNLOCK );