Re: make MaxBackends available in _PG_init
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Julien Rouhaud <rjuju123@gmail.com>
Cc: Michael Paquier <michael@paquier.xyz>, Robert Haas <robertmhaas@gmail.com>, Nathan Bossart <nathandbossart@gmail.com>, "Bossart, Nathan" <bossartn@amazon.com>, Fujii Masao <masao.fujii@oss.nttdata.com>, "wangsh.fnst@fujitsu.com" <wangsh.fnst@fujitsu.com>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>, Greg Sabino Mullane <htamfids@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>
Date: 2022-03-26T17:23:16Z
Lists: pgsql-hackers
Hi, On 2022-03-26 15:22:03 +0800, Julien Rouhaud wrote: > On Fri, Mar 25, 2022 at 03:23:17PM -0700, Andres Freund wrote: > > > > I don't really understand. The issue that started this thread was bugs in > > extensions due to accessing MaxBackends before it is initialized - which the > > patch prevents. > > Well, the patch prevents accessing a 0-valued MaxBackends but doesn't do > anything to solve the original complaint. It's not like extensions won't need > to access that information during _PG_init anymore. It resolves the pretty common bug that an extension breaks once it's used via s_p_l instead of loaded on-demand because MaxBackends isn't initialized in the s_p_l case. > And indeed, any third party code that previously needed to access what > MaxBackends is supposed to store should already be using that formula, and > the new GetMaxBackends() doesn't do anything about it. It couldn't rely on MaxBackends before. It can't rely on GetMaxBackends() now. You can see why I think that what you want is unrelated to the introduction of GetMaxBackends(). If we introduce a separate hook that allows to influence things like max_connections or whatnot we'd *even more* need a way to verify whether it's legal to access MaxBackends in that moment. > So all extensions will be as broken as before, except the few that were > using MaxBackends without realizing it's 0. And if those exist (there's > actually one) they're not that broken, probably because MaxBackend is only > used to request additional shmem, with wanted value small enough so that > it's compensated by the extra 100kB shmem postgres allocates. I don't think it's rare at all. Greetings, Andres Freund
Commits
-
Add a new shmem_request_hook hook.
- 4f2400cb3f10 15.0 landed
-
Remove non-functional code for unloading loadable modules.
- ab02d702ef08 15.0 landed
-
Fix misleading comments about background worker registration.
- 701d918a426b 15.0 landed
-
Revert the addition of GetMaxBackends() and related stuff.
- 7fc0e7de9fb8 15.0 landed
-
Fix typo in multixact.c
- 0147fc7c8c92 15.0 landed
-
Reduce more the number of calls to GetMaxBackends()
- 4567596316d1 15.0 landed
-
Remove MaxBackends variable in favor of GetMaxBackends() function.
- aa64f23b0292 15.0 landed
-
Fix comments about bgworker registration before MaxBackends initialization
- 5ecd0183fb6a 15.0 landed
-
Fix bogus assertion in BootstrapModeMain().
- e12694523e7e 15.0 cited
-
Make sure MaxBackends is always set
- dfbba2c86cc8 9.3.0 cited