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

Commit61b8f4c

Browse files
author
Artur Zakirov
committed
Rum uses Generic WAL Records
1 parent152f5b3 commit61b8f4c

File tree

9 files changed

+142
-375
lines changed

9 files changed

+142
-375
lines changed

‎rum.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,9 +506,9 @@ extern bytea *rumoptions(Datum reloptions, bool validate);
506506
externDatumrumhandler(PG_FUNCTION_ARGS);
507507
externvoidinitRumState(RumState*state,Relationindex);
508508
externBufferRumNewBuffer(Relationindex);
509-
externvoidRumInitBuffer(Bufferb,uint32f);
509+
externvoidRumInitBuffer(Relationindex,Bufferbuffer,uint32flags);
510510
externvoidRumInitPage(Pagepage,uint32f,SizepageSize);
511-
externvoidRumInitMetabuffer(Bufferb);
511+
externvoidRumInitMetabuffer(Relationindex,BuffermetaBuffer);
512512
externintrumCompareEntries(RumState*rumstate,OffsetNumberattnum,
513513
Datuma,RumNullCategorycategorya,
514514
Datumb,RumNullCategorycategoryb);
@@ -602,8 +602,8 @@ extern RumBtreeStack *rumFindLeafPage(RumBtree btree, RumBtreeStack *stack);
602602
externRumBtreeStack*rumReFindLeafPage(RumBtreebtree,RumBtreeStack*stack);
603603
externBufferrumStepRight(Bufferbuffer,Relationindex,intlockmode);
604604
externvoidfreeRumBtreeStack(RumBtreeStack*stack);
605-
externvoidrumInsertValue(RumBtreebtree,RumBtreeStack*stack,
606-
GinStatsData*buildStats);
605+
externvoidrumInsertValue(Relationindex,RumBtreebtree,RumBtreeStack*stack,
606+
GinStatsData*buildStats);
607607
externvoidrumFindParents(RumBtreebtree,RumBtreeStack*stack,BlockNumberrootBlkno);
608608

609609
/* rumentrypage.c */

‎rumbtree.c

Lines changed: 30 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include"postgres.h"
1515

16+
#include"access/generic_xlog.h"
1617
#include"miscadmin.h"
1718
#include"utils/rel.h"
1819

