Failing assertion in predicate.c

Started by Yurii Rashkovskiiabout 1 year ago2 messages
#1Yurii Rashkovskii
yrashk@omnigres.com

Hi pg-hackers,

I am encountering an assertion failure in predicate.c when running a high
volume of short serializable transactions. The error occurs during stress
testing with many concurrent connections.

I have replicated this issue on two separate macOS M1 systems, but I have
not been able to reproduce it on Linux. The issue arises in both PostgreSQL
16 and 17. Interestingly, introducing a delay of just 1 ms between
statements seems to prevent the assertion from failing.

The specific failure I encounter is:

```
TRAP: failed Assert("TransactionIdIsValid(tailXid)"), File: "predicate.c",
Line: 885, PID: 1350
```

For anyone interested, I have created a reproduction program available
here: https://github.com/yrashk/pg-predicate-tailxid-assertion-issue. The
program establishes a connection pool and issues simple INSERT statements,
each wrapped in its own serializable transaction.

I would appreciate any insights into this issue or potential steps for
further debugging.

--
Founder at Omnigres
https://omnigres.com

#2Andrew Bille
andrewbille@gmail.com
In reply to: Yurii Rashkovskii (#1)
Re: Failing assertion in predicate.c

Hi, Yurii!

Please look at the bug report, I filed yesterday almost simultaneously with
you:
/messages/by-id/18658-7dab125ec688c70b@postgresql.org

Thanks!

On Thu, Oct 17, 2024 at 12:49 PM Yurii Rashkovskii <yrashk@omnigres.com>
wrote:

Show quoted text

Hi pg-hackers,

I am encountering an assertion failure in predicate.c when running a high
volume of short serializable transactions. The error occurs during stress
testing with many concurrent connections.

I have replicated this issue on two separate macOS M1 systems, but I have
not been able to reproduce it on Linux. The issue arises in both PostgreSQL
16 and 17. Interestingly, introducing a delay of just 1 ms between
statements seems to prevent the assertion from failing.

The specific failure I encounter is:

```
TRAP: failed Assert("TransactionIdIsValid(tailXid)"), File: "predicate.c",
Line: 885, PID: 1350
```

For anyone interested, I have created a reproduction program available
here: https://github.com/yrashk/pg-predicate-tailxid-assertion-issue. The
program establishes a connection pool and issues simple INSERT statements,
each wrapped in its own serializable transaction.

I would appreciate any insights into this issue or potential steps for
further debugging.

--
Founder at Omnigres
https://omnigres.com