v0.1 draft — feedback, review, and open questions welcome #2
arkstack-dev
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
The first public draft of pg-quic is in
docs/SPEC.md.It specifies a binding of the PostgreSQL v3 wire protocol onto QUIC (RFC 9000) as transport.
No HTTP/3, no fork of v3 messages, no PostgreSQL server patch.
This thread is the entry point for review. If you have a comment that fits in one paragraph and doesn't fit an existing focused thread, post it here. For deeper discussion on specific sections, see the focused threads listed at the bottom.
What v0.1 covers
pgsql/3, noSSLRequest, no 0-RTT in v0.1 (§5)STOP_SENDINGwithPG_CANCEL, noBackendKeyData(§7)What v0.1 deliberately does not cover
NOTIFYpayload delivery).for narrowly scoped idempotent cases.
What I most want feedback on
In rough order:
Channel binding (§6.1). Bound to the QUIC TLS 1.3 end-entity
certificate. I want to know if any existing SCRAM-SHA-256-PLUS client
implementation would have trouble obtaining that certificate from a
QUIC stack's API surface (vs. a classical TLS stack). If so, that's a
portability problem worth flagging in the spec.
Cancellation race (§7). Server treats
STOP_SENDINGwithPG_CANCELas a no-op if no query is running. This resolves the racebetween query completion and cancel arrival without any feedback
mechanism. I think this is strictly better than the current
CancelRequestbehaviour, but I want to hear from people who have written cancel logic
in real drivers whether anything subtle breaks.
Stream policy (§§3.3, 3.4). Servers MUST NOT open bidirectional
streams; unidirectional streams reserved. Is there a use case I'm
foreclosing prematurely?
0-RTT rationale (§5.3). The rationale I give is resource exhaustion
against authentication state allocation, not classical replay (SCRAM
handles that). I want a sanity check from people who have implemented
0-RTT in other protocols on whether that framing is correct.
Anything I missed. Especially: interactions with poolers
(PgBouncer, pgcat), drivers (libpq, JDBC, psycopg, asyncpg, pgx),
and load balancers that today rely on
BackendKeyDatarouting forcancellation.
Scope of this project
The README states this, but worth restating here: pg-quic is intended as a vendor-neutral specification, governed independently. It is not a module of, or productization path for, any commercial driver or database product. The reason I'm flagging this up front is that I'm an active contributor in the JVM runtime space under a separate brand (Arkstack / Exeris), and I want it to be clear that this spec is not a vehicle for that work. If the spec gains traction, I'm open to moving it to a neutral org (e.g., a dedicated GitHub org with multiple maintainers) - the current location is a starting point, not a destination.
I'd welcome co-editors. If you're interested in long-term involvement, reply here or open an issue.
Focused threads
To keep this thread scannable, deeper discussion on specific topics should go in dedicated threads:
If your topic doesn't fit any of these, open a new discussion under the appropriate category rather than nesting deeply here.
What I'm not looking for in this thread
worth using and focuses on the binding.
Thanks for reading. Substantive review is more valuable to me than encouragement, so don't pull punches.
Beta Was this translation helpful? Give feedback.
All reactions