Skip to content

Commit e69073e

Browse files
author
Artur Zakirov
committed
Adjust pd_lower in RumDataPageAddItem()
1 parent eab8031 commit e69073e

File tree

9 files changed

+69
-93
lines changed

9 files changed

+69
-93
lines changed

rumbtree.c

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ rumTraverseLock(Buffer buffer, bool searchMode)
2727
int access = RUM_SHARE;
2828

2929
LockBuffer(buffer, RUM_SHARE);
30-
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
30+
page = BufferGetPage(buffer);
3131
if (RumPageIsLeaf(page))
3232
{
3333
if (searchMode == FALSE)
@@ -87,7 +87,7 @@ rumReFindLeafPage(RumBtree btree, RumBtreeStack *stack)
8787
stack = stack->parent;
8888
pfree(ptr);
8989

90-
page = BufferGetPage(stack->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
90+
page = BufferGetPage(stack->buffer);
9191
maxoff = RumPageGetOpaque(page)->maxoff;
9292

9393
if (rumCompareItemPointers(
@@ -123,7 +123,7 @@ rumFindLeafPage(RumBtree btree, RumBtreeStack *stack)
123123

124124
stack->off = InvalidOffsetNumber;
125125

126-
page = BufferGetPage(stack->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
126+
page = BufferGetPage(stack->buffer);
127127

128128
if (isfirst)
129129
{
@@ -149,8 +149,7 @@ rumFindLeafPage(RumBtree btree, RumBtreeStack *stack)
149149

150150
stack->buffer = rumStepRight(stack->buffer, btree->index, access);
151151
stack->blkno = rightlink;
152-
page = BufferGetPage(stack->buffer, NULL, NULL,
153-
BGP_NO_SNAPSHOT_TEST);
152+
page = BufferGetPage(stack->buffer);
154153
}
155154

156155
if (RumPageIsLeaf(page)) /* we found, return locked page */
@@ -201,7 +200,7 @@ Buffer
201200
rumStepRight(Buffer buffer, Relation index, int lockmode)
202201
{
203202
Buffer nextbuffer;
204-
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
203+
Page page = BufferGetPage(buffer);
205204
bool isLeaf = RumPageIsLeaf(page);
206205
bool isData = RumPageIsData(page);
207206
BlockNumber blkno = RumPageGetOpaque(page)->rightlink;
@@ -211,7 +210,7 @@ rumStepRight(Buffer buffer, Relation index, int lockmode)
211210
UnlockReleaseBuffer(buffer);
212211

213212
/* Sanity check that the page we stepped to is of similar kind. */
214-
page = BufferGetPage(nextbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
213+
page = BufferGetPage(nextbuffer);
215214
if (isLeaf != RumPageIsLeaf(page) || isData != RumPageIsData(page))
216215
elog(ERROR, "right sibling of RUM page is of different type");
217216

@@ -285,7 +284,7 @@ rumFindParents(RumBtree btree, RumBtreeStack *stack,
285284
}
286285
root->off = InvalidOffsetNumber;
287286

288-
page = BufferGetPage(root->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
287+
page = BufferGetPage(root->buffer);
289288
Assert(!RumPageIsLeaf(page));
290289

291290
/* check trivial case */
@@ -303,7 +302,7 @@ rumFindParents(RumBtree btree, RumBtreeStack *stack,
303302
{
304303
buffer = ReadBuffer(btree->index, blkno);
305304
LockBuffer(buffer, RUM_EXCLUSIVE);
306-
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
305+
page = BufferGetPage(buffer);
307306
if (RumPageIsLeaf(page))
308307
elog(ERROR, "Lost path");
309308

@@ -318,7 +317,7 @@ rumFindParents(RumBtree btree, RumBtreeStack *stack,
318317
break;
319318
}
320319
buffer = rumStepRight(buffer, btree->index, RUM_EXCLUSIVE);
321-
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
320+
page = BufferGetPage(buffer);
322321
}
323322

324323
if (blkno != InvalidBlockNumber)
@@ -369,14 +368,14 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
369368
{
370369
BlockNumber savedRightLink;
371370

372-
page = BufferGetPage(stack->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
371+
page = BufferGetPage(stack->buffer);
373372
savedRightLink = RumPageGetOpaque(page)->rightlink;
374373

375374
if (btree->isEnoughSpace(btree, stack->buffer, stack->off))
376375
{
377376
state = GenericXLogStart(index);
378377
page = GenericXLogRegisterBuffer(state, stack->buffer, 0);
379-
elog(INFO, "rumInsertValue: %d", stack->buffer);
378+
380379
btree->placeToPage(btree, page, stack->off);
381380
GenericXLogFinish(state);
382381

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

@@ -486,7 +484,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
486484
LockBuffer(parent->buffer, RUM_EXCLUSIVE);
487485

488486
/* move right if it's needed */
489-
page = BufferGetPage(parent->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
487+
page = BufferGetPage(parent->buffer);
490488
while ((parent->off = btree->findChildPtr(btree, page, stack->blkno, parent->off)) == InvalidOffsetNumber)
491489
{
492490
BlockNumber rightlink = RumPageGetOpaque(page)->rightlink;
@@ -506,8 +504,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
506504

507505
parent->buffer = rumStepRight(parent->buffer, btree->index, RUM_EXCLUSIVE);
508506
parent->blkno = rightlink;
509-
page = BufferGetPage(parent->buffer, NULL, NULL,
510-
BGP_NO_SNAPSHOT_TEST);
507+
page = BufferGetPage(parent->buffer);
511508
}
512509

513510
UnlockReleaseBuffer(stack->buffer);

rumdatapage.c

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -353,8 +353,7 @@ dataLocateItem(RumBtree btree, RumBtreeStack *stack)
353353
maxoff;
354354
PostingItem *pitem = NULL;
355355
int result;
356-
Page page = BufferGetPage(stack->buffer, NULL, NULL,
357-
BGP_NO_SNAPSHOT_TEST);
356+
Page page = BufferGetPage(stack->buffer);
358357

359358
Assert(!RumPageIsLeaf(page));
360359
Assert(RumPageIsData(page));
@@ -486,8 +485,7 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
486485
static bool
487486
dataLocateLeafItem(RumBtree btree, RumBtreeStack *stack)
488487
{
489-
Page page = BufferGetPage(stack->buffer, NULL, NULL,
490-
BGP_NO_SNAPSHOT_TEST);
488+
Page page = BufferGetPage(stack->buffer);
491489
ItemPointerData iptr;
492490
Pointer ptr;
493491

@@ -574,27 +572,33 @@ void
574572
RumDataPageAddItem(Page page, void *data, OffsetNumber offset)
575573
{
576574
OffsetNumber maxoff = RumPageGetOpaque(page)->maxoff;
577-
char *ptr;
578-
size_t size;
575+
char *ptr,
576+
*nextptr;
577+
size_t size = RumSizeOfDataPageItem(page);
579578

580579
if (offset == InvalidOffsetNumber)
581580
{
582581
ptr = RumDataPageGetItem(page, maxoff + 1);
582+
nextptr = ptr + size + 1;
583583
}
584584
else
585585
{
586586
ptr = RumDataPageGetItem(page, offset);
587587
if (maxoff + 1 - offset != 0)
588-
memmove(ptr + RumSizeOfDataPageItem(page),
588+
{
589+
memmove(ptr + size,
589590
ptr,
590-
(maxoff - offset + 1) * RumSizeOfDataPageItem(page));
591+
(maxoff - offset + 1) * size);
592+
nextptr = ptr + size + (maxoff - offset + 1) * size + 1;
593+
}
594+
else
595+
nextptr = ptr + size + 1;
591596
}
592-
size = RumSizeOfDataPageItem(page);
593597
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);
596598

597599
RumPageGetOpaque(page)->maxoff++;
600+
/* Adjust pd_lower */
601+
((PageHeader) page)->pd_lower = nextptr - page;
598602
}
599603

600604
/*
@@ -622,7 +626,7 @@ RumPageDeletePostingItem(Page page, OffsetNumber offset)
622626
static bool
623627
dataIsEnoughSpace(RumBtree btree, Buffer buf, OffsetNumber off)
624628
{
625-
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
629+
Page page = BufferGetPage(buf);
626630

627631
Assert(RumPageIsData(page));
628632
Assert(!btree->isDelete);
@@ -703,7 +707,7 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
703707
{
704708
Assert(RumPageIsData(page));
705709

706-
// dataPrepareData(btree, page, off);
710+
dataPrepareData(btree, page, off);
707711

708712
if (RumPageIsLeaf(page))
709713
{
@@ -789,7 +793,6 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
789793
}
790794
else
791795
{
792-
elog(INFO, "dataPlaceToPage: %d", PostingItemGetBlockNumber(&(btree->pitem)));
793796
RumDataPageAddItem(page, &(btree->pitem), off);
794797
}
795798
}
@@ -843,7 +846,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
843846

844847
static char lpageCopy[BLCKSZ];
845848

846-
// dataPrepareData(btree, newlPage, off);
849+
dataPrepareData(btree, newlPage, off);
847850
maxoff = RumPageGetOpaque(newlPage)->maxoff;
848851

849852
/* Copy original data of the page */
@@ -1000,7 +1003,6 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10001003

10011004
RumPageGetOpaque(rPage)->maxoff = j - 1;
10021005

1003-
elog(INFO, "dataSplitPageLeaf: %d, %d", lbuf, BufferGetBlockNumber(lbuf));
10041006
PostingItemSetBlockNumber(&(btree->pitem), BufferGetBlockNumber(lbuf));
10051007
btree->pitem.key = maxLeftIptr;
10061008
btree->rightblkno = BufferGetBlockNumber(rbuf);
@@ -1028,8 +1030,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
10281030
char *ptr;
10291031
OffsetNumber separator;
10301032
ItemPointer bound;
1031-
Page newlPage = PageGetTempPageCopy(BufferGetPage(lbuf, NULL, NULL,
1032-
BGP_NO_SNAPSHOT_TEST));
1033+
Page newlPage = PageGetTempPageCopy(BufferGetPage(lbuf));
10331034
ItemPointerData oldbound = *RumDataPageGetRightBound(newlPage);
10341035
int sizeofitem = RumSizeOfDataPageItem(newlPage);
10351036
OffsetNumber maxoff = RumPageGetOpaque(newlPage)->maxoff;
@@ -1041,7 +1042,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
10411042

10421043
RumInitPage(rPage, RumPageGetOpaque(newlPage)->flags, pageSize);
10431044
freeSpace = RumDataPageGetFreeSpace(rPage);
1044-
// dataPrepareData(btree, newlPage, off);
1045+
dataPrepareData(btree, newlPage, off);
10451046

10461047
memcpy(vector, RumDataPageGetItem(newlPage, FirstOffsetNumber),
10471048
maxoff * sizeofitem);
@@ -1123,7 +1124,7 @@ static Page
11231124
dataSplitPage(RumBtree btree, Buffer lbuf, Buffer rbuf,
11241125
Page lpage, Page rpage, OffsetNumber off)
11251126
{
1126-
if (RumPageIsLeaf(BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST)))
1127+
if (RumPageIsLeaf(BufferGetPage(lbuf)))
11271128
return dataSplitPageLeaf(btree, lbuf, rbuf, lpage, rpage, off);
11281129
else
11291130
return dataSplitPageInternal(btree, lbuf, rbuf, lpage, rpage, off);

rumentrypage.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ entryLocateEntry(RumBtree btree, RumBtreeStack *stack)
132132
maxoff;
133133
IndexTuple itup = NULL;
134134
int result;
135-
Page page = BufferGetPage(stack->buffer, NULL, NULL,
136-
BGP_NO_SNAPSHOT_TEST);
135+
Page page = BufferGetPage(stack->buffer);
137136

138137
Assert(!RumPageIsLeaf(page));
139138
Assert(!RumPageIsData(page));
@@ -204,8 +203,7 @@ entryLocateEntry(RumBtree btree, RumBtreeStack *stack)
204203
static bool
205204
entryLocateLeafEntry(RumBtree btree, RumBtreeStack *stack)
206205
{
207-
Page page = BufferGetPage(stack->buffer, NULL, NULL,
208-
BGP_NO_SNAPSHOT_TEST);
206+
Page page = BufferGetPage(stack->buffer);
209207
OffsetNumber low,
210208
high;
211209

@@ -319,7 +317,7 @@ static bool
319317
entryIsEnoughSpace(RumBtree btree, Buffer buf, OffsetNumber off)
320318
{
321319
Size itupsz = 0;
322-
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
320+
Page page = BufferGetPage(buf);
323321

324322
Assert(btree->entry);
325323
Assert(!RumPageIsData(page));
@@ -488,7 +486,7 @@ rumPageGetLinkItup(Buffer buf)
488486
{
489487
IndexTuple itup,
490488
nitup;
491-
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
489+
Page page = BufferGetPage(buf);
492490

493491
itup = getRightMostTuple(page);
494492
nitup = RumFormInteriorTuple(itup, page, BufferGetBlockNumber(buf));

rumfast.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
203203
else
204204
{
205205
LockBuffer(metabuffer, RUM_EXCLUSIVE);
206-
metadata = RumPageGetMeta(BufferGetPage(metabuffer, NULL, NULL,
207-
BGP_NO_SNAPSHOT_TEST));
206+
metadata = RumPageGetMeta(BufferGetPage(metabuffer));
208207

209208
if (metadata->head == InvalidBlockNumber ||
210209
collector->sumsize + collector->ntuples * sizeof(ItemIdData) > metadata->tailFreeSize)
@@ -525,8 +524,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
525524
buffers[data.ndeleted] = ReadBuffer(index, blknoToDelete);
526525
LockBuffer(buffers[data.ndeleted], RUM_EXCLUSIVE);
527526

528-
page = BufferGetPage(buffers[data.ndeleted], NULL, NULL,
529-
BGP_NO_SNAPSHOT_TEST);
527+
page = BufferGetPage(buffers[data.ndeleted]);
530528

531529
data.ndeleted++;
532530

@@ -737,7 +735,7 @@ rumInsertCleanup(RumState *rumstate,
737735
metabuffer = ReadBuffer(index, RUM_METAPAGE_BLKNO);
738736
LockBuffer(metabuffer, RUM_SHARE);
739737

740-
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
738+
metapage = BufferGetPage(metabuffer);
741739
metadata = RumPageGetMeta(metapage);
742740

743741
if (metadata->head == InvalidBlockNumber)
@@ -753,7 +751,7 @@ rumInsertCleanup(RumState *rumstate,
753751
blkno = metadata->head;
754752
buffer = ReadBuffer(index, blkno);
755753
LockBuffer(buffer, RUM_SHARE);
756-
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
754+
page = BufferGetPage(buffer);
757755

758756
LockBuffer(metabuffer, RUM_UNLOCK);
759757

@@ -939,7 +937,7 @@ rumInsertCleanup(RumState *rumstate,
939937
vacuum_delay_point();
940938
buffer = ReadBuffer(index, blkno);
941939
LockBuffer(buffer, RUM_SHARE);
942-
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
940+
page = BufferGetPage(buffer);
943941
}
944942

945943
ReleaseBuffer(metabuffer);

0 commit comments

Comments
 (0)