On 2021-Aug-18, Bossart, Nathan wrote:
> I'll add it after XLogBackgroundFlush().
I was wondering which would be better: before or after.
XLogBackgroundFlush would do it anyway, so if you do it after then it's
not clear to me that it'd do anything (I mean we should not do any new
calls of NotifySegmentsReadyForArchive and just rely on the one in
XLogBackgroundFlush -> XLogWrite).
The advantage of doing NotifySegmentsReadyForArchive before
XLogBackgroundFlush is that the files would be created sooner, so the
archiver can be working in parallel while walwriter does its other
thing; then we'd reach the NotifySegmentsReadyForArchive in
XLogBackgroundFlush and it'd find nothing to do most of the time, which
is just fine.
> I think we'll also want to set the WAL writer's latch in case it is
> hibernating.
Yeah. (That's another advantage of doing it in walwriter rather than
bgwriter: we don't publish bgwriter's latch anywhere AFAICS).
> Another approach could be to keep the NotifySegmentsReadyForArchive()
> call in XLogInsertRecord(), but only call it if the flush pointer is
> beyond the boundary we just registered. Or we could only set the
> latch in XLogInsertRecord() if we detect that the flush pointer has
> advanced.
Hmm.
--
Álvaro Herrera 39°49'30"S 73°17'W — https://www.EnterpriseDB.com/