@@ -105,6 +105,7 @@ typedef struct XLogPageReadPrivate
105
105
/* An argument for a thread function */
106
106
typedef struct
107
107
{
108
+ int thread_num ;
108
109
XLogPageReadPrivate private_data ;
109
110
110
111
XLogRecPtr startpoint ;
@@ -148,6 +149,14 @@ doExtractPageMap(void *arg)
148
149
if (xlogreader == NULL )
149
150
elog (ERROR , "out of memory" );
150
151
152
+ extract_arg -> startpoint = XLogFindNextRecord (xlogreader ,
153
+ extract_arg -> startpoint );
154
+
155
+ elog (VERBOSE , "Start LSN of thread %d: %X/%X" ,
156
+ extract_arg -> thread_num ,
157
+ (uint32 ) (extract_arg -> startpoint >> 32 ),
158
+ (uint32 ) (extract_arg -> startpoint ));
159
+
151
160
do
152
161
{
153
162
XLogRecord * record ;
@@ -180,7 +189,13 @@ doExtractPageMap(void *arg)
180
189
XLogSegNoOffsetToRecPtr (extract_arg -> private_data .xlogsegno , 0 ,
181
190
extract_arg -> startpoint );
182
191
/* Skip over the page header */
183
- extract_arg -> startpoint += SizeOfXLogLongPHD ;
192
+ extract_arg -> startpoint = XLogFindNextRecord (xlogreader ,
193
+ extract_arg -> startpoint );
194
+
195
+ elog (VERBOSE , "Thread %d switched to LSN %X/%X" ,
196
+ extract_arg -> thread_num ,
197
+ (uint32 ) (extract_arg -> startpoint >> 32 ),
198
+ (uint32 ) (extract_arg -> startpoint ));
184
199
185
200
continue ;
186
201
}
@@ -266,6 +281,7 @@ extractPageMap(const char *archivedir, XLogRecPtr startpoint, TimeLineID tli,
266
281
for (i = 0 ; i < num_threads ; i ++ )
267
282
{
268
283
InitXLogPageRead (& thread_args [i ].private_data , archivedir , tli , false);
284
+ thread_args [i ].thread_num = i ;
269
285
thread_args [i ].private_data .manual_switch = true;
270
286
271
287
thread_args [i ].startpoint = startpoint ;
0 commit comments