Re: Infinite loop in XLogPageRead() on standby
Alexander Kukushkin <cyberdemn@gmail.com>
From: Alexander Kukushkin <cyberdemn@gmail.com>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: michael@paquier.xyz, pgsql-hackers@postgresql.org, thomas.munro@gmail.com
Date: 2024-02-29T16:44:25Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix header check for continuation records where standbys could be stuck
- 0f0431e919f4 13.19 landed
- a2d4f806c4b9 14.16 landed
- 26554faccc97 15.11 landed
- 2c2e1d4f42c0 16.7 landed
- e6767c0ed16f 17.3 landed
- 6cf1647d87e7 18.0 landed
-
Move routines to manipulate WAL into PostgreSQL::Test::Cluster
- c9e50ce2a044 13.19 landed
- 50406b15540c 14.16 landed
- e5d113057d5f 15.11 landed
- 9420f9bb61e6 16.7 landed
- 149ed87e22ce 17.3 landed
- 32a18cc0a73d 18.0 landed
-
Prevent archive recovery from scanning non-existent WAL files.
- 4bd0ad9e44be 13.0 cited
-
Fix scenario where streaming standby gets stuck at a continuation record.
- 066871980183 11.0 cited
Hi Kyotaro, On Thu, 29 Feb 2024 at 08:18, Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote: In the first place, it's important to note that we do not guarantee > that an async standby can always switch its replication connection to > the old primary or another sibling standby. This is due to the > variations in replication lag among standbys. pg_rewind is required to > adjust such discrepancies. > Sure, I know. But in this case the async standby received and flushed absolutely the same amount of WAL as the promoted one. > > I might be overlooking something, but I don't understand how this > occurs without purposefully tweaking WAL files. The repro script > pushes an incomplete WAL file to the archive as a non-partial > segment. This shouldn't happen in the real world. > It easily happens if the primary crashed and standbys didn't receive another page with continuation record. In the repro script, the replication connection of the second standby > is switched from the old primary to the first standby after its > promotion. After the switching, replication is expected to continue > from the beginning of the last replayed segment. Well, maybe, but apparently the standby is busy trying to decode a record that spans multiple pages, and it is just infinitely waiting for the next page to arrive. Also, the restart "fixes" the problem, because indeed it is reading the file from the beginning. > But with the script, > the second standby copies the intentionally broken file, which differs > from the data that should be received via streaming. As I already said, this is a simple way to emulate the primary crash while standbys receiving WAL. It could easily happen that the record spans on multiple pages is not fully received and flushed. -- Regards, -- Alexander Kukushkin