pgsql: Make the tablesync worker's replication origin drop logic robust

From: Amit Kapila <akapila(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Make the tablesync worker's replication origin drop logic robust
Date: 2022-09-12 07:27:30
Message-ID: E1oXdqr-002YfH-Ol@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Make the tablesync worker's replication origin drop logic robust.

In commit f6c5edb8ab, we started to drop the replication origin slots
before tablesync worker exits to avoid consuming more slots than required.
We were dropping the replication origin in the same transaction where we
were marking the tablesync state as SYNCDONE. Now, if there is any error
after we have dropped the origin but before we commit the containing
transaction, the in-memory state of replication progress won't be rolled
back. Due to this, after the restart, tablesync worker can start streaming
from the wrong location and can apply the already processed transaction.

To fix this, we need to opportunistically drop the origin after marking
the tablesync state as SYNCDONE. Even, if the tablesync worker fails to
remove the replication origin before exit, the apply worker ensures to
clean it up afterward.

Reported by Tom Lane as per buildfarm.
Diagnosed-by: Masahiko Sawada
Author: Hou Zhijie
Reviewed-By: Masahiko Sawada, Amit Kapila
Discussion: https://postgr.es/m/20220714115155.GA5439@depesz.com
Discussion: https://postgr.es/m/CAD21AoAw0Oofi4kiDpJBOwpYyBBBkJj=sLUOn4Gd2GjUAKG-fw@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/88f488319bac051b874bcec87941217e25e0e126

Modified Files
--------------
src/backend/commands/subscriptioncmds.c | 25 ++++----
src/backend/replication/logical/tablesync.c | 91 ++++++++++++++++++++---------
2 files changed, 75 insertions(+), 41 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2022-09-12 08:05:01 pgsql: Use float8 datatype for percentiles in pg_walinspect stat functi
Previous Message Peter Eisentraut 2022-09-12 06:53:03 pgsql: Assorted examples of expanded type-safer palloc/pg_malloc API