RE: Logical replication timeout problem
Wei Wang (Fujitsu) <wangw.fnst@fujitsu.com>
From: "wangw.fnst@fujitsu.com" <wangw.fnst@fujitsu.com>
To: "kuroda.hayato@fujitsu.com" <kuroda.hayato@fujitsu.com>
Cc: Fabrice Chapuis <fabrice636861@gmail.com>, Simon Riggs <simon.riggs@enterprisedb.com>, Petr Jelinek <petr.jelinek@enterprisedb.com>, "tanghy.fnst@fujitsu.com" <tanghy.fnst@fujitsu.com>, Amit Kapila <amit.kapila16@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Ajin Cherian <itsajin@gmail.com>
Date: 2022-03-02T02:06:17Z
Lists: pgsql-hackers
Attachments
- 0001-Fix-the-timeout-of-subscriber-in-long-transactions.patch (application/octet-stream) patch 0001
On Mon, Feb 28, 2022 at 6:58 PM Kuroda, Hayato/黒田 隼人 <kuroda.hayato@fujitsu.com> wrote: > Dear Wang, > > > Attached a new patch that addresses following improvements I have got > > so far as > > comments: > > 1. Consider other changes that need to be skipped(truncate, DDL and > > function calls pg_logical_emit_message). [suggestion by Ajin, Amit] > > (Add a new function SendKeepaliveIfNecessary for trying to send > > keepalive > > message.) > > 2. Set the threshold conservatively to a static value of > > 10000.[suggestion by Amit, Kuroda-San] 3. Reset sendTime in function > > WalSndUpdateProgress when send_keep_alive is false. [suggestion by > > Amit] > > Thank you for giving a good patch! I'll check more detail later, but it can be > applied my codes and passed check world. > I put some minor comments: Thanks for your comments. > ``` > + * Try to send keepalive message > ``` > > Maybe missing "a"? Fixed. Add missing "a". > ``` > + /* > + * After continuously skipping SKIPPED_CHANGES_THRESHOLD changes, try > to send a > + * keepalive message. > + */ > ``` > > This comments does not follow preferred style: > https://www.postgresql.org/docs/devel/source-format.html Fixed. Correct wrong comment style. > ``` > @@ -683,12 +683,12 @@ OutputPluginWrite(struct LogicalDecodingContext *ctx, > bool last_write) > * Update progress tracking (if supported). > */ > void > -OutputPluginUpdateProgress(struct LogicalDecodingContext *ctx) > +OutputPluginUpdateProgress(struct LogicalDecodingContext *ctx, bool > +send_keep_alive) > ``` > > This function is no longer doing just tracking. > Could you update the code comment above? Fixed. Update the comment above function OutputPluginUpdateProgress. > ``` > if (!is_publishable_relation(relation)) > return; > ``` > > I'm not sure but it seems that the function exits immediately if relation is a > sequence, view, temporary table and so on. Is it OK? Does it never happen? I did some checks to confirm this. After my confirmation, there are several situations that can cause a timeout. For example, if I insert many date into table sql_features in a long transaction, subscriber-side will time out. Although I think users should not modify these tables arbitrarily, it could happen. To be conservative, I think this use case should be addressed as well. Fixed. Invoke function SendKeepaliveIfNecessary before return. > ``` > + SendKeepaliveIfNecessary(ctx, false); > ``` > > I think a comment is needed above which clarifies sending a keepalive message. Fixed. Before invoking function SendKeepaliveIfNecessary, add the corresponding comment. Attach the new patch. [suggestion by Kuroda-San] 1. Fix the typo. 2. Improve comment style. 3. Fix missing consideration. 4. Add comments to clarifies above functions and function calls. Regards, Wang wei
Commits
-
Fix the logical replication timeout during large DDLs.
- 8c58624df462 16.0 landed
-
Fix the logical replication timeout during large transactions.
- f95d53eded55 15.0 landed
- d6da71fa8f28 14.4 landed
- 55558df23741 13.8 landed
- f832b5007c1c 12.12 landed
- 87c1dd246af8 11.17 landed
- a4015ec0375d 10.22 landed
-
Rethink the delay-checkpoint-end mechanism in the back-branches.
- 10520f434687 14.3 cited
-
Revert "Logical decoding of sequences"
- 2c7ea57e56ca 15.0 cited
-
Skip empty transactions for logical replication.
- d5a9d86d8ffc 15.0 cited
-
Allow specifying column lists for logical replication
- 923def9a533a 15.0 cited
-
Add decoding of sequences to built-in replication
- 75b1521dae1f 15.0 cited
-
Fix ABI break introduced by commit 4daa140a2f.
- 56e366f6757d 13.4 cited
-
Lag tracking for logical replication
- 024711bb5446 10.0 cited