Re: Conflict detection for update_deleted in logical replication
От | shveta malik |
---|---|
Тема | Re: Conflict detection for update_deleted in logical replication |
Дата | |
Msg-id | CAJpy0uCrHtwN3wgnC26G8M4jQfaMJG3EUU3OY+zpwQPeifjmTg@mail.gmail.com обсуждение исходный текст |
Ответ на | RE: Conflict detection for update_deleted in logical replication ("Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>) |
Ответы |
Re: Conflict detection for update_deleted in logical replication
|
Список | pgsql-hackers |
On Mon, Aug 25, 2025 at 10:06 AM Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com> wrote: > > Attach the V65 patch set which addressed above and > Shveta's comments[1]. > Thank You for the patches, please find a few comments on v64 itself (I think valid on v65 as well): 1) in resume_conflict_info_retention(), shall we rewrite the code as: resume_conflict_info_retention(RetainDeadTuplesData *rdt_data) { if (TransactionIdIsValid(MyLogicalRepWorker->oldest_nonremovable_xid)) { Assert(MySubscription->retentionactive); reset_retention_data_fields(rdt_data); /* process the next phase */ process_rdt_phase_transition(rdt_data, false); return; } --rest of the code to start a transaction and update the catalog to set retentionactive=true. } When 'MyLogicalRepWorker->oldest_nonremovable_xid' is valid, it either means retention has not been stopped yet due to the inability to start a txn or it is that stage of resume (subsequent calls) where catalog has been updated and the launcher has initialized slot.xmin and assigned it to oldest_nonremovable_xid. In both cases 'retentionactive' should be true by now and thus the Assert can be put (as above). The dependency on 'wait_for_initial_xid' can be removed if we do it like this. 2) Also, I feel the code part which does txn and snapshot processing (Start, Push, Pop, Commit, launcher-wakeup) and update catalog can be shifted to one function and both stop_conflict_info_retention() and resume_conflict_info_retention() can call it. thanks Shveta
В списке pgsql-hackers по дате отправления: