Re: [EXTERNAL] Re: Support load balancing in libpq
Jelte Fennema-Nio <postgres@jeltef.nl>
From: Jelte Fennema <postgres@jeltef.nl>
To: Jacob Champion <jchampion@timescale.com>
Cc: Maxim Orlov <orlovmg@gmail.com>,
Jelte Fennema <Jelte.Fennema@microsoft.com>, Michael Banck <mbanck@gmx.net>,
Aleksander Alekseev <aleksander@timescale.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2023-01-13T17:10:23Z
Lists: pgsql-hackers
Attachments
- v7-0003-Make-mutexes-easier-to-use-in-libpq.patch (application/x-patch) patch v7-0003
- v7-0001-libpq-Run-pgindent-after-a9e9a9f32b3.patch (application/x-patch) patch v7-0001
- v7-0004-Share-prng-state-between-all-PGconns-in-process.patch (application/x-patch) patch v7-0004
- v7-0002-Support-load-balancing-in-libpq.patch (application/x-patch) patch v7-0002
> Just a quick single-issue review, but I agree with Maxim that having > one PRNG, seeded once, would be simpler I don't agree that it's simpler. Because now there's a mutex you have to manage, and honestly cross-platform threading in C is not simple. However, I attached two additional patches that implement this approach on top of the previous patchset. Just to make sure that this patch is not blocked on this. > with the tangible benefit that it would eliminate weird behavior on > simultaneous connections when the client isn't using OpenSSL. This is true, but still I think in practice very few people have a libpq that's compiled without OpenSSL support. > I'm guessing a simple lock on a > global PRNG would be less overhead than the per-connection > strong_random machinery, too, but I have no data to back that up. It might very well have less overhead, but neither of them should take up any significant amount of time during connection establishment. > The test seed could then be handled globally as well (envvar?) so that you > don't have to introduce a debug-only option into the connection string. Why is a debug-only envvar any better than a debug-only connection option? For now I kept the connection option approach, since to me they seem pretty much equivalent.
Commits
-
Fix pointer cast for seed calculation on 32-bit systems
- 2fe7a6df94e6 16.0 landed
-
Copy and store addrinfo in libpq-owned private memory
- 44d85ba5a336 16.0 landed
-
libpq: Use modern socket flags, if available.
- bfc9497ece01 16.0 cited