On Wed, Dec 28, 2022 at 8:18 AM Hayato Kuroda (Fujitsu) <kuroda.hay...@fujitsu.com> wrote: > > Dear Amit, > > > > Firstly I considered 2, but I thought 1 seemed to be better. > > > PSA the updated patch. > > > > > > > I think even for logical replication we should check whether there is > > any pending WAL (via pq_is_send_pending()) to be sent. Otherwise, what > > is the point to send the done message? Also, the caller of > > WalSndDone() already has that check which is another reason why I > > can't see why you didn't have the same check in function WalSndDone(). > > I did not have strong opinion around here. Fixed. > > > BTW, even after fixing this, I think logical replication will behave > > differently when due to some reason (like time-delayed replication) > > send buffer gets full and walsender is not able to send data. I think > > this will be less of an issue with physical replication because there > > is a separate walreceiver process to flush the WAL which doesn't wait > > but the same is not true for logical replication. Do you have any > > thoughts on this matter? > > Yes, it may happen even if this work is done. And your analysis is correct > that > the receive buffer is rarely full in physical replication because walreceiver > immediately flush WALs. >
Okay, but what happens in the case of physical replication when synchronous_commit = remote_apply? In that case, won't it ensure that apply has also happened? If so, then shouldn't the time delay feature also cause a similar problem for physical replication as well? -- With Regards, Amit Kapila.