Re: [PATCH] Reuse Workers and Replication Slots during Logical Replication - Mailing list pgsql-hackers
From | Amit Kapila |
---|---|
Subject | Re: [PATCH] Reuse Workers and Replication Slots during Logical Replication |
Date | |
Msg-id | CAA4eK1+9XZey1-0PENqRLZnAuLSvqEPge==EmQvryo_K2X1jzA@mail.gmail.com Whole thread Raw |
In response to | Re: [PATCH] Reuse Workers and Replication Slots during Logical Replication (Peter Smith <smithpb2250@gmail.com>) |
List | pgsql-hackers |
On Thu, Jul 20, 2023 at 8:02 AM Peter Smith <smithpb2250@gmail.com> wrote: > > On Tue, Jul 18, 2023 at 1:54 AM Melih Mutlu <m.melihmutlu@gmail.com> wrote: > > > > Hi, > > > > PFA updated patches. Rebased 0003 with minor changes. Addressed Peter's reviews for 0001 and 0002 with some small commentsbelow. > > > > Peter Smith <smithpb2250@gmail.com>, 10 Tem 2023 Pzt, 10:09 tarihinde şunu yazdı: > >> > >> 6. LogicalRepApplyLoop > >> > >> + /* > >> + * apply_dispatch() may have gone into apply_handle_commit() > >> + * which can call process_syncing_tables_for_sync. > >> + * > >> + * process_syncing_tables_for_sync decides whether the sync of > >> + * the current table is completed. If it is completed, > >> + * streaming must be already ended. So, we can break the loop. > >> + */ > >> + if (MyLogicalRepWorker->is_sync_completed) > >> + { > >> + endofstream = true; > >> + break; > >> + } > >> + > >> > >> and > >> > >> + /* > >> + * If is_sync_completed is true, this means that the tablesync > >> + * worker is done with synchronization. Streaming has already been > >> + * ended by process_syncing_tables_for_sync. We should move to the > >> + * next table if needed, or exit. > >> + */ > >> + if (MyLogicalRepWorker->is_sync_completed) > >> + endofstream = true; > >> > >> ~ > >> > >> Instead of those code fragments above assigning 'endofstream' as a > >> side-effect, would it be the same (but tidier) to just modify the > >> other "breaking" condition below: > >> > >> BEFORE: > >> /* Check if we need to exit the streaming loop. */ > >> if (endofstream) > >> break; > >> > >> AFTER: > >> /* Check if we need to exit the streaming loop. */ > >> if (endofstream || MyLogicalRepWorker->is_sync_completed) > >> break; > > > > > > First place you mentioned also breaks the infinite loop. Such an if statement is needed there with or without endofstreamassignment. > > > > I think if there is a flag to break a loop, using that flag to indicate that we should exit the loop seems more appropriateto me. I see that it would be a bit tidier without endofstream = true lines, but I feel like it would also beless readable. > > > > I don't have a strong opinion though. I'm just keeping them as they are for now, but I can change them if you disagree. > > > > I felt it was slightly sneaky to re-use the existing variable as a > convenient way to do what you want. But, I don’t feel strongly enough > on this point to debate it -- maybe see later if others have an > opinion about this. > I feel it is okay to use the existing variable 'endofstream' here but shall we have an assertion that it is a tablesync worker? > >> > >> > >> 10b. > >> All the other tablesync-related fields of this struct are named as > >> relXXX, so I wonder if is better for this to follow the same pattern. > >> e.g. 'relsync_completed' > > > > > > Aren't those start with rel because they're related to the relation that the tablesync worker is syncing? is_sync_completedis not a relation specific field. I'm okay with changing the name but feel like relsync_completed wouldbe misleading. > > My reading of the code is slightly different: Only these fields have > the prefix ‘rel’ and they are all grouped under the comment “/* Used > for initial table synchronization. */” because AFAIK only these fields > are TWS specific (not used for other kinds of workers). > > Since this new flag field is also TWS-specific, therefore IMO it > should follow the same consistent name pattern. But, if you are > unconvinced, maybe see later if others have an opinion about it. > +1 to use the prefix 'rel' here as the sync is specific to the relation. Even during apply phase, we will apply the relation-specific changes. See should_apply_changes_for_rel(). -- With Regards, Amit Kapila.
pgsql-hackers by date: