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

Commiteab8031

Browse files
author
Artur Zakirov
committed
Fix adjust pd_lower
1 parentf6d970a commiteab8031

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
boolisData;
440440
boolsearchMode;
@@ -477,7 +477,8 @@ extern void rumFindParents(RumBtree btree, RumBtreeStack *stack, BlockNumber roo
477477
externvoidrumPrepareEntryScan(RumBtreebtree,OffsetNumberattnum,
478478
Datumkey,RumNullCategorycategory,
479479
RumState*rumstate);
480-
externvoidrumEntryFillRoot(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf);
480+
externvoidrumEntryFillRoot(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf,
481+
Pagepage,Pagelpage,Pagerpage);
481482
externIndexTuplerumPageGetLinkItup(Bufferbuf);
482483
externvoidrumReadTuple(RumState*rumstate,OffsetNumberattnum,
483484
IndexTupleitup,ItemPointerData*ipd,Datum*addInfo,bool*addInfoIsNull);
@@ -515,7 +516,8 @@ extern void rumInsertItemPointers(RumState *rumstate,
515516
uint32nitem,
516517
GinStatsData*buildStats);
517518
externBufferrumScanBeginPostingTree(RumPostingTreeScan*gdi);
518-
externvoidrumDataFillRoot(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf);
519+
externvoidrumDataFillRoot(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf,
520+
Pagepage,Pagelpage,Pagerpage);
519521
externvoidrumPrepareDataScan(RumBtreebtree,Relationindex,OffsetNumberattnum,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
OffsetNumbermaxoff=RumPageGetOpaque(page)->maxoff;
577577
char*ptr;
578+
size_tsize;
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
staticcharlpageCopy[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
returniptr;
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(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf)
1181+
rumDataFillRoot(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf,
1182+
Pagepage,Pagelpage,Pagerpage)
11751183
{
1176-
Pagepage=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
PostingItemli,
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(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf)
504+
rumEntryFillRoot(RumBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf,
505+
Pagepage,Pagelpage,Pagerpage)
505506
{
506-
Pagepage;
507507
IndexTupleitup;
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
int64ntids;
20832083
boolrecheck;
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
OffsetNumberattnum;
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
IndexScanDescscan;
2626
RumScanOpaqueso;
2727

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

3031
/* allocate private workspace */
@@ -432,6 +433,7 @@ void
432433
rumrescan(IndexScanDescscan,ScanKeyscankey,intnscankeys,
433434
ScanKeyorderbys,intnorderbys)
434435
{
436+
elog(INFO,"rumrescan");
435437
/* remaining arguments are ignored */
436438
RumScanOpaqueso= (RumScanOpaque)scan->opaque;
437439

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp