Re: Conflict detection for update_deleted in logical replication - Mailing list pgsql-hackers

From shveta malik
Subject Re: Conflict detection for update_deleted in logical replication
Date
Msg-id CAJpy0uB4235JBVf3Yehjtcf=W2Keba+TpPwHvqhJevFn7WMfJQ@mail.gmail.com
Whole thread Raw
In response to RE: Conflict detection for update_deleted in logical replication  ("Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>)
Responses Re: Conflict detection for update_deleted in logical replication
RE: Conflict detection for update_deleted in logical replication
List pgsql-hackers
On Mon, Aug 11, 2025 at 2:40 PM Zhijie Hou (Fujitsu)
<houzj.fnst@fujitsu.com> wrote:
>
> I agree. So, following the above points and some off-list discussions, I have
> revised the option to be a subscription option in the V60 version.
>

Thank You for the patches. Tried to test the new sub-level parameter,
have few comments:


1)
Let's say commit on pub is taking time and worker has stopped
retention and meanwhile we alter max_conflict_retention_duration=0,
then the expectation is immediately worker should resume retention.
But it does not happen, it does not restart conflict-retention until
the pub's commit is finished. The 'dead_tuple_retention_active'
remains 'f' till then.

postgres=# select subname, subretaindeadtuples, maxconflretention from
pg_subscription order by subname;
 subname | subretaindeadtuples | maxconflretention
---------+---------------------+-------------------
 sub1       | t                                |                 0


postgres=# select subname, worker_type, dead_tuple_retention_active
from pg_stat_subscription order by subname;
 subname | worker_type | dead_tuple_retention_active
---------+-------------+-----------------------------
 sub1      | apply              | f

I think we shall reset 'stop_conflict_info_retention' flag in
should_stop_conflict_info_retention() if maxconflretention is 0 and
the flag is originally true.


2)
postgres=# create subscription sub2  connection 'dbname=postgres
host=localhost user=shveta port=5433' publication pub2 WITH
(retain_dead_tuples = false, max_conflict_retention_duration=1000);
NOTICE:  created replication slot "sub2" on publisher
CREATE SUBSCRIPTION

Shall we give notice that max_conflict_retention_duration is ignored
as retain_dead_tuples is false.


3)
When worker stops retention, it gives message:

LOG:  logical replication worker for subscription "sub1" will stop
retaining the information for detecting conflicts
DETAIL:  The time spent advancing the non-removable transaction ID has
exceeded the maximum limit of 100 ms.

Will it be more informative if we mention the parameter name
'max_conflict_retention_duration' either in DETAIL or in additional
HINT, as then the user can easily map this behaviour to the parameter
configured.

thanks
Shveta



pgsql-hackers by date:

Previous
From: Shlok Kyal
Date:
Subject: Re: POC: enable logical decoding when wal_level = 'replica' without a server restart
Next
From: Amit Kapila
Date:
Subject: Re: Conflict detection for update_deleted in logical replication