[BUG] "FailedAssertion" reported when streaming in logical replication

tanghy.fnst@fujitsu.com <tanghy.fnst@fujitsu.com>

From: "tanghy.fnst@fujitsu.com" <tanghy.fnst@fujitsu.com>
To: Dilip Kumar <dilipbalaut@gmail.com>, Amit Kapila <amit.kapila16@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-04-26T07:15:34Z
Lists: pgsql-hackers

Attachments

Hi 

I think I may found a bug when using streaming in logical replication. Could anyone please take a look at this?

Here's what I did to produce the problem.
I set logical_decoding_work_mem and created multiple publications at publisher, created multiple subscriptions with "streaming = on" at subscriber.
However, an assertion failed at publisher when I COMMIT and ROLLBACK multiple transactions at the same time.

The log reported a FailedAssertion:
TRAP: FailedAssertion("txn->size == 0", File: "reorderbuffer.c", Line: 3465, PID: 911730)

The problem happens both in synchronous mode and asynchronous mode. When there are only one or two publications, It doesn't seem to happen. (In my case, there are 8 publications and the failure always happened). 

The scripts and the log are attached. It took me about 4 minutes to run the script on my machine.
Please contact me if you need more specific info for the problem.

Regards
Tang

Commits

  1. Fix the bugs in selecting the transaction for streaming.