From: | shveta malik <shveta(dot)malik(at)gmail(dot)com> |
---|---|
To: | "Zhijie Hou (Fujitsu)" <houzj(dot)fnst(at)fujitsu(dot)com> |
Cc: | Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, vignesh C <vignesh21(at)gmail(dot)com>, Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>, shveta malik <shveta(dot)malik(at)gmail(dot)com> |
Subject: | Re: Conflict detection for update_deleted in logical replication |
Date: | 2025-08-12 08:36:30 |
Message-ID: | CAJpy0uB4235JBVf3Yehjtcf=W2Keba+TpPwHvqhJevFn7WMfJQ@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Mon, Aug 11, 2025 at 2:40 PM Zhijie Hou (Fujitsu)
<houzj(dot)fnst(at)fujitsu(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2025-08-12 08:51:30 | Re: Conflict detection for update_deleted in logical replication |
Previous Message | Shlok Kyal | 2025-08-12 08:26:14 | Re: POC: enable logical decoding when wal_level = 'replica' without a server restart |