14
14
#include "access/brin_pageops.h"
15
15
#include "access/brin_xlog.h"
16
16
#include "access/xlogutils.h"
17
+ #include "access/ptrack.h"
17
18
18
19
19
20
/*
@@ -26,6 +27,11 @@ brin_xlog_createidx(XLogReaderState *record)
26
27
xl_brin_createidx * xlrec = (xl_brin_createidx * )XLogRecGetData (record );
27
28
Buffer buf ;
28
29
Page page ;
30
+ RelFileNode rnode ;
31
+ BlockNumber blkno ;
32
+
33
+ XLogRecGetBlockTag (record ,0 ,& rnode ,NULL ,& blkno );
34
+ ptrack_add_block_redo (rnode ,blkno );
29
35
30
36
/* create the index' metapage */
31
37
buf = XLogInitBufferForRedo (record ,0 );
@@ -50,6 +56,13 @@ brin_xlog_insert_update(XLogReaderState *record,
50
56
BlockNumber regpgno ;
51
57
Page page ;
52
58
XLogRedoAction 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 );
53
66
54
67
/*
55
68
* If we inserted the first and only tuple on the page, re-initialize the
@@ -137,9 +150,15 @@ brin_xlog_update(XLogReaderState *record)
137
150
xl_brin_update * xlrec = (xl_brin_update * )XLogRecGetData (record );
138
151
Buffer buffer ;
139
152
XLogRedoAction action ;
153
+ RelFileNode rnode ;
154
+ BlockNumber blkno ;
155
+
156
+ XLogRecGetBlockTag (record ,2 ,& rnode ,NULL ,& blkno );
157
+ ptrack_add_block_redo (rnode ,blkno );
140
158
141
159
/* First remove the old tuple */
142
160
action = XLogReadBufferForRedo (record ,2 ,& buffer );
161
+
143
162
if (action == BLK_NEEDS_REDO )
144
163
{
145
164
Page page ;
@@ -174,9 +193,15 @@ brin_xlog_samepage_update(XLogReaderState *record)
174
193
xl_brin_samepage_update * xlrec ;
175
194
Buffer buffer ;
176
195
XLogRedoAction action ;
196
+ RelFileNode rnode ;
197
+ BlockNumber blkno ;
198
+
199
+ XLogRecGetBlockTag (record ,0 ,& rnode ,NULL ,& blkno );
200
+ ptrack_add_block_redo (rnode ,blkno );
177
201
178
202
xlrec = (xl_brin_samepage_update * )XLogRecGetData (record );
179
203
action = XLogReadBufferForRedo (record ,0 ,& buffer );
204
+
180
205
if (action == BLK_NEEDS_REDO )
181
206
{
182
207
Size tuplen ;
@@ -220,14 +245,21 @@ brin_xlog_revmap_extend(XLogReaderState *record)
220
245
Page page ;
221
246
BlockNumber targetBlk ;
222
247
XLogRedoAction action ;
248
+ RelFileNode rnode ;
249
+ BlockNumber blkno ;
223
250
224
251
xlrec = (xl_brin_revmap_extend * )XLogRecGetData (record );
225
252
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
+
227
258
Assert (xlrec -> targetBlk == targetBlk );
228
259
229
260
/* Update the metapage */
230
261
action = XLogReadBufferForRedo (record ,0 ,& metabuf );
262
+
231
263
if (action == BLK_NEEDS_REDO )
232
264
{
233
265
Page metapg ;