From f95d53eded55ecbf037f6416ced6af29a2c3caca Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 11 May 2022 11:11:44 +0530 Subject: Fix the logical replication timeout during large transactions. The problem is that we don't send keep-alive messages for a long time while processing large transactions during logical replication where we don't send any data of such transactions. This can happen when the table modified in the transaction is not published or because all the changes got filtered. We do try to send the keep_alive if necessary at the end of the transaction (via WalSndWriteData()) but by that time the subscriber-side can timeout and exit. To fix this we try to send the keepalive message if required after processing certain threshold of changes. Reported-by: Fabrice Chapuis Author: Wang wei and Amit Kapila Reviewed By: Masahiko Sawada, Euler Taveira, Hou Zhijie, Hayato Kuroda Backpatch-through: 10 Discussion: https://postgr.es/m/CAA5-nLARN7-3SLU_QUxfy510pmrYK6JJb=bk3hcgemAM_pAv+w@mail.gmail.com --- src/include/replication/logical.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/include/replication/logical.h') diff --git a/src/include/replication/logical.h b/src/include/replication/logical.h index a6ef16ad5b1..edadacd5893 100644 --- a/src/include/replication/logical.h +++ b/src/include/replication/logical.h @@ -107,6 +107,8 @@ typedef struct LogicalDecodingContext bool prepared_write; XLogRecPtr write_location; TransactionId write_xid; + /* Are we processing the end LSN of a transaction? */ + bool end_xact; } LogicalDecodingContext; -- cgit v1.2.3