Re: Refactoring postmaster's code to cleanup after child exit

Michael Banck <mbanck@gmx.net>

From: Michael Banck <mbanck@gmx.net>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>, Thomas Munro <thomas.munro@gmail.com>, Andres Freund <andres@anarazel.de>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2026-02-15T08:11:45Z
Lists: pgsql-hackers

Attachments

Hi,

sorry to bring this old thread back to light.

On Tue, Oct 08, 2024 at 12:55:00AM +0300, Heikki Linnakangas wrote:
> In the meanwhile, here is a one more version of the test patches, with a
> SKIP that checks that IO::Socket::UNIX works.

I've only realized recently, but those postmaster tap tests have been
failing during Debian package build (see e.g. [0]) on hurd-i386/amd64 with

|send: Cannot determine peer address at t/002_connection_limits.pl line 136.

This wasn't widely noticed because both architectures are on the (not
small) list of arches where test suite failures are ignored[1] but I
think nowadays it is the only (or one of the very few) remaining
issue(s). I encountered it now when I tried to turn on
--enable-tap-tests on fruitcrow.

The Perl code run through strace shows it runs connect(), then
getpeername() and then sendto(), as seen here[2]. However, getpeername()
on Unix sockets is not implemented on the Hurd yet[3] (granted, FSVO
"yet", the issue is 20 years old). I've opened an issue in Perl asking
to work around this here: https://github.com/Perl/perl5/issues/24195

Would something like the attached be acceptable in the interim to have
this test be skipped on the Hurd as well?


Michael

[0] https://buildd.debian.org/status/fetch.php?pkg=postgresql-18&arch=hurd-amd64&ver=18.2-1&stamp=1770913648&raw=0
[1] https://salsa.debian.org/postgresql/postgresql-common/-/blob/master/server/postgresql.mk?ref_type=heads#L164
[2] https://github.com/Perl/perl5/blob/blead/dist/IO/lib/IO/Socket.pm#L294
[3] http://savannah.gnu.org/bugs/?func=detailitem&item_id=12434

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix test name and username used in failed connection attempts

  2. tests: Don't fail due to high default timeout in postmaster/003_start_stop

  3. tests: Fix race condition in postmaster/002_connection_limits

  4. Pass MyPMChildSlot as an explicit argument to child process

  5. Assign a child slot to every postmaster child process

  6. Kill dead-end children when there's nothing else left

  7. Replace postmaster.c's own backend type codes with BackendType

  8. Use an shmem_exit callback to remove backend from PMChildFlags on exit

  9. Add test for dead-end backends

  10. Add test for connection limits

  11. Fix garbled process name on backend crash

  12. Consolidate postmaster code to launch background processes

  13. Fix comment on processes being kept over a restart

  14. Refactor code to handle death of a backend or bgworker in postmaster

  15. Make BackgroundWorkerList doubly-linked

  16. Minor refactoring of assign_backendlist_entry()

  17. Fix outdated comment; all running bgworkers are in BackendList

  18. Allow building with MSVC and Strawberry perl

  19. Fix rare failure in LDAP tests.

  20. Allow notifications to bgworkers without database connections.