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

Commit132c495

Browse files
committed
spgist ptrack with xlog
1 parent31e7971 commit132c495

File tree

4 files changed

+109
-3
lines changed

4 files changed

+109
-3
lines changed

‎src/backend/access/spgist/spgdoinsert.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include"access/genam.h"
1919
#include"access/spgist_private.h"
2020
#include"access/xloginsert.h"
21+
#include"access/ptrack.h"
2122
#include"miscadmin.h"
2223
#include"storage/bufmgr.h"
2324
#include"utils/rel.h"
@@ -213,6 +214,7 @@ addLeafTuple(Relation index, SpGistState *state, SpGistLeafTuple leafTuple,
213214
xlrec.offnumParent=InvalidOffsetNumber;
214215
xlrec.nodeI=0;
215216

217+
ptrack_add_block(index,BufferGetBlockNumber(current->buffer));
216218
START_CRIT_SECTION();
217219

218220
if (current->offnum==InvalidOffsetNumber||
@@ -457,6 +459,9 @@ moveLeafs(Relation index, SpGistState *state,
457459

458460
leafdata=leafptr=palloc(size);
459461

462+
ptrack_add_block(index,BufferGetBlockNumber(current->buffer));
463+
ptrack_add_block(index,BufferGetBlockNumber(nbuf));
464+
ptrack_add_block(index,BufferGetBlockNumber(parent->buffer));
460465
START_CRIT_SECTION();
461466

462467
/* copy all the old tuples to new page, unless they're dead */
@@ -1109,6 +1114,13 @@ doPickSplit(Relation index, SpGistState *state,
11091114
leafdata=leafptr= (char*)palloc(totalLeafSizes);
11101115

11111116
/* Here we begin making the changes to the target pages */
1117+
if (newLeafBuffer!=InvalidBuffer)
1118+
ptrack_add_block(index,BufferGetBlockNumber(newLeafBuffer));
1119+
if (saveCurrent.buffer!=InvalidBuffer)
1120+
ptrack_add_block(index,BufferGetBlockNumber(saveCurrent.buffer));
1121+
ptrack_add_block(index,BufferGetBlockNumber(current->buffer));
1122+
if (parent->buffer!=InvalidBuffer)
1123+
ptrack_add_block(index,BufferGetBlockNumber(parent->buffer));
11121124
START_CRIT_SECTION();
11131125

11141126
/*
@@ -1519,6 +1531,7 @@ spgAddNodeAction(Relation index, SpGistState *state,
15191531
/*
15201532
* We can replace the inner tuple by new version in-place
15211533
*/
1534+
ptrack_add_block(index,BufferGetBlockNumber(current->buffer));
15221535
START_CRIT_SECTION();
15231536

15241537
PageIndexTupleDelete(current->page,current->offnum);
@@ -1602,6 +1615,9 @@ spgAddNodeAction(Relation index, SpGistState *state,
16021615
else
16031616
xlrec.parentBlk=2;
16041617

1618+
ptrack_add_block(index,BufferGetBlockNumber(current->buffer));
1619+
ptrack_add_block(index,BufferGetBlockNumber(saveCurrent.buffer));
1620+
ptrack_add_block(index,BufferGetBlockNumber(parent->buffer));
16051621
START_CRIT_SECTION();
16061622

16071623
/* insert new ... */
@@ -1764,6 +1780,9 @@ spgSplitNodeAction(Relation index, SpGistState *state,
17641780
&xlrec.newPage);
17651781
}
17661782

1783+
if (newBuffer!=InvalidBuffer)
1784+
ptrack_add_block(index,BufferGetBlockNumber(newBuffer));
1785+
ptrack_add_block(index,BufferGetBlockNumber(current->buffer));
17671786
START_CRIT_SECTION();
17681787

17691788
/*

‎src/backend/access/spgist/spginsert.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include"access/xlog.h"
2222
#include"access/xloginsert.h"
2323
#include"access/generic_xlog.h"
24+
#include"access/ptrack.h"
2425
#include"catalog/index.h"
2526
#include"miscadmin.h"
2627
#include"storage/bufmgr.h"
@@ -91,6 +92,9 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo)
9192
Assert(BufferGetBlockNumber(rootbuffer)==SPGIST_ROOT_BLKNO);
9293
Assert(BufferGetBlockNumber(nullbuffer)==SPGIST_NULL_BLKNO);
9394

95+
ptrack_add_block(index,BufferGetBlockNumber(metabuffer));
96+
ptrack_add_block(index,BufferGetBlockNumber(rootbuffer));
97+
ptrack_add_block(index,BufferGetBlockNumber(nullbuffer));
9498
START_CRIT_SECTION();
9599

96100
SpGistInitMetapage(BufferGetPage(metabuffer));

‎src/backend/access/spgist/spgvacuum.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include"access/spgist_private.h"
2020
#include"access/transam.h"
2121
#include"access/xloginsert.h"
22+
#include"access/ptrack.h"
2223
#include"catalog/storage_xlog.h"
2324
#include"commands/vacuum.h"
2425
#include"miscadmin.h"
@@ -323,6 +324,7 @@ vacuumLeafPage(spgBulkDeleteState *bds, Relation index, Buffer buffer,
323324
elog(ERROR,"inconsistent counts of deletable tuples");
324325

325326
/* Do the updates */
327+
ptrack_add_block(index,BufferGetBlockNumber(buffer));
326328
START_CRIT_SECTION();
327329

328330
spgPageIndexMultiDelete(&bds->spgstate,page,
@@ -447,6 +449,7 @@ vacuumLeafRoot(spgBulkDeleteState *bds, Relation index, Buffer buffer)
447449
return;/* nothing more to do */
448450

449451
/* Do the update */
452+
ptrack_add_block(index,BufferGetBlockNumber(buffer));
450453
START_CRIT_SECTION();
451454

452455
/* The tuple numbers are in order, so we can use PageIndexMultiDelete */
@@ -504,6 +507,7 @@ vacuumRedirectAndPlaceholder(Relation index, Buffer buffer)
504507
xlrec.nToPlaceholder=0;
505508
xlrec.newestRedirectXid=InvalidTransactionId;
506509

510+
ptrack_add_block(index,BufferGetBlockNumber(buffer));
507511
START_CRIT_SECTION();
508512

509513
/*

‎src/backend/access/spgist/spgxlog.c

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include"access/transam.h"
1919
#include"access/xlog.h"
2020
#include"access/xlogutils.h"
21+
#include"access/ptrack.h"
2122
#include"storage/standby.h"
2223
#include"utils/memutils.h"
2324

@@ -76,6 +77,15 @@ spgRedoCreateIndex(XLogReaderState *record)
7677
XLogRecPtrlsn=record->EndRecPtr;
7778
Bufferbuffer;
7879
Pagepage;
80+
RelFileNodernode;
81+
BlockNumberblkno;
82+
83+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
84+
ptrack_add_block_redo(rnode,blkno);
85+
XLogRecGetBlockTag(record,1,&rnode,NULL,&blkno);
86+
ptrack_add_block_redo(rnode,blkno);
87+
XLogRecGetBlockTag(record,2,&rnode,NULL,&blkno);
88+
ptrack_add_block_redo(rnode,blkno);
7989

8090
buffer=XLogInitBufferForRedo(record,0);
8191
Assert(BufferGetBlockNumber(buffer)==SPGIST_METAPAGE_BLKNO);
@@ -113,6 +123,16 @@ spgRedoAddLeaf(XLogReaderState *record)
113123
Bufferbuffer;
114124
Pagepage;
115125
XLogRedoActionaction;
126+
RelFileNodernode;
127+
BlockNumberblkno;
128+
129+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
130+
ptrack_add_block_redo(rnode,blkno);
131+
if (xldata->offnumParent!=InvalidOffsetNumber)
132+
{
133+
XLogRecGetBlockTag(record,1,&rnode,NULL,&blkno);
134+
ptrack_add_block_redo(rnode,blkno);
135+
}
116136

117137
ptr+=sizeof(spgxlogAddLeaf);
118138
leafTuple=ptr;
@@ -213,8 +233,15 @@ spgRedoMoveLeafs(XLogReaderState *record)
213233
Pagepage;
214234
XLogRedoActionaction;
215235
BlockNumberblknoDst;
236+
RelFileNodernode;
237+
BlockNumberblkno;
216238

217-
XLogRecGetBlockTag(record,1,NULL,NULL,&blknoDst);
239+
XLogRecGetBlockTag(record,1,&rnode,NULL,&blknoDst);
240+
ptrack_add_block_redo(rnode,blknoDst);
241+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
242+
ptrack_add_block_redo(rnode,blkno);
243+
XLogRecGetBlockTag(record,2,&rnode,NULL,&blkno);
244+
ptrack_add_block_redo(rnode,blkno);
218245

219246
fillFakeState(&state,xldata->stateSrc);
220247

@@ -324,6 +351,21 @@ spgRedoAddNode(XLogReaderState *record)
324351
Bufferbuffer;
325352
Pagepage;
326353
XLogRedoActionaction;
354+
RelFileNodernode;
355+
BlockNumberblkno;
356+
357+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
358+
ptrack_add_block_redo(rnode,blkno);
359+
if(XLogRecHasBlockRef(record,1))
360+
{
361+
XLogRecGetBlockTag(record,1,&rnode,NULL,&blkno);
362+
ptrack_add_block_redo(rnode,blkno);
363+
}
364+
if (xldata->parentBlk==2)
365+
{
366+
XLogRecGetBlockTag(record,2,&rnode,NULL,&blkno);
367+
ptrack_add_block_redo(rnode,blkno);
368+
}
327369

328370
ptr+=sizeof(spgxlogAddNode);
329371
innerTuple=ptr;
@@ -492,6 +534,13 @@ spgRedoSplitTuple(XLogReaderState *record)
492534
Bufferbuffer;
493535
Pagepage;
494536
XLogRedoActionaction;
537+
RelFileNodernode;
538+
BlockNumberblkno;
539+
540+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
541+
ptrack_add_block_redo(rnode,blkno);
542+
XLogRecGetBlockTag(record,1,&rnode,NULL,&blkno);
543+
ptrack_add_block_redo(rnode,blkno);
495544

496545
ptr+=sizeof(spgxlogSplitTuple);
497546
prefixTuple=ptr;
@@ -578,8 +627,23 @@ spgRedoPickSplit(XLogReaderState *record)
578627
inti;
579628
BlockNumberblknoInner;
580629
XLogRedoActionaction;
581-
582-
XLogRecGetBlockTag(record,2,NULL,NULL,&blknoInner);
630+
RelFileNodernode;
631+
BlockNumberblkno;
632+
633+
XLogRecGetBlockTag(record,2,&rnode,NULL,&blknoInner);
634+
ptrack_add_block_redo(rnode,blknoInner);
635+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
636+
ptrack_add_block_redo(rnode,blkno);
637+
if (XLogRecHasBlockRef(record,1))
638+
{
639+
XLogRecGetBlockTag(record,1,&rnode,NULL,&blkno);
640+
ptrack_add_block_redo(rnode,blkno);
641+
}
642+
if (XLogRecHasBlockRef(record,3))
643+
{
644+
XLogRecGetBlockTag(record,3,&rnode,NULL,&blkno);
645+
ptrack_add_block_redo(rnode,blkno);
646+
}
583647

584648
fillFakeState(&state,xldata->stateSrc);
585649

@@ -795,6 +859,11 @@ spgRedoVacuumLeaf(XLogReaderState *record)
795859
Bufferbuffer;
796860
Pagepage;
797861
inti;
862+
RelFileNodernode;
863+
BlockNumberblkno;
864+
865+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
866+
ptrack_add_block_redo(rnode,blkno);
798867

799868
fillFakeState(&state,xldata->stateSrc);
800869

@@ -871,6 +940,11 @@ spgRedoVacuumRoot(XLogReaderState *record)
871940
OffsetNumber*toDelete;
872941
Bufferbuffer;
873942
Pagepage;
943+
RelFileNodernode;
944+
BlockNumberblkno;
945+
946+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
947+
ptrack_add_block_redo(rnode,blkno);
874948

875949
toDelete=xldata->offsets;
876950

@@ -896,6 +970,11 @@ spgRedoVacuumRedirect(XLogReaderState *record)
896970
spgxlogVacuumRedirect*xldata= (spgxlogVacuumRedirect*)ptr;
897971
OffsetNumber*itemToPlaceholder;
898972
Bufferbuffer;
973+
RelFileNodernode;
974+
BlockNumberblkno;
975+
976+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
977+
ptrack_add_block_redo(rnode,blkno);
899978

900979
itemToPlaceholder=xldata->offsets;
901980

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp