18
18
#include "access/transam.h"
19
19
#include "access/xlog.h"
20
20
#include "access/xlogutils.h"
21
+ #include "access/ptrack.h"
21
22
#include "storage/standby.h"
22
23
#include "utils/memutils.h"
23
24
@@ -76,6 +77,15 @@ spgRedoCreateIndex(XLogReaderState *record)
76
77
XLogRecPtr lsn = record -> EndRecPtr ;
77
78
Buffer buffer ;
78
79
Page page ;
80
+ RelFileNode rnode ;
81
+ BlockNumber blkno ;
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 );
79
89
80
90
buffer = XLogInitBufferForRedo (record , 0 );
81
91
Assert (BufferGetBlockNumber (buffer ) == SPGIST_METAPAGE_BLKNO );
@@ -113,6 +123,16 @@ spgRedoAddLeaf(XLogReaderState *record)
113
123
Buffer buffer ;
114
124
Page page ;
115
125
XLogRedoAction action ;
126
+ RelFileNode rnode ;
127
+ BlockNumber blkno ;
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
+ }
116
136
117
137
ptr += sizeof (spgxlogAddLeaf );
118
138
leafTuple = ptr ;
@@ -213,8 +233,15 @@ spgRedoMoveLeafs(XLogReaderState *record)
213
233
Page page ;
214
234
XLogRedoAction action ;
215
235
BlockNumber blknoDst ;
236
+ RelFileNode rnode ;
237
+ BlockNumber blkno ;
216
238
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 );
218
245
219
246
fillFakeState (& state , xldata -> stateSrc );
220
247
@@ -324,6 +351,21 @@ spgRedoAddNode(XLogReaderState *record)
324
351
Buffer buffer ;
325
352
Page page ;
326
353
XLogRedoAction action ;
354
+ RelFileNode rnode ;
355
+ BlockNumber blkno ;
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
+ }
327
369
328
370
ptr += sizeof (spgxlogAddNode );
329
371
innerTuple = ptr ;
@@ -492,6 +534,13 @@ spgRedoSplitTuple(XLogReaderState *record)
492
534
Buffer buffer ;
493
535
Page page ;
494
536
XLogRedoAction action ;
537
+ RelFileNode rnode ;
538
+ BlockNumber blkno ;
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 );
495
544
496
545
ptr += sizeof (spgxlogSplitTuple );
497
546
prefixTuple = ptr ;
@@ -578,8 +627,23 @@ spgRedoPickSplit(XLogReaderState *record)
578
627
int i ;
579
628
BlockNumber blknoInner ;
580
629
XLogRedoAction action ;
581
-
582
- XLogRecGetBlockTag (record , 2 , NULL , NULL , & blknoInner );
630
+ RelFileNode rnode ;
631
+ BlockNumber blkno ;
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
+ }
583
647
584
648
fillFakeState (& state , xldata -> stateSrc );
585
649
@@ -795,6 +859,11 @@ spgRedoVacuumLeaf(XLogReaderState *record)
795
859
Buffer buffer ;
796
860
Page page ;
797
861
int i ;
862
+ RelFileNode rnode ;
863
+ BlockNumber blkno ;
864
+
865
+ XLogRecGetBlockTag (record , 0 , & rnode , NULL , & blkno );
866
+ ptrack_add_block_redo (rnode , blkno );
798
867
799
868
fillFakeState (& state , xldata -> stateSrc );
800
869
@@ -871,6 +940,11 @@ spgRedoVacuumRoot(XLogReaderState *record)
871
940
OffsetNumber * toDelete ;
872
941
Buffer buffer ;
873
942
Page page ;
943
+ RelFileNode rnode ;
944
+ BlockNumber blkno ;
945
+
946
+ XLogRecGetBlockTag (record , 0 , & rnode , NULL , & blkno );
947
+ ptrack_add_block_redo (rnode , blkno );
874
948
875
949
toDelete = xldata -> offsets ;
876
950
@@ -896,6 +970,11 @@ spgRedoVacuumRedirect(XLogReaderState *record)
896
970
spgxlogVacuumRedirect * xldata = (spgxlogVacuumRedirect * ) ptr ;
897
971
OffsetNumber * itemToPlaceholder ;
898
972
Buffer buffer ;
973
+ RelFileNode rnode ;
974
+ BlockNumber blkno ;
975
+
976
+ XLogRecGetBlockTag (record , 0 , & rnode , NULL , & blkno );
977
+ ptrack_add_block_redo (rnode , blkno );
899
978
900
979
itemToPlaceholder = xldata -> offsets ;
901
980
0 commit comments