Skip to content

Migrate from Channel/Slot to PipelineState API#1247

Closed
quinnj wants to merge 61 commits intomasterfrom
jq/channel-cleanup
Closed

Migrate from Channel/Slot to PipelineState API#1247
quinnj wants to merge 61 commits intomasterfrom
jq/channel-cleanup

Conversation

@quinnj
Copy link
Member

@quinnj quinnj commented Feb 14, 2026

Summary

  • Update HTTP server, client, and WebSocket code to use the new closure-based PipelineState from Reseau
  • Server: Connection.channelConnection.pipeline, uses pipeline_shutdown!/pipeline_trigger_read/pipeline_schedule_task_now!
  • Client stream: h1conn.sloth1conn.pipeline, uses pipeline_write!
  • WebSockets: WsChannelHandlerWsHandler (no longer extends AbstractChannelHandler), installs read handler via downstream_read_setter
  • _H2_CHANNEL_SUPPORTED = true (H2Connection supported via pipeline API)

Companion PRs

Test plan

  • HTTP test suite: 444 tests passing
  • CI green on all platforms

🤖 Generated with Claude Code

quinnj and others added 30 commits June 19, 2025 17:46
Add HTTPVersion and header helper APIs.
Implement request options: copyheaders, basicauth,
canonicalize_headers, detect_content_type, proxy/pool,
logerrors/logtag.
Fix request/body handling, stream error propagation,
websocket control frames, and header duplication.
Add tests for headers, httpversion, client options,
and websocket ping/pong.
Implement HTTP.open with streaming IO for requests/responses.
- Add stream IO methods, lifecycle control, and GC rooting
- Prepare HTTP/1 chunked requests before stream creation
- Add client streaming tests for GET and POST
Add listen/listen! wrappers and blocking serve.
- Enable stream handlers with request-body streaming and chunked responses
- Add server stream helpers (setstatus/setheader) and tests
- track control frames and fragmented messages
- add close handling with error propagation
- cover fragmentation/close in tests
- gate retries by idempotency and body retryability
- honor retry_delays and retry_check overrides
- track retry counts in response metrics
- add retry behavior tests
quinnj and others added 21 commits January 25, 2026 16:14
Adapt to Reseau's new exception-based error model:
- Replace AwsIO module references with Reseau.Sockets
- Fix channel_slot_send_message result check (now returns nothing)
- Change WsChannelHandler vtable methods from ::Int to ::Nothing
- Fix unsafe_string call on Reseau.error_str (returns String, not Ptr)
- Update tests for new error patterns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update HTTP server, client, and WebSocket code to use the new
closure-based PipelineState from Reseau.

Key changes:
- Server: Connection.channel → Connection.pipeline, uses
  pipeline_shutdown!/pipeline_trigger_read/pipeline_schedule_task_now!
- Client stream: h1conn.slot → h1conn.pipeline, uses pipeline_write!
- WebSockets: WsChannelHandler → WsHandler (no longer extends
  AbstractChannelHandler), installs read handler via
  downstream_read_setter instead of slot manipulation
- utils: _H2_CHANNEL_SUPPORTED = true (H2Connection no longer extends
  AbstractChannelHandler but is supported via pipeline API)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@quinnj quinnj closed this Feb 14, 2026
@quinnj quinnj reopened this Feb 14, 2026
@quinnj quinnj closed this Feb 14, 2026
@quinnj quinnj reopened this Feb 14, 2026
@quinnj quinnj changed the base branch from master to jq/remove-error-result February 14, 2026 16:06
@quinnj quinnj force-pushed the jq/channel-cleanup branch from 7240d67 to 6450edd Compare February 14, 2026 16:07
- Test only Julia 1.12 on Linux, macOS, Windows
- Install Reseau and AwsHTTP from GitHub before building
- Remove old doc/coverage steps
- Trigger on all PRs (not just master-targeted)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@quinnj quinnj changed the base branch from jq/remove-error-result to master February 14, 2026 16:16
@quinnj quinnj closed this Feb 14, 2026
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