@@ -105,6 +105,7 @@ typedef struct XLogPageReadPrivate
105105/* An argument for a thread function */
106106typedef struct
107107{
108+ int thread_num ;
108109 XLogPageReadPrivate private_data ;
109110
110111 XLogRecPtr startpoint ;
@@ -148,6 +149,14 @@ doExtractPageMap(void *arg)
148149 if (xlogreader == NULL )
149150 elog (ERROR , "out of memory" );
150151
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+
151160 do
152161 {
153162 XLogRecord * record ;
@@ -180,7 +189,13 @@ doExtractPageMap(void *arg)
180189 XLogSegNoOffsetToRecPtr (extract_arg -> private_data .xlogsegno , 0 ,
181190 extract_arg -> startpoint );
182191 /* 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 ));
184199
185200 continue ;
186201 }
@@ -266,6 +281,7 @@ extractPageMap(const char *archivedir, XLogRecPtr startpoint, TimeLineID tli,
266281 for (i = 0 ; i < num_threads ; i ++ )
267282 {
268283 InitXLogPageRead (& thread_args [i ].private_data , archivedir , tli , false);
284+ thread_args [i ].thread_num = i ;
269285 thread_args [i ].private_data .manual_switch = true;
270286
271287 thread_args [i ].startpoint = startpoint ;
0 commit comments