Skip to content

Commit eab8031

Browse files
author
Artur Zakirov
committed
Fix adjust pd_lower
1 parent f6d970a commit eab8031

File tree

7 files changed

+31
-18
lines changed

7 files changed

+31
-18
lines changed

rum.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ typedef struct RumBtreeData
434434
bool (*isEnoughSpace) (RumBtree, Buffer, OffsetNumber);
435435
void (*placeToPage) (RumBtree, Page, OffsetNumber);
436436
Page (*splitPage) (RumBtree, Buffer, Buffer, Page, Page, OffsetNumber);
437-
void (*fillRoot) (RumBtree, Buffer, Buffer, Buffer);
437+
void (*fillRoot) (RumBtree, Buffer, Buffer, Buffer, Page, Page, Page);
438438

439439
bool isData;
440440
bool searchMode;
@@ -477,7 +477,8 @@ extern void rumFindParents(RumBtree btree, RumBtreeStack *stack, BlockNumber roo
477477
extern void rumPrepareEntryScan(RumBtree btree, OffsetNumber attnum,
478478
Datum key, RumNullCategory category,
479479
RumState *rumstate);
480-
extern void rumEntryFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf);
480+
extern void rumEntryFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf,
481+
Page page, Page lpage, Page rpage);
481482
extern IndexTuple rumPageGetLinkItup(Buffer buf);
482483
extern void rumReadTuple(RumState *rumstate, OffsetNumber attnum,
483484
IndexTuple itup, ItemPointerData *ipd, Datum *addInfo, bool *addInfoIsNull);
@@ -515,7 +516,8 @@ extern void rumInsertItemPointers(RumState *rumstate,
515516
uint32 nitem,
516517
GinStatsData *buildStats);
517518
extern Buffer rumScanBeginPostingTree(RumPostingTreeScan *gdi);
518-
extern void rumDataFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf);
519+
extern void rumDataFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf,
520+
Page page, Page lpage, Page rpage);
519521
extern void rumPrepareDataScan(RumBtree btree, Relation index, OffsetNumber attnum, RumState *rumstate);
520522

521523
/* rumscan.c */

rumbtree.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
376376
{
377377
state = GenericXLogStart(index);
378378
page = GenericXLogRegisterBuffer(state, stack->buffer, 0);
379+
elog(INFO, "rumInsertValue: %d", stack->buffer);
379380
btree->placeToPage(btree, page, stack->off);
380381
GenericXLogFinish(state);
381382

@@ -413,6 +414,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
413414
* newlpage is a pointer to memory page, it doesn't associate with
414415
* buffer, stack->buffer should be untouched
415416
*/
417+
elog(INFO, "before split: %d", stack->buffer);
416418
newlpage = btree->splitPage(btree, stack->buffer, rbuffer,
417419
page, rpage, stack->off);
418420

@@ -429,7 +431,8 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
429431
RumInitPage(page, RumPageGetOpaque(newlpage)->flags & ~RUM_LEAF,
430432
BufferGetPageSize(stack->buffer));
431433
PageRestoreTempPage(newlpage, lpage);
432-
btree->fillRoot(btree, stack->buffer, lbuffer, rbuffer);
434+
btree->fillRoot(btree, stack->buffer, lbuffer, rbuffer,
435+
page, lpage, rpage);
433436

434437
GenericXLogFinish(state);
435438

rumdatapage.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,7 @@ RumDataPageAddItem(Page page, void *data, OffsetNumber offset)
575575
{
576576
OffsetNumber maxoff = RumPageGetOpaque(page)->maxoff;
577577
char *ptr;
578+
size_t size;
578579

579580
if (offset == InvalidOffsetNumber)
580581
{
@@ -588,8 +589,10 @@ RumDataPageAddItem(Page page, void *data, OffsetNumber offset)
588589
ptr,
589590
(maxoff - offset + 1) * RumSizeOfDataPageItem(page));
590591
}
591-
memcpy(ptr, data, RumSizeOfDataPageItem(page));
592-
((PageHeader) page)->pd_lower = ptr - page;
592+
size = RumSizeOfDataPageItem(page);
593+
memcpy(ptr, data, size);
594+
((PageHeader) page)->pd_lower = (ptr + size) - page;
595+
elog(INFO, "RumDataPageAddItem: %d, %d", ((PageHeader) page)->pd_lower, ((PageHeader) page)->pd_upper);
593596

594597
RumPageGetOpaque(page)->maxoff++;
595598
}
@@ -700,7 +703,7 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
700703
{
701704
Assert(RumPageIsData(page));
702705

703-
dataPrepareData(btree, page, off);
706+
// dataPrepareData(btree, page, off);
704707

705708
if (RumPageIsLeaf(page))
706709
{
@@ -786,6 +789,7 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
786789
}
787790
else
788791
{
792+
elog(INFO, "dataPlaceToPage: %d", PostingItemGetBlockNumber(&(btree->pitem)));
789793
RumDataPageAddItem(page, &(btree->pitem), off);
790794
}
791795
}
@@ -839,7 +843,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
839843

