1414#include "access/brin_pageops.h"
1515#include "access/brin_xlog.h"
1616#include "access/xlogutils.h"
17+ #include "access/ptrack.h"
1718
1819
1920/*
@@ -26,6 +27,11 @@ brin_xlog_createidx(XLogReaderState *record)
2627xl_brin_createidx * xlrec = (xl_brin_createidx * )XLogRecGetData (record );
2728Buffer buf ;
2829Page page ;
30+ RelFileNode rnode ;
31+ BlockNumber blkno ;
32+
33+ XLogRecGetBlockTag (record ,0 ,& rnode ,NULL ,& blkno );
34+ ptrack_add_block_redo (rnode ,blkno );
2935
3036/* create the index' metapage */
3137buf = XLogInitBufferForRedo (record ,0 );
@@ -50,6 +56,13 @@ brin_xlog_insert_update(XLogReaderState *record,
5056BlockNumber regpgno ;
5157Page page ;
5258XLogRedoAction action ;
59+ RelFileNode rnode ;
60+ BlockNumber blkno ;
61+
62+ XLogRecGetBlockTag (record ,0 ,& rnode ,NULL ,& blkno );
63+ ptrack_add_block_redo (rnode ,blkno );
64+ XLogRecGetBlockTag (record ,1 ,& rnode ,NULL ,& blkno );
65+ ptrack_add_block_redo (rnode ,blkno );
5366
5467/*
5568 * If we inserted the first and only tuple on the page, re-initialize the
@@ -137,9 +150,15 @@ brin_xlog_update(XLogReaderState *record)
137150xl_brin_update * xlrec = (xl_brin_update * )XLogRecGetData (record );
138151Buffer buffer ;
139152XLogRedoAction action ;
153+ RelFileNode rnode ;
154+ BlockNumber blkno ;
155+
156+ XLogRecGetBlockTag (record ,2 ,& rnode ,NULL ,& blkno );
157+ ptrack_add_block_redo (rnode ,blkno );
140158
141159/* First remove the old tuple */
142160action = XLogReadBufferForRedo (record ,2 ,& buffer );
161+
143162if (action == BLK_NEEDS_REDO )
144163{
145164Page page ;
@@ -174,9 +193,15 @@ brin_xlog_samepage_update(XLogReaderState *record)
174193xl_brin_samepage_update * xlrec ;
175194Buffer buffer ;
176195XLogRedoAction action ;
196+ RelFileNode rnode ;
197+ BlockNumber blkno ;
198+
199+ XLogRecGetBlockTag (record ,0 ,& rnode ,NULL ,& blkno );
200+ ptrack_add_block_redo (rnode ,blkno );
177201
178202xlrec = (xl_brin_samepage_update * )XLogRecGetData (record );
179203action = XLogReadBufferForRedo (record ,0 ,& buffer );
204+
180205if (action == BLK_NEEDS_REDO )
181206{
182207Size tuplen ;
@@ -220,14 +245,21 @@ brin_xlog_revmap_extend(XLogReaderState *record)
220245Page page ;
221246BlockNumber targetBlk ;
222247XLogRedoAction action ;
248+ RelFileNode rnode ;
249+ BlockNumber blkno ;
223250
224251xlrec = (xl_brin_revmap_extend * )XLogRecGetData (record );
225252
226- XLogRecGetBlockTag (record ,1 ,NULL ,NULL ,& targetBlk );
253+ XLogRecGetBlockTag (record ,0 ,& rnode ,NULL ,& blkno );
254+ ptrack_add_block_redo (rnode ,blkno );
255+ XLogRecGetBlockTag (record ,1 ,& rnode ,NULL ,& targetBlk );
256+ ptrack_add_block_redo (rnode ,targetBlk );
257+
227258Assert (xlrec -> targetBlk == targetBlk );
228259
229260/* Update the metapage */
230261action = XLogReadBufferForRedo (record ,0 ,& metabuf );
262+
231263if (action == BLK_NEEDS_REDO )
232264{
233265Page metapg ;