Re: [PATCH] OAuth: fix performance bug with stuck multiplexer events
Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
From: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
To: Jacob Champion <jacob.champion@enterprisedb.com>
Cc: Thomas Munro <thomas.munro@gmail.com>, PostgreSQL Hackers
<pgsql-hackers@lists.postgresql.org>, Daniel Gustafsson
<daniel@yesql.se>, Peter Eisentraut <peter@eisentraut.org>
Date: 2025-08-08T20:07:42Z
Lists: pgsql-hackers
Jacob Champion <jacob.champion@enterprisedb.com> writes:
> On Thu, Aug 7, 2025 at 9:35 AM Dagfinn Ilmari Mannsåker
> <ilmari@ilmari.org> wrote:
>> I haven't read the meat of the patch, but I have some comments on the
>> tests:
>
> Thanks for the review!
>
>> > +IPC::Run::run ['oauth_tests'],
>> > + '>', IPC::Run::new_chunker, sub { print {$out} $_[0] },
>> > + '2>', IPC::Run::new_chunker, sub { print {$err} $_[0] }
>> > + or die "oauth_tests returned $?";
>>
>> We've recently switched to using fat commas (=>) between options and
>> their arguments, and that includes the file redirections in IPC::Run.
>> Although not semantically meaningful, I'd also be tempted to put parens
>> around the argument list for each redirect, so it's clear that they go
>> together.
>
> I have two concerns:
> - If I don't put parentheses around the list, the fat comma is
> actively misleading.
> - As far as I can tell, IPC::Run neither documents nor tests the
> ability to pass a list here. (But the tests are a bit of a maze, so
> please correct me if there is one.) My fear is that I'll be coupling
> against an implementation detail if I write it that way.
> So I'm leaning towards keeping it as-is, unless you know of a reason
> that the list syntax is guaranteed to work, with the understanding
> that it does diverge from what you authored in 19c6e92b1. But I don't
> think any of those examples use filters, so I don't feel too bad about
> the difference yet?
When I said "not semantically meaningful" I meant that the parens don't
change what gets passed to the function. In Perl, parens only serve to
override precedence and as visual grouping, they don't affect the
structure of the data at all.
To demonstrate:
$ perl -MJSON::PP=encode_json -E 'say encode_json([1, 2, 3])'
[1,2,3]
$ perl -MJSON::PP=encode_json -E 'say encode_json([1 => (2, 3)])'
[1,2,3]
>> Also, indirect object syntax (print {$fh} ...) is ugly and
>> old-fashioned, it's nicer to call it as a method on the filehandle.
>
> That is much nicer; I'll do that.
>
>> As for the C TAP tests, there's already a bunch of TAP-outputting
>> infrastructure in pg_regress.c. Would it make sense to factor that out
>> into a common library?
>
> Maybe if we got to rule-of-three, but I'd rather not make either
> implementation compromise for the sake of the other. IMO, this is a
> situation where a bad abstraction would be much costlier than the
> duplication: TAP is lightweight, and I think the needs of a unit test
> suite and the needs of a characterization test collector are very
> different.
Fair enough.
> --Jacob
- ilmari
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
oauth: Always link with -lm for floor()
- e76738e59790 18.0 landed
- 52ecd05aeef8 19 (unreleased) landed
-
oauth: Add unit tests for multiplexer handling
- 4e1e417330d4 19 (unreleased) landed
- 1443b6c0eaa2 19 (unreleased) landed
-
oauth: Ensure unused socket registrations are removed
- 16b0c48583a5 18.0 landed
- 3d9c03429a82 19 (unreleased) landed
-
oauth: Remove expired timers from the multiplexer
- e507e08acf63 18.0 landed
- 1749a12f0d20 19 (unreleased) landed
-
oauth: Remove stale events from the kqueue multiplexer
- ff181d1f876f 18.0 landed
- ff5b0824b3b0 19 (unreleased) landed
-
oauth: Track total call count during a client flow
- 41aac1483a6c 18.0 landed
- 3e311664e497 19 (unreleased) landed