Skip to content

ci: run SQL E2E over all three transports (subprocess + http + unix)#1

Merged
rustyconover merged 1 commit into
mainfrom
transport-matrix
Jun 24, 2026
Merged

ci: run SQL E2E over all three transports (subprocess + http + unix)#1
rustyconover merged 1 commit into
mainfrom
transport-matrix

Conversation

@rustyconover

Copy link
Copy Markdown
Contributor

The integration job previously ran only the subprocess/stdio transport. This adds http and unix coverage so the full es_search suite runs over every transport the vgi extension supports, against the live OpenSearch 2.17 service container on every leg.

What changed

  • main.go: wire a --unix <path> flag (RunUnix); --http already existed.
  • ci/run-integration.sh: parameterize by TRANSPORT (subprocess|http|unix). http parses PORT:<n> and uses a bare http://host:port LOCATION + injects INSTALL httpfs FROM core; LOAD httpfs; after each LOAD vgi;; unix waits for UNIX:<path> + the socket. Out-of-band workers are trap-killed (exit code preserved), plus a silent-skip guard fails any http leg the runner would otherwise skip into a fake green.
  • ci.yml: integration job is now a transport:[subprocess,http,unix] matrix; the OpenSearch service container + healthcheck + seed run for each leg.
  • ci/README.md: documents the matrix, httpfs injection, and silent-skip guard.

Cursor: no fix needed

es_search already externalizes its scan position — the PIT id + the last hit's search_after sort values are plain gob-encodable scan-state fields, emitted one page per Process tick. The framework snapshots them into HTTP's stateless continuation token, so the streaming table function resumes correctly over HTTP (no Done-only / restart-from-row-0 loop).

Verified locally (live OpenSearch 2.17)

  • subprocess: GREEN (23 assertions)
  • http: GREEN (25 assertions — +2 injected httpfs loads)
  • unix: GREEN (23 assertions)

🤖 Generated with Claude Code

The integration job previously ran only the subprocess/stdio transport. Add
http and unix coverage so the full es_search suite is exercised over every
transport the vgi extension supports.

- main.go: wire a --unix <path> flag (RunUnix); --http already existed.
- ci/run-integration.sh: parameterize by TRANSPORT (subprocess|http|unix). For
  http, start `--http`, parse PORT:<n>, set the bare http://host:port LOCATION,
  and inject `INSTALL httpfs FROM core; LOAD httpfs;` after each `LOAD vgi;`
  (the worker-RPC rides DuckDB's httpfs client). For unix, start `--unix`, wait
  for UNIX:<path> + the socket, set the unix:// LOCATION. Out-of-band workers
  are trap-killed with the exit code preserved, and a silent-skip guard fails
  any http leg the runner would otherwise skip into a fake green.
- ci.yml: make the integration job a transport:[subprocess,http,unix] matrix,
  keeping the OpenSearch service container + healthcheck + seed for each leg.
- ci/README.md: document the transport matrix, httpfs injection, and the
  silent-skip guard.

No cursor fix needed: es_search already externalizes its scan position (PIT id
+ search_after sort values are plain gob-encodable state, one page per Process
tick), so the streaming table function resumes correctly over HTTP's stateless
continuation token. Verified GREEN on all three transports against a live
OpenSearch 2.17 (subprocess/unix: 23 assertions, http: 25 with the injected
httpfs loads).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rustyconover rustyconover merged commit 85d76d0 into main Jun 24, 2026
5 checks passed
@rustyconover rustyconover deleted the transport-matrix branch June 24, 2026 02:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant