@@ -261,13 +261,29 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync, bool
261261 {
262262 XLogRecPtr ptrack_lsn = get_last_ptrack_lsn (backup_conn , nodeInfo );
263263
264- if (ptrack_lsn > prev_backup -> start_lsn || ptrack_lsn == InvalidXLogRecPtr )
264+ if (nodeInfo -> ptrack_version_num < 20 )
265265 {
266- elog (ERROR , "LSN from ptrack_control %X/%X differs from Start LSN of previous backup %X/%X.\n"
267- "Create new full backup before an incremental one." ,
268- (uint32 ) (ptrack_lsn >> 32 ), (uint32 ) (ptrack_lsn ),
269- (uint32 ) (prev_backup -> start_lsn >> 32 ),
270- (uint32 ) (prev_backup -> start_lsn ));
266+ // backward compatibility kludge: use Stop LSN for ptrack 1.x,
267+ if (ptrack_lsn > prev_backup -> stop_lsn || ptrack_lsn == InvalidXLogRecPtr )
268+ {
269+ elog (ERROR , "LSN from ptrack_control %X/%X differs from Stop LSN of previous backup %X/%X.\n"
270+ "Create new full backup before an incremental one." ,
271+ (uint32 ) (ptrack_lsn >> 32 ), (uint32 ) (ptrack_lsn ),
272+ (uint32 ) (prev_backup -> stop_lsn >> 32 ),
273+ (uint32 ) (prev_backup -> stop_lsn ));
274+ }
275+ }
276+ else
277+ {
278+ // new ptrack is more robust and checks Start LSN
279+ if (ptrack_lsn > prev_backup -> start_lsn || ptrack_lsn == InvalidXLogRecPtr )
280+ {
281+ elog (ERROR , "LSN from ptrack_control %X/%X is greater than Start LSN of previous backup %X/%X.\n"
282+ "Create new full backup before an incremental one." ,
283+ (uint32 ) (ptrack_lsn >> 32 ), (uint32 ) (ptrack_lsn ),
284+ (uint32 ) (prev_backup -> start_lsn >> 32 ),
285+ (uint32 ) (prev_backup -> start_lsn ));
286+ }
271287 }
272288 }
273289
0 commit comments