Hi, It looks like there's an unnecessary segment number calculation after InvalidateObsoleteReplicationSlots in CreateCheckPoint and CreateRestartPoint. Since none of RedoRecPtr, _logSegNo and wal_segment_size are changed by the slot invalidation code [1], the recalculation of _logSegNo with XLByteToSeg seems unnecessary.
I've attached a patch to fix this. [1] Assertions like the following won't fail with make check-world proving InvalidateObsoleteReplicationSlots doesn't change them at all. XLByteToSeg(RedoRecPtr, _logSegNo, wal_segment_size); KeepLogSeg(recptr, &_logSegNo); + _logSegNo_saved = _logSegNo; + RedoRecPtr_saved = RedoRecPtr; if (InvalidateObsoleteReplicationSlots(RS_INVAL_WAL_REMOVED, _logSegNo, InvalidOid, InvalidTransactionId)) { + Assert(_logSegNo_saved == _logSegNo); + Assert(RedoRecPtr_saved == RedoRecPtr); -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
v1-0001-Remove-unnecessary-seg-no-calculation-after-check.patch
Description: Binary data