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

Commit4bf28f1

Browse files
author
Artur Zakirov
committed
Add index to generic xlog in the end of rumbuild()
1 parent3626a0b commit4bf28f1

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

‎rum.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,9 +399,11 @@ extern bytea *rumoptions(Datum reloptions, bool validate);
399399
externDatumrumhandler(PG_FUNCTION_ARGS);
400400
externvoidinitRumState(RumState*state,Relationindex);
401401
externBufferRumNewBuffer(Relationindex);
402-
externvoidRumInitBuffer(GenericXLogState*state,Bufferbuffer,uint32flags);
402+
externvoidRumInitBuffer(GenericXLogState*state,Bufferbuffer,uint32flags,
403+
boolisBuild);
403404
externvoidRumInitPage(Pagepage,uint32f,SizepageSize);
404-
externvoidRumInitMetabuffer(GenericXLogState*state,BuffermetaBuffer);
405+
externvoidRumInitMetabuffer(GenericXLogState*state,BuffermetaBuffer,
406+
boolisBuild);
405407
externintrumCompareEntries(RumState*rumstate,OffsetNumberattnum,
406408
Datuma,RumNullCategorycategorya,
407409
Datumb,RumNullCategorycategoryb);

‎ruminsert.c

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -575,27 +575,24 @@ rumbuild(Relation heap, Relation index, struct IndexInfo *indexInfo)
575575
uint32nlist;
576576
MemoryContextoldCtx;
577577
OffsetNumberattnum;
578-
GenericXLogState*state;
578+
BlockNumberblkno;
579579

580580
if (RelationGetNumberOfBlocks(index)!=0)
581581
elog(ERROR,"index \"%s\" already contains data",
582582
RelationGetRelationName(index));
583583

584584
initRumState(&buildstate.rumstate,index);
585+
buildstate.rumstate.isBuild= true;
585586
buildstate.indtuples=0;
586587
memset(&buildstate.buildStats,0,sizeof(GinStatsData));
587588

588-
state=GenericXLogStart(index);
589-
590589
/* initialize the meta page */
591590
MetaBuffer=RumNewBuffer(index);
592591
/* initialize the root page */
593592
RootBuffer=RumNewBuffer(index);
594593

595-
RumInitMetabuffer(state,MetaBuffer);
596-
RumInitBuffer(state,RootBuffer,RUM_LEAF);
597-
598-
GenericXLogFinish(state);
594+
RumInitMetabuffer(NULL,MetaBuffer,buildstate.rumstate.isBuild);
595+
RumInitBuffer(NULL,RootBuffer,RUM_LEAF,buildstate.rumstate.isBuild);
599596

600597
UnlockReleaseBuffer(MetaBuffer);
601598
UnlockReleaseBuffer(RootBuffer);
@@ -651,6 +648,22 @@ rumbuild(Relation heap, Relation index, struct IndexInfo *indexInfo)
651648
buildstate.buildStats.nTotalPages=RelationGetNumberOfBlocks(index);
652649
rumUpdateStats(index,&buildstate.buildStats,buildstate.rumstate.isBuild);
653650

651+
/*
652+
* Write index to xlog.
653+
*/
654+
for (blkno=0;blkno<buildstate.buildStats.nTotalPages;blkno++)
655+
{
656+
Bufferbuffer=ReadBuffer(index,blkno);
657+
GenericXLogState*state=RumGenericXLogStart(index,
658+
buildstate.rumstate.isBuild);
659+
660+
RumGenericXLogRegisterBuffer(state,buffer,GENERIC_XLOG_FULL_IMAGE,
661+
buildstate.rumstate.isBuild);
662+
RumGenericXLogFinish(state,buildstate.rumstate.isBuild);
663+
664+
ReleaseBuffer(buffer);
665+
}
666+
654667
/*
655668
* Return statistics
656669
*/
@@ -683,8 +696,8 @@ rumbuildempty(Relation index)
683696
LockBuffer(RootBuffer,BUFFER_LOCK_EXCLUSIVE);
684697

685698
/* Initialize and xlog metabuffer and root buffer. */
686-
RumInitMetabuffer(state,MetaBuffer);
687-
RumInitBuffer(state,RootBuffer,RUM_LEAF);
699+
RumInitMetabuffer(state,MetaBuffer, false);
700+
RumInitBuffer(state,RootBuffer,RUM_LEAF, false);
688701

689702
RumGenericXLogFinish(state, false);
690703

‎rumutil.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -487,25 +487,25 @@ RumInitPage(Page page, uint32 f, Size pageSize)
487487
}
488488

489489
void
490-
RumInitBuffer(GenericXLogState*state,Bufferbuffer,uint32flags)
490+
RumInitBuffer(GenericXLogState*state,Bufferbuffer,uint32flags,boolisBuild)
491491
{
492492
Pagepage;
493493

494494
page=RumGenericXLogRegisterBuffer(state,buffer,GENERIC_XLOG_FULL_IMAGE,
495-
false);
495+
isBuild);
496496

497497
RumInitPage(page,flags,BufferGetPageSize(buffer));
498498
}
499499

500500
void
501-
RumInitMetabuffer(GenericXLogState*state,BuffermetaBuffer)
501+
RumInitMetabuffer(GenericXLogState*state,BuffermetaBuffer,boolisBuild)
502502
{
503503
PagemetaPage;
504504
RumMetaPageData*metadata;
505505

506506
/* Initialize contents of meta page */
507507
metaPage=RumGenericXLogRegisterBuffer(state,metaBuffer,
508-
GENERIC_XLOG_FULL_IMAGE,false);
508+
GENERIC_XLOG_FULL_IMAGE,isBuild);
509509

510510
RumInitPage(metaPage,RUM_META,BufferGetPageSize(metaBuffer));
511511
metadata=RumPageGetMeta(metaPage);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp