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

Commit7b75227

Browse files
author
Artur Zakirov
committed
refactoring for xlog using
1 parentaaa4b02 commit7b75227

File tree

7 files changed

+142
-518
lines changed

7 files changed

+142
-518
lines changed

‎rum.h

Lines changed: 10 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@
2222
#include"storage/bufmgr.h"
2323
#include"utils/tuplesort.h"
2424

25-
typedefstructRumXLogRecData
26-
{
27-
char*data;/* start of rmgr data to include */
28-
uint32len;/* length of rmgr data to include */
29-
Bufferbuffer;/* buffer associated with data, if any */
30-
boolbuffer_std;/* buffer has standard pd_lower/pd_upper */
31-
structRumXLogRecData*next;/* next struct in chain, or NULL */
32-
}RumXLogRecData;
25+
//typedef struct RumXLogRecData
26+
//{
27+
//char *data;/* start of rmgr data to include */
28+
//uint32len;/* length of rmgr data to include */
29+
//Bufferbuffer;/* buffer associated with data, if any */
30+
//boolbuffer_std;/* buffer has standard pd_lower/pd_upper */
31+
//struct RumXLogRecData *next;/* next struct in chain, or NULL */
32+
//} RumXLogRecData;
3333

3434
/*
3535
* Page opaque data in a inverted index page.
@@ -370,133 +370,9 @@ typedef struct RumConfig
370370

371371
/* XLog stuff */
372372

373-
#defineXLOG_RUM_CREATE_INDEX 0x00
374-
375-
#defineXLOG_RUM_CREATE_PTREE 0x10
376-
377-
typedefstructrumxlogCreatePostingTree
378-
{
379-
RelFileNodenode;
380-
BlockNumberblkno;
381-
uint32nitem;
382-
int16typlen;
383-
384-
booltypbyval;
385-
chartypalign;
386-
chartypstorage;
387-
/* follows list of heap's ItemPointer */
388-
}rumxlogCreatePostingTree;
389-
390-
#defineXLOG_RUM_INSERT 0x20
391-
392-
typedefstructrumxlogInsert
393-
{
394-
RelFileNodenode;
395-
BlockNumberblkno;
396-
BlockNumberupdateBlkno;
397-
OffsetNumberoffset;
398-
OffsetNumbernitem;
399-
int16typlen;
400-
401-
booltypbyval;
402-
chartypalign;
403-
chartypstorage;
404-
boolisDelete;
405-
boolisData;
406-
boolisLeaf;
407-
408-
/*
409-
* follows: tuples or ItemPointerData or PostingItem or list of
410-
* ItemPointerData
411-
*/
412-
}rumxlogInsert;
413-
414-
#defineXLOG_RUM_SPLIT0x30
415-
416-
typedefstructrumxlogSplit
417-
{
418-
RelFileNodenode;
419-
BlockNumberlblkno;
420-
BlockNumberrootBlkno;
421-
BlockNumberrblkno;
422-
BlockNumberrrlink;
423-
OffsetNumberseparator;
424-
OffsetNumbernitem;
425-
int16typlen;
426-
427-
booltypbyval;
428-
chartypalign;
429-
chartypstorage;
430-
boolisData;
431-
boolisLeaf;
432-
boolisRootSplit;
433-
434-
BlockNumberleftChildBlkno;
435-
BlockNumberupdateBlkno;
436-
437-
ItemPointerDatarightbound;/* used only in posting tree */
438-
/* follows: list of tuple or ItemPointerData or PostingItem */
439-
}rumxlogSplit;
440-
441-
#defineXLOG_RUM_VACUUM_PAGE0x40
442-
443-
typedefstructrumxlogVacuumPage
444-
{
445-
RelFileNodenode;
446-
BlockNumberblkno;
447-
OffsetNumbernitem;
448-
int16typlen;
449-
450-
booltypbyval;
451-
chartypalign;
452-
chartypstorage;
453-
/* follows content of page */
454-
}rumxlogVacuumPage;
455-
456-
#defineXLOG_RUM_DELETE_PAGE0x50
457-
458-
typedefstructrumxlogDeletePage
459-
{
460-
RelFileNodenode;
461-
BlockNumberblkno;
462-
BlockNumberparentBlkno;
463-
OffsetNumberparentOffset;
464-
BlockNumberleftBlkno;
465-
BlockNumberrightLink;
466-
}rumxlogDeletePage;
467-
468-
#defineXLOG_RUM_UPDATE_META_PAGE 0x60
469-
470-
typedefstructrumxlogUpdateMeta
471-
{
472-
RelFileNodenode;
473-
RumMetaPageDatametadata;
474-
BlockNumberprevTail;
475-
BlockNumbernewRightlink;
476-
int32ntuples;/* if ntuples > 0 then metadata.tail was
477-
* updated with that many tuples; else new sub
478-
* list was inserted */
479-
/* array of inserted tuples follows */
480-
}rumxlogUpdateMeta;
481-
482-
#defineXLOG_RUM_INSERT_LISTPAGE 0x70
483-
484-
typedefstructrumxlogInsertListPage
485-
{
486-
RelFileNodenode;
487-
BlockNumberblkno;
488-
BlockNumberrightlink;
489-
int32ntuples;
490-
/* array of inserted tuples follows */
491-
}rumxlogInsertListPage;
492-
493-
#defineXLOG_RUM_DELETE_LISTPAGE 0x80
494-
495373
#defineRUM_NDELETE_AT_ONCE 16
496374
typedefstructrumxlogDeleteListPages
497375
{
498-
RelFileNodenode;
499-
RumMetaPageDatametadata;
500376
int32ndeleted;
501377
BlockNumbertoDelete[RUM_NDELETE_AT_ONCE];
502378
}rumxlogDeleteListPages;
@@ -566,8 +442,8 @@ typedef struct RumBtreeData
566442
OffsetNumber (*findChildPtr) (RumBtree,Page,BlockNumber,OffsetNumber);
567443
BlockNumber (*getLeftMostPage) (RumBtree,Page);
568444
bool(*isEnoughSpace) (RumBtree,Buffer,OffsetNumber);
569-
void(*placeToPage) (RumBtree,Buffer,OffsetNumber,RumXLogRecData**);
570-
Page(*splitPage) (RumBtree,Buffer,Buffer,OffsetNumber,RumXLogRecData**);
445+
void(*placeToPage) (RumBtree,Page,OffsetNumber);
446+
Page(*splitPage) (RumBtree,Buffer,Buffer,Page,Page,OffsetNumber);
571447
void(*fillRoot) (RumBtree,Buffer,Buffer,Buffer);
572448

573449
boolisData;

‎rumbtree.c

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -369,18 +369,16 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
369369
/* this loop crawls up the stack until the insertion is complete */
370370
for (;;)
371371
{
372-
RumXLogRecData*rdata;
373372
BlockNumbersavedRightLink;
374373

375374
page=BufferGetPage(stack->buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
376375
savedRightLink=RumPageGetOpaque(page)->rightlink;
377376

378377
if (btree->isEnoughSpace(btree,stack->buffer,stack->off))
379378
{
380-
btree->placeToPage(btree,stack->buffer,stack->off,&rdata);
381-
382379
state=GenericXLogStart(index);
383380
page=GenericXLogRegisterBuffer(state,stack->buffer,0);
381+
btree->placeToPage(btree,page,stack->off);
384382
GenericXLogFinish(state);
385383

386384
LockBuffer(stack->buffer,RUM_UNLOCK);
@@ -393,14 +391,6 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
393391
Bufferrbuffer=RumNewBuffer(btree->index);
394392
Pagenewlpage;
395393

396-
/*
397-
* newlpage is a pointer to memory page, it doesn't associate with
398-
* buffer, stack->buffer should be untouched
399-
*/
400-
newlpage=btree->splitPage(btree,stack->buffer,rbuffer,stack->off,&rdata);
401-
402-
((rumxlogSplit*) (rdata->data))->rootBlkno=rootBlkno;
403-
404394
/* During index build, count the newly-split page */
405395
if (buildStats)
406396
{
@@ -414,24 +404,29 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
414404

415405
if (parent==NULL)
416406
{
417-
/*
418-
* split root, so we need to allocate new left page and place
419-
* pointer on root to left and right page
420-
*/
421-
Bufferlbuffer=RumNewBuffer(btree->index);
422-
423-
((rumxlogSplit*) (rdata->data))->isRootSplit= TRUE;
424-
((rumxlogSplit*) (rdata->data))->rrlink=InvalidBlockNumber;
407+
Bufferlbuffer;
425408

426409
state=GenericXLogStart(index);
427410

428411
page=GenericXLogRegisterBuffer(state,stack->buffer,0);
429-
lpage=GenericXLogRegisterBuffer(state,lbuffer,0);
430412
rpage=GenericXLogRegisterBuffer(state,rbuffer,0);
431413

414+
/*
415+
* newlpage is a pointer to memory page, it doesn't associate with
416+
* buffer, stack->buffer should be untouched
417+
*/
418+
newlpage=btree->splitPage(btree,stack->buffer,rbuffer,
419+
page,rpage,stack->off);
420+
421+
/*
422+
* split root, so we need to allocate new left page and place
423+
* pointer on root to left and right page
424+
*/
425+
lbuffer=RumNewBuffer(btree->index);
426+
lpage=GenericXLogRegisterBuffer(state,lbuffer,0);
427+
432428
RumPageGetOpaque(rpage)->rightlink=InvalidBlockNumber;
433429
RumPageGetOpaque(newlpage)->rightlink=BufferGetBlockNumber(rbuffer);
434-
((rumxlogSplit*) (rdata->data))->lblkno=BufferGetBlockNumber(lbuffer);
435430

436431
RumInitPage(page,RumPageGetOpaque(newlpage)->flags& ~RUM_LEAF,
437432
BufferGetPageSize(stack->buffer));
@@ -460,14 +455,19 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
460455
else
461456
{
462457
/* split non-root page */
463-
((rumxlogSplit*) (rdata->data))->isRootSplit= FALSE;
464-
((rumxlogSplit*) (rdata->data))->rrlink=savedRightLink;
465458

466459
state=GenericXLogStart(index);
467460

468461
lpage=GenericXLogRegisterBuffer(state,stack->buffer,0);
469462
rpage=GenericXLogRegisterBuffer(state,rbuffer,0);
470463

464+
/*
465+
* newlpage is a pointer to memory page, it doesn't associate with
466+
* buffer, stack->buffer should be untouched
467+
*/
468+
newlpage=btree->splitPage(btree,stack->buffer,rbuffer,
469+
lpage,rpage,stack->off);
470+
471471
RumPageGetOpaque(rpage)->rightlink=savedRightLink;
472472
RumPageGetOpaque(newlpage)->rightlink=BufferGetBlockNumber(rbuffer);
473473

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp