On Friday, November 4, 2022 4:07 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > On Thu, Nov 3, 2022 at 6:36 PM houzj.f...@fujitsu.com > <houzj.f...@fujitsu.com> wrote: > > > > Thanks for the analysis and summary ! > > > > I tried to implement the above idea and here is the patch set. > > > > Few comments on v42-0001 > ===========================
Thanks for the comments. > > 10. > + winfo->shared->stream_lock_id = parallel_apply_get_unique_id(); > + winfo->shared->transaction_lock_id = parallel_apply_get_unique_id(); > > Why can't we use xid (remote_xid) for one of these and local_xid (one > generated > by parallel apply) for the other? I was a bit worried about the local_xid > because it > will be generated only after applying the first message but the patch already > seems to be waiting for it in parallel_apply_wait_for_xact_finish as seen in > the > below code. > > +void > +parallel_apply_wait_for_xact_finish(ParallelApplyWorkerShared *wshared) > +{ > + /* > + * Wait until the parallel apply worker handles the first message and > + * set the flag to true. > + */ > + parallel_apply_wait_for_in_xact(wshared, PARALLEL_TRANS_STARTED); > + > + /* Wait for the transaction lock to be released. */ > + parallel_apply_lock(wshared->transaction_lock_id); I also considered using xid for these locks, but it seems the objsubid for the shared object lock is 16bit while xid is 32 bit. So, I tried to generate a unique 16bit id here. I will think more on this and maybe I need to add some comments to explain this. Best regards, Hou zj