You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
R6: Complete grpc-java streaming transports on Restlet #1561
Follow-up to R0 draft PR #1556. grpc-java 1.85.1 client transport SPI and a real socket-less ServerImplBuilder/AbstractServerStream host compile and interoperate over Restlet HTTP/2. The native host verifies unary, client half-close, interceptors, unknown-method dispatch and encoded trailers-only errors. It buffers at most 1 MiB per direction and models logical calls, not physical connections. The older manual-framing bidi fixture is diagnostic evidence only.
Acceptance: pinned native SDK channel/services; SDK-owned framing/deframing and per-call serialization; constructor/setter APIs and explicit connector ownership; generated and dynamic unary calls in R3/R4; named-module integration; native metadata/status including errors after messages. R6 must replace manual streaming diagnostics with actual SDK stream transports and test byte budgets, demand/readiness, pre-registration/server cancellation races, idle disconnects and long-lived cleanup. Address/authority/TLS/SNI separation, DNS/LB/subchannels, GOAWAY/draining and PING/keepalive need supported core seams or explicit rejection. R0 prototypes reject unsupported controls and resolved-address forms. Do not promote handwritten gRPC framing or activate grpc-netty as a production fallback.
Progress: R1 (#1562), R3 (#1563, with fixes #1623 and #1624) and R4 (#1628) are merged into 3.0. GrpcClientAdapter gives a unary, plaintext native channel on a borrowed Restlet HTTP/2 client; GrpcServerAdapter hosts unary and server-streaming methods through a socketless SDK server, with SDK-owned framing, raw response headers, trailers including errors after messages, and bounded messages, queues, calls and durations. Both are named-module integrated, without grpc-netty.
What remains is this issue's R6 acceptance, unchanged: client streaming on the channel, client-streaming and bidirectional methods on the server (start() rejects them today), SDK readiness and demand within byte budgets, cancellation races, idle disconnects and long-lived cleanup, and the retirement of the R0 manual streaming fixtures. Connection controls (GOAWAY/draining, PING/keepalive, LB/subchannels) and TLS/address separation on the client stay rejected unless a core seam is verified. Retitled accordingly.
changed the title [-]R1/R3/R4/R6: Implement native grpc-java transports on Restlet[/-][+]R6: Complete grpc-java streaming transports on Restlet[/+]on Nov 5, 2026
R6a is merged: #1641 hosts client-streaming and bidirectional methods in GrpcServerAdapter, and #1642 streams GrpcClientAdapter calls in both directions within per-call queue budgets (setMaxQueuedBytes). Both are tested against grpc-java's Netty server and against a GrpcServerAdapter.
Keeping this open for three follow-ups:
Retire the R0 spike's handwritten framing fixtures: GrpcSdkTransportSpikeTestCase still carries a manual bidirectional server.
Test stop() and idle disconnects on open client-streaming and bidirectional calls; today they are tested on unary and server-streaming calls only.
Pass the HTTP/2 reset code to the client, which reports a closed connection today.
GOAWAY/draining, keepalive, connection age and load balancing stay explicitly out of scope.
Activity
jlouvel commentedon Nov 5, 2026
Progress: R1 (#1562), R3 (#1563, with fixes #1623 and #1624) and R4 (#1628) are merged into
3.0.GrpcClientAdaptergives a unary, plaintext native channel on a borrowed Restlet HTTP/2 client;GrpcServerAdapterhosts unary and server-streaming methods through a socketless SDK server, with SDK-owned framing, raw response headers, trailers including errors after messages, and bounded messages, queues, calls and durations. Both are named-module integrated, without grpc-netty.What remains is this issue's R6 acceptance, unchanged: client streaming on the channel, client-streaming and bidirectional methods on the server (
start()rejects them today), SDK readiness and demand within byte budgets, cancellation races, idle disconnects and long-lived cleanup, and the retirement of the R0 manual streaming fixtures. Connection controls (GOAWAY/draining, PING/keepalive, LB/subchannels) and TLS/address separation on the client stay rejected unless a core seam is verified. Retitled accordingly.🤖 Generated with Claude Code
[-]R1/R3/R4/R6: Implement native grpc-java transports on Restlet[/-][+]R6: Complete grpc-java streaming transports on Restlet[/+]Host client-streaming and bidirectional gRPC methods
Stream gRPC client calls in both directions
jlouvel commentedon Nov 5, 2026
R6a is merged: #1641 hosts client-streaming and bidirectional methods in
GrpcServerAdapter, and #1642 streamsGrpcClientAdaptercalls in both directions within per-call queue budgets (setMaxQueuedBytes). Both are tested against grpc-java's Netty server and against aGrpcServerAdapter.Keeping this open for three follow-ups:
GrpcSdkTransportSpikeTestCasestill carries a manual bidirectional server.stop()and idle disconnects on open client-streaming and bidirectional calls; today they are tested on unary and server-streaming calls only.GOAWAY/draining, keepalive, connection age and load balancing stay explicitly out of scope.