Minimal fix for WAIT FOR ... MODE 'standby_flush'

The investigation into the negative test performance impact of 7e8aeb9e48
lead to discovering that there are a few issues with WAIT FOR.

This commit is just a minimal fix to prevent hangs in standby_flush mode, due
to WAIT FOR ... 'standby_flush' seeing a 0 LSN if a newly started walreceiver
does not receive any writes, because the stanby is already caught up.

There are several other issues and this is isn't necessarily the best fix. But
this way we get the hangs out of the way.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/zqbppucpmkeqecfy4s5kscnru4tbk6khp3ozqz6ad2zijz354k@w4bdf4z3wqoz
This commit is contained in:
Andres Freund 2026-04-07 09:11:07 -04:00
parent 8fb95a8ab6
commit 29e7dbf5e4
2 changed files with 1 additions and 2 deletions

View file

@ -242,8 +242,6 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
SpinLockRelease(&walrcv->mutex);
pg_atomic_write_u64(&WalRcv->writtenUpto, 0);
/* Arrange to clean up at walreceiver exit */
on_shmem_exit(WalRcvDie, PointerGetDatum(&startpointTLI));

View file

@ -321,6 +321,7 @@ RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, const char *conninfo,
walrcv->flushedUpto = recptr;
walrcv->receivedTLI = tli;
walrcv->latestChunkStart = recptr;
pg_atomic_write_u64(&walrcv->writtenUpto, recptr);
}
walrcv->receiveStart = recptr;
walrcv->receiveStartTLI = tli;