Skip to content

[Task] Upstream: expose HTTP/2 trailers in Symfony HttpClient, then move the curl gRPC wire onto it #421

Description

@gplanchat

Parent Epic: #306

Upstream: symfony/symfony#66250 — [HttpClient] Expose HTTP trailers.

The gRPC-over-curl client of #392 (CurlGrpcWorkflowServiceClient) drives curl by hand. The only reason is that the call status (grpc-status, grpc-message) arrives in the HTTP/2 trailers, and Symfony HttpClient 7.4 discards them: CurlResponse::parseHeaderLine() ignores header lines received after the body, and CURLOPT_HEADERFUNCTION cannot be overridden through extra.curl.

The Durable-as-a-Symfony-component RFC draft proposes folding the curl wire into the Temporal bridge. Inside Symfony, that wire is expected to go through HttpClient, so this upstream change comes first.

Steps

  1. Follow the discussion on [HttpClient] Expose HTTP trailers symfony/symfony#66250 until the direction (getInfo('trailers') or another shape) is accepted or refused.
  2. If accepted: open the pull request on symfony/symfony (curl, native HTTP/1.1 chunked, MockResponse), with tests, targeting the branch the maintainers name.
  3. Once released: move CurlGrpcWorkflowServiceClient onto HttpClient when the installed version exposes trailers, and keep the raw curl path for older versions.

Done when

  • [HttpClient] Expose HTTP trailers symfony/symfony#66250 has an answer from a maintainer; this ticket records it.
  • Accepted: the upstream PR is merged, or this ticket names why it stalled.
  • Refused: the RFC draft says the curl wire keeps raw curl, and why.
  • Accepted and released: a test shows the curl wire reading grpc-status through HttpClient against temporal server start-dev; the raw curl path stays covered for older versions.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bridgessrc/Bridge/{Dbal,Illuminate,Temporal}enhancementNew feature or requestloop:trustedAuthor is on the team; the agentic loop may read this issuetaskConcrete work unit (WA003)

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions