Tom Lane napsal(a):
What seems to have happened is that the bgwriter didn't get as far as
the first line of BackgroundWriterMain before the client backend tried
to issue a checkpoint request.
This is obviously a pretty minor issue, but it still seems worth fixing.
We could either try to make sure that BgWriterShmem->bgwriter_pid gets
set before the postmaster "opens its doors" for clients, or allow
RequestCheckpoint() to wait a little bit if needed for the bgwriter
to come ready. The latter seems like a more localized change.
I think, postmaster should wait until bgwriter is not up.
Another strange thing in RequestCheckpoint() is following code:
00926 else if (kill(BgWriterShmem->bgwriter_pid, SIGINT) != 0)
00927 {
00928 if (ntries >= 20) /* max wait 2.0 sec */
00929 {
00930 elog((flags & CHECKPOINT_WAIT) ? ERROR : LOG,
00931 "could not signal for checkpoint: %m");
00932 break;
00933 }
00934 }
By my opinion there is not reason to retry kill call, because it fails only in
situation if process does not exist or caller does not have permission to send a
signal. If one of these situation happens it means that bgwriter is dead or
memory is corrupted. Maybe it is time for panic (or fatal)?
Zdenek
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers