On 2021-Aug-17, Bossart, Nathan wrote:
> On 8/17/21, 2:13 PM, "alvherre@alvh.no-ip.org" <alvherre@alvh.no-ip.org> wrote:
>
> > So, why isn't it that we call Register in XLogInsertRecord, and
> > Notify in XLogWrite?
>
> We do. However, we also call NotifySegmentsReadyForArchive() in
> XLogInsertRecord() to handle the probably-unlikely scenario that the
> flush pointer has already advanced past the to-be-registered boundary.
> This ensures that the .ready files are created as soon as possible.
I see.
I have two thoughts on that. First, why not do it outside the block
that tests for crossing a segment boundary? If that's a good thing to
do, then we should do it always.
However, why do it in a WAL-producing client-connected backend? It
strikes me as a bad thing to do, because you are possibly causing delays
for client-connected backends. I suggest that we should give this task
to the WAL writer process -- say, have XLogBackgroundFlush do it.
--
Álvaro Herrera Valdivia, Chile — https://www.EnterpriseDB.com/
"All rings of power are equal,
But some rings of power are more equal than others."
(George Orwell's The Lord of the Rings)