840844
static char lpageCopy[BLCKSZ];
841845

842-
dataPrepareData(btree, newlPage, off);
846+
// dataPrepareData(btree, newlPage, off);
843847
maxoff = RumPageGetOpaque(newlPage)->maxoff;
844848

845849
/* Copy original data of the page */
@@ -996,6 +1000,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
9961000

9971001
RumPageGetOpaque(rPage)->maxoff = j - 1;
9981002

1003+
elog(INFO, "dataSplitPageLeaf: %d, %d", lbuf, BufferGetBlockNumber(lbuf));
9991004
PostingItemSetBlockNumber(&(btree->pitem), BufferGetBlockNumber(lbuf));
10001005
btree->pitem.key = maxLeftIptr;
10011006
btree->rightblkno = BufferGetBlockNumber(rbuf);
@@ -1036,7 +1041,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
10361041

10371042
RumInitPage(rPage, RumPageGetOpaque(newlPage)->flags, pageSize);
10381043
freeSpace = RumDataPageGetFreeSpace(rPage);
1039-
dataPrepareData(btree, newlPage, off);
1044+
// dataPrepareData(btree, newlPage, off);
10401045

10411046
memcpy(vector, RumDataPageGetItem(newlPage, FirstOffsetNumber),
10421047
maxoff * sizeofitem);
@@ -1163,6 +1168,8 @@ updateItemIndexes(Page page, OffsetNumber attnum, RumState *rumstate)
11631168
}
11641169
/* Update freespace of page */
11651170
RumPageGetOpaque(page)->freespace = RumDataPageFreeSpacePre(page, ptr);
1171+
/* Adjust pd_lower */
1172+
((PageHeader) page)->pd_lower = ptr - page;
11661173
return iptr;
11671174
}
11681175

@@ -1171,11 +1178,9 @@ updateItemIndexes(Page page, OffsetNumber attnum, RumState *rumstate)
11711178
* Also called from rumxlog, should not use btree
11721179
*/
11731180
void
1174-
rumDataFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf)
1181+
rumDataFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf,
1182+
Page page, Page lpage, Page rpage)
11751183
{
1176-
Page page = BufferGetPage(root, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
1177-
lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
1178-
rpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
11791184
PostingItem li,
11801185
ri;
11811186

rumentrypage.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,13 +501,11 @@ rumPageGetLinkItup(Buffer buf)
501501
* Also called from rumxlog, should not use btree
502502
*/
503503
void
504-
rumEntryFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf)
504+
rumEntryFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf,
505+
Page page, Page lpage, Page rpage)
505506
{
506-
Page page;
507507
IndexTuple itup;
508508

509-
page = BufferGetPage(root, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
510-
511509
itup = rumPageGetLinkItup(lbuf);
512510
if (PageAddItem(page, (Item) itup, IndexTupleSize(itup), InvalidOffsetNumber, false, false) == InvalidOffsetNumber)
513511
elog(ERROR, "failed to add item to index root page");

rumget.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2082,6 +2082,7 @@ rumgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
20822082
int64 ntids;
20832083
bool recheck;
20842084

2085+
elog(INFO, "rumgetbitmap");
20852086
/*
20862087
* Set up the scan keys, and check for unsatisfiable query.
20872088
*/

ruminsert.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ createPostingTree(RumState *rumstate, OffsetNumber attnum, Relation index,
5151

5252
state = GenericXLogStart(index);
5353

54-
page = GenericXLogRegisterBuffer(state, buffer, 0);
54+
page = GenericXLogRegisterBuffer(state, buffer, GENERIC_XLOG_FULL_IMAGE);
5555
RumInitPage(page, RUM_DATA | RUM_LEAF, BufferGetPageSize(buffer));
5656

5757
blkno = BufferGetBlockNumber(buffer);
@@ -593,6 +593,8 @@ rumbuild(Relation heap, Relation index, struct IndexInfo *indexInfo)
593593
OffsetNumber attnum;
594594
GenericXLogState *state;
595595

596+
elog(INFO, "rumbuild");
597+
596598
if (RelationGetNumberOfBlocks(index) != 0)
597599
elog(ERROR, "index \"%s\" already contains data",
598600
RelationGetRelationName(index));

rumscan.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ rumbeginscan(Relation rel, int nkeys, int norderbys)
2525
IndexScanDesc scan;
2626
RumScanOpaque so;
2727

28+
elog(INFO, "rumbeginscan");
2829
scan = RelationGetIndexScan(rel, nkeys, norderbys);
2930

3031
/* allocate private workspace */
@@ -432,6 +433,7 @@ void
432433
rumrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys,
433434
ScanKey orderbys, int norderbys)
434435
{
436+
elog(INFO, "rumrescan");
435437
/* remaining arguments are ignored */
436438
RumScanOpaque so = (RumScanOpaque) scan->opaque;
437439

0 commit comments

Comments
 (0)