Fix CheckPointReplicationSlots() with max_replication_slots == 0
Alexander Korotkov <akorotkov@postgresql.org>
Fix CheckPointReplicationSlots() with max_replication_slots == 0 ca307d5cec90 made CheckPointReplicationSlots() unconditionally call ReplicationSlotsComputeRequiredLSN(). It causes an assertion trap when max_replication_slots equals 0. This commit makes CheckPointReplicationSlots() call ReplicationSlotsComputeRequiredLSN() only when at least one slot gets its last_saved_restart_lsn updated. That avoids an assert trap and also saves some cycles when no one slot has last_saved_restart_lsn updated. Based on ideas from Dilip Kumar <dilipbalaut@gmail.com> and Hayato Kuroda <kuroda.hayato@fujitsu.com>. Reported-by: Zhijie Hou <houzj.fnst@fujitsu.com> Discussion: https://postgr.es/m/OS0PR01MB5716BB506AF934376FF3A8BB947BA%40OS0PR01MB5716.jpnprd01.prod.outlook.com
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/replication/slot.c | modified | +12 −3 |
Discussion
- Slot's restart_lsn may point to removed WAL segment after hard restart unexpectedly 85 messages · 2024-10-31 → 2025-07-18