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
