From: | Nathan Bossart <nathandbossart(at)gmail(dot)com> |
---|---|
To: | Noah Misch <noah(at)leadboat(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Fix early elog(FATAL) |
Date: | 2024-12-12 16:07:00 |
Message-ID: | Z1sKJBE6-Lo08PEt@nathan |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, Dec 11, 2024 at 07:34:14PM -0800, Noah Misch wrote:
> On Tue, Dec 10, 2024 at 04:18:19PM -0600, Nathan Bossart wrote:
>> FWIW I'd probably vote for option 1. That keeps the initialization of the
>> globals together, reduces the call sites, and fixes the bug. I'd worry a
>> little about moving the MyProcPid assignments out of that function without
>> adding a bunch of commentary to explain why.
>
> Can you say more about that? A comment about MyProcPid could say "fork() is
> the one thing that changes the getpid() return value". To me, the things
> InitProcessGlobals() sets are all different. MyProcPid can be set without
> elog(ERROR) and gets invalidated at fork(). The others reasonably could
> elog(ERROR). (They currently don't.) The random state could have a different
> lifecycle. If we had a builtin pooler that reused processes, we'd
> reinitialize random state at each process reuse, not at each fork(). So I see
> the grouping of (MyProcPid, MyStartTimestamp, random seed) as mostly an
> accident of history.
Fair enough. I suppose part of my hesitation stems from expecting hackers
to be more likely to remember to call InitProcessGlobals() than to
initialize MyProcPid. But given your change requires initializing
MyProcPid in exactly 2 places, and there are unlikely to be more in the
near future, I might be overthinking it.
--
nathan
From | Date | Subject | |
---|---|---|---|
Next Message | Nathan Bossart | 2024-12-12 16:15:18 | Re: Track the amount of time waiting due to cost_delay |
Previous Message | Sami Imseih | 2024-12-12 15:56:34 | Controlling the usage of a user-defined cast |