Skip to content

Proper handling of ACK frames and long gRPC data frames#10303

Merged
spericas merged 3 commits into
helidon-io:mainfrom
spericas:issue-10275
Jul 2, 2025
Merged

Proper handling of ACK frames and long gRPC data frames#10303
spericas merged 3 commits into
helidon-io:mainfrom
spericas:issue-10275

Conversation

@spericas

@spericas spericas commented Jun 26, 2025

Copy link
Copy Markdown
Member

Description

Do not ack or process an HTTP/2 SETTINGS frame with the ACK flag on. See issues #10275 and #10234.

Documentation

None

@spericas spericas self-assigned this Jun 26, 2025
@oracle-contributor-agreement oracle-contributor-agreement Bot added the OCA Verified All contributors have signed the Oracle Contributor Agreement. label Jun 26, 2025
@spericas spericas marked this pull request as draft June 26, 2025 18:01
@spericas spericas added this to the 4.3.0 milestone Jun 26, 2025
@spericas spericas changed the title Do not ack or process an HTTP/2 SETTINGS frame with the ACK flag on Proper handling of ACK frames and long gRPC data frames Jun 26, 2025
danielkec
danielkec previously approved these changes Jun 27, 2025
@spericas spericas marked this pull request as ready for review July 2, 2025 17:46
@spericas spericas merged commit c6b7d6c into helidon-io:main Jul 2, 2025
109 of 123 checks passed
@spericas spericas modified the milestones: 4.3.0, 4.2.4 Jul 7, 2025
spericas added a commit to spericas/helidon that referenced this pull request Jul 7, 2025
…0303)

* Do not ack or process an HTTP/2 SETTINGS frame with the ACK flag on.
* Handle gRPC data frames delivered in two or more HTTP/2 frames in the gRPC client.
* Share gRPC reading code in base class. 
* Add new test that verifies gRPC client can read large gRPC frames.
spericas added a commit to spericas/helidon that referenced this pull request Jul 7, 2025
…0303)

* Do not ack or process an HTTP/2 SETTINGS frame with the ACK flag on.
* Handle gRPC data frames delivered in two or more HTTP/2 frames in the gRPC client.
* Share gRPC reading code in base class. 
* Add new test that verifies gRPC client can read large gRPC frames.
barchetta pushed a commit that referenced this pull request Jul 8, 2025
* Adds support for a gRPC reflection service (#10014)
* gRPC reflection service implemented as a feature.
* Adds support for the other required extension requests. Some new tests.
* Updates gRPC server doc describing the new reflection service.
* Refactors code that handles gRPC interceptors in webserver (#10089)
Refactors code that handles gRPC interceptors to properly support interception of methods regardless of how routes are set up. Fixes problems calling interceptors in MP after interceptor logic refactoring in the webserver. Loads all GrpcMpExtensions before creating the routes to ensure interceptors are registered for all routes.
* Support for gRPC server metrics (#10098)
Initial support for gRPC server metrics. Metrics are disabled by default. Includes new tests that verify absence of metrics when disabled.
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
* Support for metrics in gRPC client (#10101)
Initial support for gRPC client metrics. Adds some tests that verify metrics enabled and disabled.
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
* Replaces TODOs with proper argument validation in client and service gRPC descriptors. TODOs were removed in the server code without proper argument validation. (#10112)
* Updates to gRPC documentation (#10108)
* Updates docs for server interceptors and metrics and also client metrics.
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
* Adds support for gRPC reflection service version v1alpha for tools (like Postman) that don't yet support the latest v1 version. (#10122)
* Fixes problems cancelling a client-streaming gRPC call (#10128)
Fixes problems cancelling a client-streaming gRPC call. If a client-streaming call is cancelled before any data is sent, we must return headers before trailers. Also, is RST_STREAM frame is received, we should cancel the corresponding listener. Adds test for client-streaming method call cancellation.
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
* Runs gRPC metric enable/disable tests in separate VMs to avoid ordering problems. (#10164)
* gRPC Improvements (#10147)
* Avoids some buffer copies when sending and receiving gRPC payloads. New config property to completely disable compression that can be useful for perf testing.
* Sets the final CLOSED state for the stream to ensure it is properly removed from the collection of active streams for associated connection.
* Report any socket exceptions (such as broken pipe) in log level TRACE not higher.
* Ensures proper field synchronization if an RST stream frame is received at the HTTP/2 connection level. Improves some comments.
* Adds support for new gRPC MP annotation  (#10276)
Adds support for a new @Grpc.Proto annotation to mark a gRPC MP method as returning the service's proto file descriptor. This is necessary when using the gRPC reflection service in Helidon. Fixes a bug in setting up interceptors in routes and makes ContextSettingServerInterceptor immutable. Some new tests.
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
* Fixes problems converting HTTP/2 headers to Metadata and vice versa. Adds new test. (#10300)
* Ensures gRPC client calls pass metadata as headers (#10301)
Ensures gRPC client calls pass metadata as headers. Moves utility class from webserver-grpc to grpc-core. Adds test that shows headers and metadata properly merged in a client call.
* Proper handling of ACK frames and long gRPC data frames (#10303)
* Do not ack or process an HTTP/2 SETTINGS frame with the ACK flag on.
* Handle gRPC data frames delivered in two or more HTTP/2 frames in the gRPC client.
* Share gRPC reading code in base class. 
* Add new test that verifies gRPC client can read large gRPC frames.
* Adds support for tracing to gRPC client (#10314)
* New WebClient gRPC SPI to enable modules to add additional client interceptors. New gRPC tracing module that uses this SPI.
* Adds support for gRPC tracing as a gRPC service that can be listed in config under "grpc-services".
* Disable automatic lookup of all gRPC services. Now a gRPC service must be listed in the grpc-services section (or added programmatically) for it to be enabled.
* Updates versions for helidon-4.2.x branch.
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
---------
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
@spericas spericas deleted the issue-10275 branch October 2, 2025 13:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OCA Verified All contributors have signed the Oracle Contributor Agreement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants