Missing initialization steps in --check and --single modes

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Missing initialization steps in --check and --single modes
Date: 2024-12-16 23:55:11
Message-ID: 2081982.1734393311@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I was experimenting today with running initdb under low-resource
situations (per nearby thread about OpenBSD), and I realized that
"postgres --check" does not provide an adequate check on whether
the specified number of semaphores can be created. That's because
it fails to check whether we can still open a reasonable number of
files after we've opened the semaphores, and on platforms where
semaphores eat file descriptors, that matters.

The lack of field complaints about this is probably because there
are no common platforms on which we choose a semaphore implementation
that consumes FDs. (I ran into it while checking whether modern
NetBSD supports unnamed POSIX semaphores. Seems it does, but it
uses an FD for each one, and that results in initdb overestimating
what max_connections it can choose.)

Nonetheless, this seems not totally academic, because the same code
path is also used in --boot mode. In that mode, our failure to call
set_max_safe_fds() will result in fd.c using a conservatively tiny
limit on the number of FDs it can have open, which probably has some
small penalty on the runtime of initdb.

While comparing bootstrap.c to postmaster.c, I also noticed that
bootstrap mode is failing to call set_stack_base(). That means that
our checks for stack overflow are inoperative in bootstrap mode,
which doesn't seem great.

The same omissions appear in PostgresSingleUserMain, meaning that
--single mode also operates with few FDs and no stack depth
protection. That's considerably less than great.

Hence I propose the attached. I'm leaning towards not back-patching
given that these issues seem pretty minor ... but maybe for --single
mode they're not so minor?

regards, tom lane

Attachment Content-Type Size
v1-add-missing-initialization-steps.patch text/x-diff 1.7 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Melanie Plageman 2024-12-17 00:14:28 Re: Count and log pages set all-frozen by vacuum
Previous Message Noah Misch 2024-12-16 23:43:32 Re: WARNING: missing lock on database "postgres" (OID 5) @ TID (0,4)