@@ -347,13 +348,15 @@ rumFindParents(RumBtree btree, RumBtreeStack *stack,
347348
* NB: the passed-in stack is freed, as though by freeRumBtreeStack.
348349
*/
349350
void
350-
rumInsertValue(RumBtreebtree,RumBtreeStack*stack,GinStatsData*buildStats)
351+
rumInsertValue(Relationindex,RumBtreebtree,RumBtreeStack*stack,
352+
GinStatsData*buildStats)
351353
{
352354
RumBtreeStack*parent;
353355
BlockNumberrootBlkno;
354356
Pagepage,
355357
rpage,
356358
lpage;
359+
GenericXLogState*state;
357360

358361
/* extract root BlockNumber from stack */
359362
Assert(stack!=NULL);
@@ -374,21 +377,12 @@ rumInsertValue(RumBtree btree, RumBtreeStack *stack, GinStatsData *buildStats)
374377

375378
if (btree->isEnoughSpace(btree,stack->buffer,stack->off))
376379
{
377-
START_CRIT_SECTION();
378380
btree->placeToPage(btree,stack->buffer,stack->off,&rdata);
379381

380-
MarkBufferDirty(stack->buffer);
381-
382-
// if (RelationNeedsWAL(btree->index))
383-
// {
384-
// XLogRecPtrrecptr;
385-
//
386-
// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_INSERT);
387-
// PageSetLSN(page, recptr);
388-
// }
389-
390-
LockBuffer(stack->buffer,RUM_UNLOCK);
391-
END_CRIT_SECTION();
382+
state=GenericXLogStart(index);
383+
page=GenericXLogRegisterBuffer(state,stack->buffer,
384+
GENERIC_XLOG_FULL_IMAGE);
385+
GenericXLogFinish(state);
392386

393387
freeRumBtreeStack(stack);
394388

@@ -429,41 +423,32 @@ rumInsertValue(RumBtree btree, RumBtreeStack *stack, GinStatsData *buildStats)
429423
((rumxlogSplit*) (rdata->data))->isRootSplit= TRUE;
430424
((rumxlogSplit*) (rdata->data))->rrlink=InvalidBlockNumber;
431425

432-
page=BufferGetPage(stack->buffer,NULL,NULL,
433-
BGP_NO_SNAPSHOT_TEST);
434-
lpage=BufferGetPage(lbuffer,NULL,NULL,
435-
BGP_NO_SNAPSHOT_TEST);
436-
rpage=BufferGetPage(rbuffer,NULL,NULL,
437-
BGP_NO_SNAPSHOT_TEST);
426+
state=GenericXLogStart(index);
427+
428+
page=GenericXLogRegisterBuffer(state,stack->buffer,
429+
GENERIC_XLOG_FULL_IMAGE);
430+
431+
lpage=GenericXLogRegisterBuffer(state,lbuffer,
432+
GENERIC_XLOG_FULL_IMAGE);
433+
434+
rpage=GenericXLogRegisterBuffer(state,rbuffer,
435+
GENERIC_XLOG_FULL_IMAGE);
436+
438437

439438
RumPageGetOpaque(rpage)->rightlink=InvalidBlockNumber;
440439
RumPageGetOpaque(newlpage)->rightlink=BufferGetBlockNumber(rbuffer);
441440
((rumxlogSplit*) (rdata->data))->lblkno=BufferGetBlockNumber(lbuffer);
442441

443-
START_CRIT_SECTION();
444-
445-
RumInitBuffer(stack->buffer,RumPageGetOpaque(newlpage)->flags& ~RUM_LEAF);
442+
RumInitPage(page,RumPageGetOpaque(newlpage)->flags& ~RUM_LEAF,
443+
BufferGetPageSize(stack->buffer));
446444
PageRestoreTempPage(newlpage,lpage);
447445
btree->fillRoot(btree,stack->buffer,lbuffer,rbuffer);
448446

449-
MarkBufferDirty(rbuffer);
450-
MarkBufferDirty(lbuffer);
451-
MarkBufferDirty(stack->buffer);
452-
453-
// if (RelationNeedsWAL(btree->index))
454-
// {
455-
// XLogRecPtrrecptr;
456-
//
457-
// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT);
458-
// PageSetLSN(page, recptr);
459-
// PageSetLSN(lpage, recptr);
460-
// PageSetLSN(rpage, recptr);
461-
// }
447+
GenericXLogFinish(state);
462448

463449
UnlockReleaseBuffer(rbuffer);
464450
UnlockReleaseBuffer(lbuffer);
465451
LockBuffer(stack->buffer,RUM_UNLOCK);
466-
END_CRIT_SECTION();
467452

468453
freeRumBtreeStack(stack);
469454

@@ -484,30 +469,20 @@ rumInsertValue(RumBtree btree, RumBtreeStack *stack, GinStatsData *buildStats)
484469
((rumxlogSplit*) (rdata->data))->isRootSplit= FALSE;
485470
((rumxlogSplit*) (rdata->data))->rrlink=savedRightLink;
486471

487-
lpage=BufferGetPage(stack->buffer,NULL,NULL,
488-
BGP_NO_SNAPSHOT_TEST);
489-
rpage=BufferGetPage(rbuffer,NULL,NULL,
490-
BGP_NO_SNAPSHOT_TEST);
472+
state=GenericXLogStart(index);
473+
474+
lpage=GenericXLogRegisterBuffer(state,stack->buffer,
475+
GENERIC_XLOG_FULL_IMAGE);
476+
477+
rpage=GenericXLogRegisterBuffer(state,rbuffer,
478+
GENERIC_XLOG_FULL_IMAGE);
491479

492480
RumPageGetOpaque(rpage)->rightlink=savedRightLink;
493481
RumPageGetOpaque(newlpage)->rightlink=BufferGetBlockNumber(rbuffer);
494482

495-
START_CRIT_SECTION();
496483
PageRestoreTempPage(newlpage,lpage);
497484

498-
MarkBufferDirty(rbuffer);
499-
MarkBufferDirty(stack->buffer);
500-
501-
// if (RelationNeedsWAL(btree->index))
502-
// {
503-
// XLogRecPtrrecptr;
504-
//
505-
// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT);
506-
// PageSetLSN(lpage, recptr);
507-
// PageSetLSN(rpage, recptr);
508-
// }
509-
UnlockReleaseBuffer(rbuffer);
510-
END_CRIT_SECTION();
485+
GenericXLogFinish(state);
511486
}
512487
}
513488

‎rumdatapage.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1408,7 +1408,7 @@ rumInsertItemPointers(RumState *rumstate,
14081408
freeRumBtreeStack(gdi->stack);
14091409
}
14101410
else
1411-
rumInsertValue(&(gdi->btree),gdi->stack,buildStats);
1411+
rumInsertValue(rumstate->index,&(gdi->btree),gdi->stack,buildStats);
14121412

14131413
gdi->stack=NULL;
14141414
}

‎rumfast.c

Lines changed: 33 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include"postgres.h"
1818

19+
#include"access/generic_xlog.h"
1920
#include"access/htup_details.h"
2021
#include"commands/vacuum.h"
2122
#include"miscadmin.h"
@@ -62,7 +63,7 @@ writeListPage(Relation index, Buffer buffer,
6263

6364
START_CRIT_SECTION();
6465

65-
RumInitBuffer(buffer,RUM_LIST);
66+
RumInitBuffer(index,buffer,RUM_LIST);
6667

6768
off=FirstOffsetNumber;
6869
ptr=workspace;
@@ -105,31 +106,6 @@ writeListPage(Relation index, Buffer buffer,
105106

106107
MarkBufferDirty(buffer);
107108

108-
// if (RelationNeedsWAL(index))
109-
// {
110-
// XLogRecData rdata[2];
111-
// rumxlogInsertListPage data;
112-
// XLogRecPtrrecptr;
113-
//
114-
// data.node = index->rd_node;
115-
// data.blkno = BufferGetBlockNumber(buffer);
116-
// data.rightlink = rightlink;
117-
// data.ntuples = ntuples;
118-
//
119-
// rdata[0].buffer = InvalidBuffer;
120-
// rdata[0].data = (char *) &data;
121-
// rdata[0].len = sizeof(rumxlogInsertListPage);
122-
// rdata[0].next = rdata + 1;
123-
//
124-
// rdata[1].buffer = InvalidBuffer;
125-
// rdata[1].data = workspace;
126-
// rdata[1].len = size;
127-
// rdata[1].next = NULL;
128-
//
129-
// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_INSERT_LISTPAGE, rdata);
130-
// PageSetLSN(page, recptr);
131-
// }
132-
133109
/* get free space before releasing buffer */
134110
freesize=PageGetExactFreeSpace(page);
135111

@@ -229,6 +205,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
229205
rumxlogUpdateMetadata;
230206
boolseparateList= false;
231207
boolneedCleanup= false;
208+
GenericXLogState*state;
232209

233210
if (collector->ntuples==0)
234211
return;
@@ -242,8 +219,10 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
242219
rdata[0].len=sizeof(rumxlogUpdateMeta);
243220
rdata[0].next=NULL;
244221

222+
state=GenericXLogStart(rumstate->index);
245223
metabuffer=ReadBuffer(index,RUM_METAPAGE_BLKNO);
246-
metapage=BufferGetPage(metabuffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
224+
metapage=GenericXLogRegisterBuffer(state,metabuffer,
225+
GENERIC_XLOG_FULL_IMAGE);
247226

248227
if (collector->sumsize+collector->ntuples*sizeof(ItemIdData)>RumListPageSize)
249228
{
@@ -311,7 +290,8 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
311290

312291
buffer=ReadBuffer(index,metadata->tail);
313292
LockBuffer(buffer,RUM_EXCLUSIVE);
314-
page=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
293+
page=GenericXLogRegisterBuffer(state,buffer,
294+
GENERIC_XLOG_FULL_IMAGE);
315295

316296
rdata[0].next=rdata+1;
317297

@@ -349,7 +329,8 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
349329

350330
buffer=ReadBuffer(index,metadata->tail);
351331
LockBuffer(buffer,RUM_EXCLUSIVE);
352-
page=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
332+
page=GenericXLogRegisterBuffer(state,buffer,
333+
GENERIC_XLOG_FULL_IMAGE);
353334

354335
off= (PageIsEmpty(page)) ?FirstOffsetNumber :
355336
OffsetNumberNext(PageGetMaxOffsetNumber(page));
@@ -400,20 +381,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
400381
*/
401382
MarkBufferDirty(metabuffer);
402383

403-
// if (RelationNeedsWAL(index))
404-
// {
405-
// XLogRecPtrrecptr;
406-
//
407-
// memcpy(&data.metadata, metadata, sizeof(RumMetaPageData));
408-
//
409-
// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_UPDATE_META_PAGE, rdata);
410-
// PageSetLSN(metapage, recptr);
411-
//
412-
// if (buffer != InvalidBuffer)
413-
// {
414-
// PageSetLSN(page, recptr);
415-
// }
416-
// }
384+
GenericXLogFinish(state);
417385

418386
if (buffer!=InvalidBuffer)
419387
UnlockReleaseBuffer(buffer);
@@ -598,11 +566,14 @@ static bool
598566
shiftList(Relationindex,Buffermetabuffer,BlockNumbernewHead,
599567
IndexBulkDeleteResult*stats)
600568
{
601-
Pagemetapage;
602-
RumMetaPageData*metadata;
603-
BlockNumberblknoToDelete;
604-
605-
metapage=BufferGetPage(metabuffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
569+
Pagemetapage;
570+
RumMetaPageData*metadata;
571+
BlockNumberblknoToDelete;
572+
GenericXLogState*metastate;
573+
574+
metastate=GenericXLogStart(index);
575+
metapage=GenericXLogRegisterBuffer(metastate,metabuffer,
576+
GENERIC_XLOG_FULL_IMAGE);
606577
metadata=RumPageGetMeta(metapage);
607578
blknoToDelete=metadata->head;
608579

@@ -612,29 +583,29 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
612583
inti;
613584
int64nDeletedHeapTuples=0;
614585
rumxlogDeleteListPagesdata;
615-
// XLogRecData rdata[1];
616586
Bufferbuffers[RUM_NDELETE_AT_ONCE];
587+
GenericXLogState*state;
617588

618-
data.node=index->rd_node;
589+
state=GenericXLogStart(index);
619590

620-
// rdata[0].buffer = InvalidBuffer;
621-
// rdata[0].data = (char *) &data;
622-
// rdata[0].len = sizeof(rumxlogDeleteListPages);
623-
// rdata[0].next = NULL;
591+
data.node=index->rd_node;
624592

625593
data.ndeleted=0;
626594
while (data.ndeleted<RUM_NDELETE_AT_ONCE&&blknoToDelete!=newHead)
627595
{
628596
data.toDelete[data.ndeleted]=blknoToDelete;
629597
buffers[data.ndeleted]=ReadBuffer(index,blknoToDelete);
630598
LockBuffer(buffers[data.ndeleted],RUM_EXCLUSIVE);
631-
page=BufferGetPage(buffers[data.ndeleted],NULL,NULL,
632-
BGP_NO_SNAPSHOT_TEST);
599+
600+
page=GenericXLogRegisterBuffer(state,buffers[data.ndeleted],
601+
GENERIC_XLOG_FULL_IMAGE);
633602

634603
data.ndeleted++;
635604

636605
if (RumPageIsDeleted(page))
637606
{
607+
GenericXLogAbort(state);
608+
GenericXLogAbort(metastate);
638609
/* concurrent cleanup process is detected */
639610
for (i=0;i<data.ndeleted;i++)
640611
UnlockReleaseBuffer(buffers[i]);
@@ -670,34 +641,23 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
670641

671642
for (i=0;i<data.ndeleted;i++)
672643
{
673-
page=BufferGetPage(buffers[i],NULL,NULL,BGP_NO_SNAPSHOT_TEST);
644+
page=GenericXLogRegisterBuffer(state,buffers[i],
645+
GENERIC_XLOG_FULL_IMAGE);
646+
674647
RumPageGetOpaque(page)->flags=RUM_DELETED;
675648
MarkBufferDirty(buffers[i]);
676649
}
677650

678-
// if (RelationNeedsWAL(index))
679-
// {
680-
// XLogRecPtrrecptr;
681-
//
682-
// memcpy(&data.metadata, metadata, sizeof(RumMetaPageData));
683-
//
684-
// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_LISTPAGE, rdata);
685-
// PageSetLSN(metapage, recptr);
686-
//
687-
// for (i = 0; i < data.ndeleted; i++)
688-
// {
689-
// page = BufferGetPage(buffers[i], NULL, NULL,
690-
// BGP_NO_SNAPSHOT_TEST);
691-
// PageSetLSN(page, recptr);
692-
// }
693-
// }
651+
GenericXLogFinish(state);
694652

695653
for (i=0;i<data.ndeleted;i++)
696654
UnlockReleaseBuffer(buffers[i]);
697655

698656
END_CRIT_SECTION();
699657
}while (blknoToDelete!=newHead);
700658

659+
GenericXLogFinish(metastate);
660+
701661
return false;
702662
}
703663

‎rumget.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2082,8 +2082,6 @@ rumgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
20822082
int64ntids;
20832083
boolrecheck;
20842084

2085-
elog(LOG,"rumgetbitmap");
2086-
20872085
/*
20882086
* Set up the scan keys, and check for unsatisfiable query.
20892087
*/

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp