-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
occasional h2spec failures on jenkins #4855
Comments
got another failure for this on the 9.4.x build
|
For reference, the second failure reported by @lachlan-roberts is also appearing as:
Both failures do correspond to this test: https://github.com/summerwind/h2spec/blob/v2.2.0/http2/8_1_2_6_malformed_requests_and_responses.go#L70 |
@lorban can you please check if there is a new version of I was never able to fail |
2.4.0 is available (https://github.com/summerwind/h2spec/releases) but this downloaded and build within the plugin here https://github.com/madgnome/h2spec-maven-plugin. |
@olamy last time I put up a PR and it was merged and a release done. Perhaps that would be enough, rather than forking. |
@olamy cancel that, my issue is still open :| |
can we run it without a maven plugin? just exec plugin maybe, running h2spec directly? |
the problem is to store the specs binaries... we don't really want to download them for each build or store them in our jetty.project git repo. |
branch jetty-9.4.x_h2s_spec_2.4.0 use fork of the plugin https://github.com/jetty-project/h2spec-maven-plugin. updated with spec 2.4.0. |
I've modified h2spec to make it report the client's address/port of each failing test: summerwind/h2spec#114 |
Code cleanups. Signed-off-by: Simone Bordet <[email protected]>
In case of bad usage of the API, we don't want to close() the stream but just fail the callback, because the stream may be performing actions triggered by a legit API usage. Signed-off-by: Simone Bordet <[email protected]>
In case of a call to `AsyncListener.onError()`, applications may decide to call AsyncContext.complete() and that would be a correct usage of the Servlet API. This case was not well handled and was wrongly producing a WARN log with an `IllegalStateException`. Signed-off-by: Simone Bordet <[email protected]>
Completely rewritten `HttpTransportOverHTTP2.TransportCallback`. The rewrite handles correctly asynchronous failures that now are executed sequentially (and not concurrently) with writes. If a write is in progress, the failure will just change the state and at the end of the write a check on the state will determine what actions to take. A session failure is now handled in HTTP2Session by first failing all the streams - which notifies the Stream.Listeners - and then failing the session - which notifies the Session.Listener. The stream failures are executed concurrently by dispatching each one to a different thread; this means that the stream failure callbacks are executed concurrently (likely sending RST_STREAM frames). The session failure callback is completed only when all the stream failure callbacks have completed, to ensure that a GOAWAY frame is processed after all the RST_STREAM frames. Signed-off-by: Simone Bordet <[email protected]>
The main issue that was causing h2spec failures was the following. The client (h2spec) was sending an invalid frame after legit frames that triggered an HTTP response. While the response frame were being generated, the invalid frame was read concurrently and eventually call There, the One such frame is the The frame generation would look at the Concurrently, failing the When the After that, the server may write some other frame such as a The client sees a The solution is that the |
Fixed notification of HTTP2Session.abort(), that must fail all the streams before failing the session. Signed-off-by: Simone Bordet <[email protected]>
Added javadocs after review. Signed-off-by: Simone Bordet <[email protected]>
More comments after review. Signed-off-by: Simone Bordet <[email protected]>
Updates after review. Signed-off-by: Simone Bordet <[email protected]>
There's another race condition ( |
Updates after review. Signed-off-by: Simone Bordet <[email protected]>
Signed-off-by: Ludovic Orban <[email protected]>
Merged PR didn't fix the issue, it just disabled the test |
Fixed reset() to remember the failure. Signed-off-by: Simone Bordet <[email protected]>
Partially reverted the changes introduced in #4855, because they were working only when sends were synchronous. Introduced ByteBufferPool.remove(ByteBuffer) to fix the issue. Now when a concurrent failure happens while frames are being generated or sent, the buffer is discarded instead of being recycled, therefore resolving the buffer corruption. Signed-off-by: Simone Bordet <[email protected]>
Fixes #4967 - Possible buffer corruption in HTTP/2 session failures Partially reverted the changes introduced in #4855, because they were working only when sends were synchronous. Introduced ByteBufferPool.remove(ByteBuffer) to fix the issue. Now when a concurrent failure happens while frames are being generated or sent, the buffer is discarded instead of being recycled, therefore resolving the buffer corruption. Signed-off-by: Simone Bordet <[email protected]>
Jetty version
jetty-10.0.x
Java version
14.0.1, vendor: AdoptOpenJDK
OS type/version
"linux", version: "4.15.0-99-generic", arch: "amd64", family: "unix"
Description
Occasional h2spec failures on jenkins, I've seen this a few times now but it usually disappears if you re-run the build.
https://jenkins.webtide.net/blue/organizations/jenkins/jetty.project/detail/jetty-9.4.x-4789-ShutdownThread/1/pipeline
The text was updated successfully, but these errors were encountered: