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

Commit3626a0b

Browse files
author
Artur Zakirov
committed
Added macroses to handle generic XLOG
1 parent26f88a0 commit3626a0b

File tree

6 files changed

+122
-85
lines changed

6 files changed

+122
-85
lines changed

‎rum.h‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,21 @@ typedef struct
296296
#defineRumPageGetIndexes(page) \
297297
((RumDataLeafItemIndex *)(RumDataPageGetData(page) + RumDataPageSize))
298298

299+
/*
300+
* Macros to handle generic XLOG
301+
*/
302+
#defineRumGenericXLogStart(index,isbuild) \
303+
(!(isbuild) ? GenericXLogStart(index) : NULL)
304+
305+
#defineRumGenericXLogRegisterBuffer(state,buffer,flags,isbuild) \
306+
(!(isbuild) ? GenericXLogRegisterBuffer(state, buffer, flags) : \
307+
BufferGetPage(buffer))
308+
309+
#defineRumGenericXLogFinish(state,isbuild) \
310+
(!(isbuild) ? GenericXLogFinish(state) : 0)
311+
312+
#defineRumGenericXLogAbort(state,isbuild) \
313+
(!(isbuild) ? GenericXLogAbort(state) : (void) 0)
299314

300315
/*
301316
* Storage type for RUM's reloptions
@@ -377,6 +392,8 @@ typedef struct RumConfig
377392
OidaddInfoTypeOid;
378393
}RumConfig;
379394

395+
396+
380397
/* rumutil.c */
381398
externbytea*rumoptions(Datumreloptions,boolvalidate);
382399
externDatumrumhandler(PG_FUNCTION_ARGS);
@@ -401,7 +418,8 @@ extern Datum rumtuple_get_key(RumState * rumstate, IndexTuple tuple,
401418
RumNullCategory*category);
402419

403420
externvoidrumGetStats(Relationindex,GinStatsData*stats);
404-
externvoidrumUpdateStats(Relationindex,constGinStatsData*stats);
421+
externvoidrumUpdateStats(Relationindex,constGinStatsData*stats,
422+
boolisBuild);
405423

406424
/* ruminsert.c */
407425
externIndexBuildResult*rumbuild(Relationheap,Relationindex,

‎rumbtree.c‎

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -385,11 +385,12 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
385385

386386
if (btree->isEnoughSpace(btree,stack->buffer,stack->off))
387387
{
388-
state=GenericXLogStart(index);
389-
page=GenericXLogRegisterBuffer(state,stack->buffer,0);
388+
state=RumGenericXLogStart(index,btree->rumstate->isBuild);
389+
page=RumGenericXLogRegisterBuffer(state,stack->buffer,0,
390+
btree->rumstate->isBuild);
390391

391392
btree->placeToPage(btree,page,stack->off);
392-
GenericXLogFinish(state);
393+
RumGenericXLogFinish(state,btree->rumstate->isBuild);
393394

394395
LockBuffer(stack->buffer,RUM_UNLOCK);
395396
freeRumBtreeStack(stack);
@@ -416,11 +417,13 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
416417
{
417418
Bufferlbuffer;
418419

419-
state=GenericXLogStart(index);
420+
state=RumGenericXLogStart(index,btree->rumstate->isBuild);
420421

421-
page=GenericXLogRegisterBuffer(state,stack->buffer,0);
422-
rpage=GenericXLogRegisterBuffer(state,rbuffer,
423-
GENERIC_XLOG_FULL_IMAGE);
422+
page=RumGenericXLogRegisterBuffer(state,stack->buffer,0,
423+
btree->rumstate->isBuild);
424+
rpage=RumGenericXLogRegisterBuffer(state,rbuffer,
425+
GENERIC_XLOG_FULL_IMAGE,
426+
btree->rumstate->isBuild);
424427

425428
/*
426429
* newlpage is a pointer to memory page, it doesn't associate
@@ -434,8 +437,9 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
434437
* pointer on root to left and right page
435438
*/
436439
lbuffer=RumNewBuffer(btree->index);
437-
lpage=GenericXLogRegisterBuffer(state,lbuffer,
438-
GENERIC_XLOG_FULL_IMAGE);
440+
lpage=RumGenericXLogRegisterBuffer(state,lbuffer,
441+
GENERIC_XLOG_FULL_IMAGE,
442+
btree->rumstate->isBuild);
439443

440444
RumPageGetOpaque(rpage)->rightlink=InvalidBlockNumber;
441445
RumPageGetOpaque(newlpage)->leftlink=InvalidBlockNumber;
@@ -448,7 +452,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
448452
btree->fillRoot(btree,stack->buffer,lbuffer,rbuffer,
449453
page,lpage,rpage);
450454

451-
GenericXLogFinish(state);
455+
RumGenericXLogFinish(state,btree->rumstate->isBuild);
452456

453457
UnlockReleaseBuffer(rbuffer);
454458
UnlockReleaseBuffer(lbuffer);
@@ -471,10 +475,12 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
471475
{
472476
/* split non-root page */
473477

474-
state=GenericXLogStart(index);
478+
state=RumGenericXLogStart(index,btree->rumstate->isBuild);
475479

476-
lpage=GenericXLogRegisterBuffer(state,stack->buffer,0);
477-
rpage=GenericXLogRegisterBuffer(state,rbuffer,0);
480+
lpage=RumGenericXLogRegisterBuffer(state,stack->buffer,0,
481+
btree->rumstate->isBuild);
482+
rpage=RumGenericXLogRegisterBuffer(state,rbuffer,0,
483+
btree->rumstate->isBuild);
478484

479485
/*
480486
* newlpage is a pointer to memory page, it doesn't associate
@@ -490,7 +496,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
490496

491497
PageRestoreTempPage(newlpage,lpage);
492498

493-
GenericXLogFinish(state);
499+
RumGenericXLogFinish(state,btree->rumstate->isBuild);
494500

495501
UnlockReleaseBuffer(rbuffer);
496502
}

‎rumfast.c‎

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -47,33 +47,33 @@ typedef struct KeyArray
4747
*
4848
* Returns amount of free space left on the page.
4949
*/
50-
staticint32
51-
writeListPage(Relationindex,Bufferbuffer,
52-
IndexTuple*tuples,int32ntuples,BlockNumberrightlink)
50+
staticuint32
51+
writeListPage(RumState*rumstate,Bufferbuffer,
52+
IndexTuple*tuples,uint32ntuples,BlockNumberrightlink)
5353
{
5454
Pagepage;
55-
int32i,
55+
uint32i,
5656
freesize;
5757
OffsetNumberl,
5858
off;
5959
GenericXLogState*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);
6464
RumInitPage(page,RUM_LIST,BufferGetPageSize(buffer));
6565

6666
off=FirstOffsetNumber;
6767

6868
for (i=0;i<ntuples;i++)
6969
{
70-
intthis_size=IndexTupleSize(tuples[i]);
70+
Sizethis_size=IndexTupleSize(tuples[i]);
7171

7272
l=PageAddItem(page, (Item)tuples[i],this_size,off, false, false);
7373

7474
if (l==InvalidOffsetNumber)
7575
elog(ERROR,"failed to add item to index page in \"%s\"",
76-
RelationGetRelationName(index));
76+
RelationGetRelationName(rumstate->index));
7777

7878
off++;
7979
}
@@ -97,22 +97,22 @@ writeListPage(Relation index, Buffer buffer,
9797

9898
/* get free space before releasing buffer */
9999
freesize=PageGetExactFreeSpace(page);
100-
GenericXLogFinish(state);
100+
RumGenericXLogFinish(state,rumstate->isBuild);
101101
UnlockReleaseBuffer(buffer);
102102

103103
returnfreesize;
104104
}
105105

106106
staticvoid
107-
makeSublist(Relationindex,IndexTuple*tuples,int32ntuples,
107+
makeSublist(RumState*rumstate,IndexTuple*tuples,uint32ntuples,
108108
RumMetaPageData*res)
109109
{
110110
BuffercurBuffer=InvalidBuffer;
111111
BufferprevBuffer=InvalidBuffer;
112-
inti,
113-
size=0,
112+
uint32i,
113+
startTuple=0;
114+
uint64size=0,
114115
tupsize;
115-
intstartTuple=0;
116116

117117
Assert(ntuples>0);
118118

@@ -123,12 +123,12 @@ makeSublist(Relation index, IndexTuple *tuples, int32 ntuples,
123123
{
124124
if (curBuffer==InvalidBuffer)
125125
{
126-
curBuffer=RumNewBuffer(index);
126+
curBuffer=RumNewBuffer(rumstate->index);
127127

128128
if (prevBuffer!=InvalidBuffer)
129129
{
130130
res->nPendingPages++;
131-
writeListPage(index,prevBuffer,
131+
writeListPage(rumstate,prevBuffer,
132132
tuples+startTuple,
133133
i-startTuple,
134134
BufferGetBlockNumber(curBuffer));
@@ -161,7 +161,7 @@ makeSublist(Relation index, IndexTuple *tuples, int32 ntuples,
161161
* Write last page
162162
*/
163163
res->tail=BufferGetBlockNumber(curBuffer);
164-
res->tailFreeSize=writeListPage(index,curBuffer,
164+
res->tailFreeSize=writeListPage(rumstate,curBuffer,
165165
tuples+startTuple,
166166
ntuples-startTuple,
167167
InvalidBlockNumber);
@@ -193,7 +193,7 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
193193
if (collector->ntuples==0)
194194
return;
195195

196-
state=GenericXLogStart(rumstate->index);
196+
state=RumGenericXLogStart(rumstate->index,rumstate->isBuild);
197197
metabuffer=ReadBuffer(index,RUM_METAPAGE_BLKNO);
198198

199199
if (collector->sumsize+collector->ntuples*sizeof(ItemIdData)>RumListPageSize)
@@ -230,13 +230,14 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
230230
RumMetaPageDatasublist;
231231

232232
memset(&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
*/
238238
LockBuffer(metabuffer,RUM_EXCLUSIVE);
239-
metapage=GenericXLogRegisterBuffer(state,metabuffer,0);
239+
metapage=RumGenericXLogRegisterBuffer(state,metabuffer,0,
240+
rumstate->isBuild);
240241
metadata=RumPageGetMeta(metapage);
241242

242243
if (metadata->head==InvalidBlockNumber)
@@ -259,7 +260,8 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
259260

260261
buffer=ReadBuffer(index,metadata->tail);
261262
LockBuffer(buffer,RUM_EXCLUSIVE);
262-
page=GenericXLogRegisterBuffer(state,buffer,0);
263+
page=RumGenericXLogRegisterBuffer(state,buffer,0,
264+
rumstate->isBuild);
263265

264266
Assert(RumPageGetOpaque(page)->rightlink==InvalidBlockNumber);
265267

@@ -279,15 +281,16 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
279281
*/
280282
OffsetNumberl,
281283
off;
282-
inti,
283-
tupsize;
284+
uint32i;
285+
Sizetupsize;
284286

285-
metapage=GenericXLogRegisterBuffer(state,metabuffer,0);
287+
metapage=RumGenericXLogRegisterBuffer(state,metabuffer,0,
288+
rumstate->isBuild);
286289
metadata=RumPageGetMeta(metapage);
287290

288291
buffer=ReadBuffer(index,metadata->tail);
289292
LockBuffer(buffer,RUM_EXCLUSIVE);
290-
page=GenericXLogRegisterBuffer(state,buffer,0);
293+
page=RumGenericXLogRegisterBuffer(state,buffer,0,rumstate->isBuild);
291294

292295
off= (PageIsEmpty(page)) ?FirstOffsetNumber :
293296
OffsetNumberNext(PageGetMaxOffsetNumber(page));
@@ -306,7 +309,7 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
306309

307310
if (l==InvalidOffsetNumber)
308311
{
309-
GenericXLogAbort(state);
312+
RumGenericXLogAbort(state,rumstate->isBuild);
310313
elog(ERROR,"failed to add item to index page in \"%s\"",
311314
RelationGetRelationName(index));
312315
}
@@ -329,7 +332,7 @@ rumHeapTupleFastInsert(RumState * rumstate, RumTupleCollector * collector)
329332
if (metadata->nPendingPages*RUM_PAGE_FREESIZE>work_mem*1024L)
330333
needCleanup= true;
331334

332-
GenericXLogFinish(state);
335+
RumGenericXLogFinish(state,rumstate->isBuild);
333336

334337
if (buffer!=InvalidBuffer)
335338
UnlockReleaseBuffer(buffer);
@@ -349,7 +352,7 @@ RumFastFormTuple(RumState * rumstate,
349352
Datumdatums[3];
350353
boolisnull[3];
351354
IndexTupleitup;
352-
uint32newsize;
355+
Sizenewsize;
353356

354357
/* Build the basic tuple: optional column number, plus key datum */
355358

@@ -380,7 +383,7 @@ RumFastFormTuple(RumState * rumstate,
380383

381384
if (category!=RUM_CAT_NORM_KEY)
382385
{
383-
uint32minsize;
386+
Sizeminsize;
384387

385388
Assert(IndexTupleHasNulls(itup));
386389
minsize=IndexInfoFindDataOffset(itup->t_info)+
@@ -497,17 +500,18 @@ rumHeapTupleFastCollect(RumState * rumstate,
497500
* (if so, we can just abandon our own efforts)
498501
*/
499502
staticbool
500-
shiftList(Relationindex,Buffermetabuffer,BlockNumbernewHead,
503+
shiftList(RumState*rumstate,Buffermetabuffer,BlockNumbernewHead,
501504
IndexBulkDeleteResult*stats)
502505
{
503506
Pagemetapage;
504507
RumMetaPageData*metadata;
505508
BlockNumberblknoToDelete;
506509
GenericXLogState*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);
511515
metadata=RumPageGetMeta(metapage);
512516
blknoToDelete=metadata->head;
513517

@@ -522,7 +526,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
522526

523527
while (nDeleted<RUM_NDELETE_AT_ONCE&&blknoToDelete!=newHead)
524528
{
525-
buffers[nDeleted]=ReadBuffer(index,blknoToDelete);
529+
buffers[nDeleted]=ReadBuffer(rumstate->index,blknoToDelete);
526530
LockBuffer(buffers[nDeleted],RUM_EXCLUSIVE);
527531

528532
page=BufferGetPage(buffers[nDeleted]);
@@ -531,7 +535,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
531535

532536
if (RumPageIsDeleted(page))
533537
{
534-
GenericXLogAbort(metastate);
538+
RumGenericXLogAbort(metastate,rumstate->isBuild);
535539
/* concurrent cleanup process is detected */
536540
for (i=0;i<nDeleted;i++)
537541
UnlockReleaseBuffer(buffers[i]);
@@ -565,18 +569,19 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
565569

566570
for (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

571576
RumPageGetOpaque(page)->flags=RUM_DELETED;
572-
GenericXLogFinish(state);
577+
RumGenericXLogFinish(state,rumstate->isBuild);
573578
}
574579

575580
for (i=0;i<nDeleted;i++)
576581
UnlockReleaseBuffer(buffers[i]);
577582
}while (blknoToDelete!=newHead);
578583

579-
GenericXLogFinish(metastate);
584+
RumGenericXLogFinish(metastate,rumstate->isBuild);
580585

581586
return 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 */
888893
LockBuffer(metabuffer,RUM_UNLOCK);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp