Skip to content

Commit 7b75227

Browse files
author
Artur Zakirov
committed
refactoring for xlog using
1 parent aaa4b02 commit 7b75227

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-
typedef struct RumXLogRecData
26-
{
27-
char *data; /* start of rmgr data to include */
28-
uint32 len; /* length of rmgr data to include */
29-
Buffer buffer; /* buffer associated with data, if any */
30-
bool buffer_std; /* buffer has standard pd_lower/pd_upper */
31-
struct RumXLogRecData *next; /* next struct in chain, or NULL */
32-
} RumXLogRecData;
25+
// typedef struct RumXLogRecData
26+
// {
27+
// char *data; /* start of rmgr data to include */
28+
// uint32 len; /* length of rmgr data to include */
29+
// Buffer buffer; /* buffer associated with data, if any */
30+
// bool buffer_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-
#define XLOG_RUM_CREATE_INDEX 0x00
374-
375-
#define XLOG_RUM_CREATE_PTREE 0x10
376-
377-
typedef struct rumxlogCreatePostingTree
378-
{
379-
RelFileNode node;
380-
BlockNumber blkno;
381-
uint32 nitem;
382-
int16 typlen;
383-
384-
bool typbyval;
385-
char typalign;
386-
char typstorage;
387-
/* follows list of heap's ItemPointer */
388-
} rumxlogCreatePostingTree;
389-
390-
#define XLOG_RUM_INSERT 0x20
391-
392-
typedef struct rumxlogInsert
393-
{
394-
RelFileNode node;
395-
BlockNumber blkno;
396-
BlockNumber updateBlkno;
397-
OffsetNumber offset;
398-
OffsetNumber nitem;
399-
int16 typlen;
400-
401-
bool typbyval;
402-
char typalign;
403-
char typstorage;
404-
bool isDelete;
405-
bool isData;
406-
bool isLeaf;
407-
408-
/*
409-
* follows: tuples or ItemPointerData or PostingItem or list of
410-
* ItemPointerData
411-
*/
412-
} rumxlogInsert;
413-
414-
#define XLOG_RUM_SPLIT 0x30
415-
416-
typedef struct rumxlogSplit
417-
{
418-
RelFileNode node;
419-
BlockNumber lblkno;
420-
BlockNumber rootBlkno;
421-
BlockNumber rblkno;
422-
BlockNumber rrlink;
423-
OffsetNumber separator;
424-
OffsetNumber nitem;
425-
int16 typlen;
426-
427-
bool typbyval;
428-
char typalign;
429-
char typstorage;
430-
bool isData;
431-
bool isLeaf;
432-
bool isRootSplit;
433-
434-
BlockNumber leftChildBlkno;
435-
BlockNumber updateBlkno;
436-
437-
ItemPointerData rightbound; /* used only in posting tree */
438-
/* follows: list of tuple or ItemPointerData or PostingItem */
439-
} rumxlogSplit;
440-
441-
#define XLOG_RUM_VACUUM_PAGE 0x40
442-
443-
typedef struct rumxlogVacuumPage
444-
{
445-
RelFileNode node;
446-
BlockNumber blkno;
447-
OffsetNumber nitem;
448-
int16 typlen;
449-
450-
bool typbyval;
451-
char typalign;
452-
char typstorage;
453-
/* follows content of page */
454-
} rumxlogVacuumPage;
455-
456-
#define XLOG_RUM_DELETE_PAGE 0x50
457-
458-
typedef struct rumxlogDeletePage
459-
{
460-
RelFileNode node;
461-
BlockNumber blkno;
462-
BlockNumber parentBlkno;
463-
OffsetNumber parentOffset;
464-
BlockNumber leftBlkno;
465-
BlockNumber rightLink;
466-
} rumxlogDeletePage;
467-
468-
#define XLOG_RUM_UPDATE_META_PAGE 0x60
469-
470-
typedef struct rumxlogUpdateMeta
471-
{
472-
RelFileNode node;
473-
RumMetaPageData metadata;
474-
BlockNumber prevTail;
475-
BlockNumber newRightlink;
476-
int32 ntuples; /* 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-
#define XLOG_RUM_INSERT_LISTPAGE 0x70
483-
484-
typedef struct rumxlogInsertListPage
485-
{
486-
RelFileNode node;
487-
BlockNumber blkno;
488-
BlockNumber rightlink;
489-
int32 ntuples;
490-
/* array of inserted tuples follows */
491-
} rumxlogInsertListPage;
492-
493-
#define XLOG_RUM_DELETE_LISTPAGE 0x80
494-
495373
#define RUM_NDELETE_AT_ONCE 16
496374
typedef struct rumxlogDeleteListPages
497375
{
498-
RelFileNode node;
499-
RumMetaPageData metadata;
500376
int32 ndeleted;
501377
BlockNumber toDelete[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
bool isData;

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
BlockNumber savedRightLink;
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
Buffer rbuffer = RumNewBuffer(btree->index);
394392
Page newlpage;
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-
Buffer lbuffer = RumNewBuffer(btree->index);
422-
423-
((rumxlogSplit *) (rdata->data))->isRootSplit = TRUE;
424-
((rumxlogSplit *) (rdata->data))->rrlink = InvalidBlockNumber;
407+
Buffer lbuffer;
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)