Skip to content

Conversation

@ejona86
Copy link
Member

@ejona86 ejona86 commented Nov 13, 2025

tomcat10Test is frequently failing on Windows because Tomcat doesn't support trailers-only. I removed the FIXMEs because we won't workaround Tomcat in grpc-servlet because:

  1. An interceptor that converts trailers-only into headers+trailers would handle most cases, as it could run directly next to the application. That is semantically very safe. But an interceptor doesn't help deadline handling and other transport-caused closures, as those trailers-only are produced by the transport
  2. Having the transport convert trailers-only would work for deadline handling, but is not semantically safe
  3. The other languages didn't find Tomcat to be important enough to support HEADERS+empty DATA(END_STREAM) as trailers-only on the client-side
Unexpected status: Status{code=INTERNAL, description=Received unexpected EOS on empty DATA frame from server, cause=null}
value of: getCode()
expected: DEADLINE_EXCEEDED
but was : INTERNAL
	at app//io.grpc.testing.integration.AbstractInteropTest.assertCodeEquals(AbstractInteropTest.java:2028)
	at app//io.grpc.testing.integration.AbstractInteropTest.timeoutOnSleepingServer(AbstractInteropTest.java:1644)

Backport of #12510

tomcat10Test is frequently failing on Windows because Tomcat doesn't
support trailers-only. I removed the FIXMEs because we won't workaround
Tomcat in grpc-servlet because:

1. An interceptor that converts trailers-only into headers+trailers
   would handle most cases, as it could run directly next to the
   application.  That is semantically very safe. But an interceptor
   doesn't help deadline handling and other transport-caused closures,
   as those trailers-only are produced by the transport
2. Having the transport convert trailers-only would work for deadline
   handling, but is not semantically safe
3. The other languages didn't find Tomcat to be important enough to
   support HEADERS+empty DATA(END_STREAM) as trailers-only on the
   client-side

```
Unexpected status: Status{code=INTERNAL, description=Received unexpected EOS on empty DATA frame from server, cause=null}
value of: getCode()
expected: DEADLINE_EXCEEDED
but was : INTERNAL
	at app//io.grpc.testing.integration.AbstractInteropTest.assertCodeEquals(AbstractInteropTest.java:2028)
	at app//io.grpc.testing.integration.AbstractInteropTest.timeoutOnSleepingServer(AbstractInteropTest.java:1644)
```
@ejona86 ejona86 merged commit efef0dd into grpc:v1.77.x Nov 14, 2025
16 of 17 checks passed
@ejona86 ejona86 deleted the backport-tomcat-no-timeoutOnSleepingServer-1.77 branch November 14, 2025 18:31
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.

2 participants