Skip to content

Conversation

@ejona86
Copy link
Member

@ejona86 ejona86 commented Nov 12, 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)

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 added the TODO:backport PR needs to be backported. Removed after backport complete label Nov 12, 2025
@ejona86 ejona86 merged commit 55314c3 into grpc:master Nov 13, 2025
20 of 23 checks passed
@ejona86 ejona86 deleted the tomcat-no-timeoutOnSleepingServer branch November 13, 2025 14:45
@ejona86 ejona86 removed the TODO:backport PR needs to be backported. Removed after backport complete label Nov 14, 2025
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