commit 908f3bb511450f05980ba01d42c909cc9ef8007a Author: Daniel Gustafsson Date: Thu Mar 14 14:32:15 2024 +0100 Code review hackery diff --git a/src/backend/postmaster/bgwriter.c b/src/backend/postmaster/bgwriter.c index 7d9ad9046f..115204f708 100644 --- a/src/backend/postmaster/bgwriter.c +++ b/src/backend/postmaster/bgwriter.c @@ -267,7 +267,7 @@ BackgroundWriterMain(void) { TimestampTz timeout = 0; TimestampTz now = GetCurrentTimestamp(); - XLogRecPtr current_lsn = GetLastImportantRecPtr(); + XLogRecPtr current_lsn; timeout = TimestampTzPlusMilliseconds(last_snapshot_ts, LOG_SNAPSHOT_INTERVAL_MS); @@ -279,12 +279,15 @@ BackgroundWriterMain(void) * start of a record, whereas last_snapshot_lsn points just past * the end of the record. */ - if (now >= timeout && - last_snapshot_lsn <= current_lsn) + if (now >= timeout) { - last_snapshot_lsn = LogStandbySnapshot(); - last_snapshot_ts = now; - pgstat_wal_update_lsntimeline(now, current_lsn); + current_lsn = GetLastImportantRecPtr(); + if (last_snapshot_lsn <= current_lsn) + { + last_snapshot_lsn = LogStandbySnapshot(); + last_snapshot_ts = now; + pgstat_wal_update_lsntimeline(now, current_lsn); + } } } diff --git a/src/backend/utils/activity/pgstat_wal.c b/src/backend/utils/activity/pgstat_wal.c index 0a7b545fd2..90afec580b 100644 --- a/src/backend/utils/activity/pgstat_wal.c +++ b/src/backend/utils/activity/pgstat_wal.c @@ -238,7 +238,7 @@ lsntime_merge_target(LSNTimeline *timeline) } /* Should not be reachable or we are out of space */ - Assert(false); + return -1; } /* @@ -280,7 +280,12 @@ lsntime_insert(LSNTimeline *timeline, TimestampTz time, * down by one and insert the passed-in LSNTime at array index 0. */ merge_target = lsntime_merge_target(timeline); - Assert(merge_target >= 0 && merge_target < timeline->length); + if (merge_target < 0) + { + elog(WARNING, "unable to insert LSN in LSN timeline, merge failed"); + return; + } + Assert(merge_target < timeline->length); lsntime_merge(&timeline->data[merge_target], &timeline->data[merge_target - 1]); memmove(&timeline->data[1], &timeline->data[0], sizeof(LSNTime) * merge_target - 1); timeline->data[0] = entrant;