We see another occurrence of this bug with the last patch applied in 13.7. After a promotion we observe the following in the logs:
2022-05-25 00:35:38 UTC::@:[371]:PANIC: xlog flush request 10/B1FA3D88 is not satisfied --- flushed only to 7/A8000060 2022-05-25 00:35:38 UTC:172.31.26.238(38610):administrator@postgres:[23433]:ERROR: current transaction is aborted, commands ignored until end of transaction block However, The logs do not show "LOG: successfully skipped missing contrecord", therefore we know that VerifyOverwriteContrecord is not being called to invalidate the missingContrecPtr. VerifyOverwriteContrecord(xl_overwrite_contrecord *xlrec, XLogReaderState *state) { if (xlrec->overwritten_lsn != state->overwrittenRecPtr) elog(FATAL, "mismatching overwritten LSN %X/%X -> %X/%X", (uint32) (xlrec->overwritten_lsn >> 32), (uint32) xlrec->overwritten_lsn, (uint32) (state->overwrittenRecPtr >> 32), (uint32) state->overwrittenRecPtr); /* We have safely skipped the aborted record */ abortedRecPtr = InvalidXLogRecPtr; missingContrecPtr = InvalidXLogRecPtr; ereport(LOG, (errmsg("successfully skipped missing contrecord at %X/%X, overwritten at %s", (uint32) (xlrec->overwritten_lsn >> 32), (uint32) xlrec->overwritten_lsn, timestamptz_to_str(xlrec->overwrite_time)))); We think it's because VerifyOverwriteContrecord was not called which is why we see this behavior. Are there are other places where missingContrecPtr should be invalidated, such as after a successful promotion? -- Sami Imseih Amazon Web Services