Skip to content

v0.19.0

Choose a tag to compare

@rustyconover rustyconover released this 23 Jul 15:57
· 151 commits to main since this release

Fixed

Cross-catalog function dispatch over HTTP. Two catalogs served by one worker process could resolve to the wrong implementation: SELECT b.main.test_same_name_catalog(1) returned twin_a:1. The call answered from the wrong catalog rather than failing.

MetaWorker distinguished sub-workers with a 4-byte prefix on the attach_opaque_data, but init()/bind() stripped that prefix before handing the request to the sub-worker — so the value persisted into an HTTP stream state carried no routing key. On rehydrate the resolver fell back to a registry scan and returned whichever sub-worker declared the name first.

The catalog name is now sealed into the attach plaintext at catalog_attach and read back on every dispatch. It sits inside the AEAD deliberately: the signing key is process-wide, so a routing header outside the seal would be client-editable and could steer one catalog's attach into another. Being inside also means it survives state serialization, so a rehydrate landing on a different instance routes correctly — no process-local map, and no positional index that need not agree across deploys.

Ambiguous dispatch now raises. When several sub-workers declare the same function name and the call carries no attach naming the catalog, MetaWorker refuses instead of returning the first declarer — turning a lost routing key into a plausible wrong answer is how this stayed invisible.

Upgrading

The attach_opaque_data envelope format changed, so an attach minted by 0.18.x is not routable by 0.19.0 and vice versa. Attaches are process-scoped, so an ordinary restart is unaffected. An HTTP state token held across a rolling upgrade will fail to route — loudly, rather than resolving to the wrong catalog.

CI

The integration matrix now runs the full sqllogictest suite on every transport. The launch lane previously ran only 2 of ~290 files, and the http lane was silently skipping 136 files after a SIGKILL fixture killed its shared worker — VGI_TEST_DEDICATED_WORKER is now confined to the subprocess lane. The shm lane moved onto the launcher, cutting it from ~14m to ~3m.