Skip to content

Commit 6577c9b

Browse files
committed
PGPRO-427: Use xlogreader API to locate right start LSN
1 parent 6426295 commit 6577c9b

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

src/parsexlog.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ typedef struct XLogPageReadPrivate
105105
/* An argument for a thread function */
106106
typedef 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

Comments
 (0)