Fix memory accumulation in pg_sync_replication_slots() during retries. Unlike the slotsync worker, whose retry cycles are separated by transaction boundaries, pg_sync_replication_slots() retries within a single SQL function call. Per-cycle allocations for slot names, plugin names, database names, and auxiliary list containers get accumulated across retries until the function returned. Memory growth is proportional to the number of retries and remote slots, and the function may wait an extended period between cycles when slots are slow to persist.
Fix by running each retry cycle in a short-lived memory context (sync_retry_ctx) that is reset before the next attempt. Additionally, release tuple slots created with MakeSingleTupleTableSlot() before clearing the walreceiver result. Author: Xuneng Zhou <[email protected]> Reviewed-by: Zhijie Hou <[email protected]> Reviewed-by: shveta malik <[email protected]> Reviewed-by: Amit Kapila <[email protected]> Discussion: https://postgr.es/m/CABPTF7VVPxgfYyr8Kyi=+jacjckq6npniv9erthboj2hmn0...@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/490259d0729007c40aff1f5255550154fb7afcbc Modified Files -------------- src/backend/replication/logical/slotsync.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-)
