On Thu, May 27, 2021 at 10:05 PM Paul Guo <paul...@gmail.com> wrote: > > Also note that ForwardSyncRequest() does wake up the checkpointer if > it thinks the requests in shared memory are "too full", but does not > wake up when the request is actually full. This does not seem to be > reasonable. > See below code in ForwardSyncRequest > > /* If queue is more than half full, nudge the checkpointer to empty it */ > too_full = (CheckpointerShmem->num_requests >= > CheckpointerShmem->max_requests / 2); > > /* ... but not till after we release the lock */ > if (too_full && ProcGlobal->checkpointerLatch) > SetLatch(ProcGlobal->checkpointerLatch);
Ah indeed. Well it means that the checkpointer it woken up early enough to avoid reaching that point. I'm not sure that it's actually possible to reach a point where the list if full and the checkpointer is sitting idle.