Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 4bf28f1

Browse files
author
Artur Zakirov
committed
Add index to generic xlog in the end of rumbuild()
1 parent 3626a0b commit 4bf28f1

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
extern Datum rumhandler(PG_FUNCTION_ARGS);
400400
extern void initRumState(RumState * state, Relation index);
401401
extern Buffer RumNewBuffer(Relation index);
402-
extern void RumInitBuffer(GenericXLogState *state, Buffer buffer, uint32 flags);
402+
extern void RumInitBuffer(GenericXLogState *state, Buffer buffer, uint32 flags,
403+
bool isBuild);
403404
extern void RumInitPage(Page page, uint32 f, Size pageSize);
404-
extern void RumInitMetabuffer(GenericXLogState *state, Buffer metaBuffer);
405+
extern void RumInitMetabuffer(GenericXLogState *state, Buffer metaBuffer,
406+
bool isBuild);
405407
extern int rumCompareEntries(RumState * rumstate, OffsetNumber attnum,
406408
Datum a, RumNullCategory categorya,
407409
Datum b, RumNullCategory categoryb);

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
uint32 nlist;
576576
MemoryContext oldCtx;
577577
OffsetNumber attnum;
578-
GenericXLogState *state;
578+
BlockNumber blkno;
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+
Buffer buffer = 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, Buffer buffer, uint32 flags)
490+
RumInitBuffer(GenericXLogState *state, Buffer buffer, uint32 flags, bool isBuild)
491491
{
492492
Page page;
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, Buffer metaBuffer)
501+
RumInitMetabuffer(GenericXLogState *state, Buffer metaBuffer, bool isBuild)
502502
{
503503
Page metaPage;
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)