Skip to content

Commit 0ac5920

Browse files
committed
bugfix: multi-timeline pagemap
1 parent 3e0c871 commit 0ac5920

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

src/parsexlog.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,6 @@ extractPageMap(const char *archivedir, uint32 wal_seg_size,
276276
timelineInfo *end_tlinfo = NULL;
277277
timelineInfo *tmp_tlinfo = NULL;
278278
XLogRecPtr prev_switchpoint = InvalidXLogRecPtr;
279-
lsnInterval *wal_interval = NULL;
280279

281280
/* We must find TLI information about final timeline (t3 in example) */
282281
for (i = 0; i < parray_num(tli_list); i++)
@@ -298,7 +297,7 @@ extractPageMap(const char *archivedir, uint32 wal_seg_size,
298297
tmp_tlinfo = end_tlinfo;
299298
while (tmp_tlinfo)
300299
{
301-
wal_interval = pgut_malloc(sizeof(lsnInterval));
300+
lsnInterval *wal_interval = pgut_malloc(sizeof(lsnInterval));
302301
wal_interval->tli = tmp_tlinfo->tli;
303302

304303
if (tmp_tlinfo->tli == end_tli)
@@ -326,25 +325,25 @@ extractPageMap(const char *archivedir, uint32 wal_seg_size,
326325
for (i = parray_num(interval_list) - 1; i >= 0; i--)
327326
{
328327
bool inclusive_endpoint;
329-
wal_interval = parray_get(interval_list, i);
328+
lsnInterval *tmp_interval = (lsnInterval *) parray_get(interval_list, i);
330329

331330
/* In case of replica promotion, endpoints of intermediate
332331
* timelines can be unreachable.
333332
*/
334333
inclusive_endpoint = false;
335334

336335
/* ... but not the end timeline */
337-
if (wal_interval->tli == end_tli)
336+
if (tmp_interval->tli == end_tli)
338337
inclusive_endpoint = true;
339338

340339
extract_isok = RunXLogThreads(archivedir, 0, InvalidTransactionId,
341-
InvalidXLogRecPtr, wal_interval->tli, wal_seg_size,
342-
wal_interval->begin_lsn, wal_interval->end_lsn,
340+
InvalidXLogRecPtr, tmp_interval->tli, wal_seg_size,
341+
tmp_interval->begin_lsn, tmp_interval->end_lsn,
343342
false, extractPageInfo, NULL, inclusive_endpoint);
344343
if (!extract_isok)
345344
break;
346345

347-
pg_free(wal_interval);
346+
pg_free(tmp_interval);
348347
}
349348
pg_free(interval_list);
350349
}
@@ -1064,6 +1063,12 @@ RunXLogThreads(const char *archivedir, time_t target_time,
10641063
elog(ERROR, "Invalid startpoint value %X/%X",
10651064
(uint32) (startpoint >> 32), (uint32) (startpoint));
10661065

1066+
if (process_record)
1067+
elog(LOG, "Extracting pagemap from tli %i on range from %X/%X to %X/%X",
1068+
tli,
1069+
(uint32) (startpoint >> 32), (uint32) (startpoint),
1070+
(uint32) (endpoint >> 32), (uint32) (endpoint));
1071+
10671072
if (!XLogRecPtrIsInvalid(endpoint))
10681073
{
10691074
// if (XRecOffIsNull(endpoint) && !inclusive_endpoint)

0 commit comments

Comments
 (0)