eclipse-ee4j / eclipse-ee4j/tyrus
TyrusServletWriter.close can generate a WARNING level log event
- Dominant language
- Java
- Stars
- 128
- Forks
- 49
- PR merge metrics
- No merged PRs in 30d
Description
We see an error similar to this every few days. Eyeballing the code it seems that when `TyrusServletWriter.close()` is invoked it should set a flag to indicate whether it is in close operation and omit the `WARNING` log message if the flag was set but I don't have the background to determine whether this is a good solution. It would be nice to get this spurious log message out of our logs.
Note that this is probably the same error described in #519 but it does not seem to have been addressed.
```
java.util.concurrent.CancellationException
at org.glassfish.grizzly.http.io.OutputBuffer$InternalWriteHandler.detach(OutputBuffer.java:1317)
at org.glassfish.grizzly.http.io.OutputBuffer.endRequest(OutputBuffer.java:372)
at org.glassfish.grizzly.http.server.Response.finish(Response.java:518)
at org.glassfish.grizzly.http.server.HttpServerFilter.afterService(HttpServerFilter.java:373)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:273)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.filterchain.FilterChainContext$1.run(FilterChainContext.java:178)
at org.glassfish.grizzly.filterchain.FilterChainContext.resume(FilterChainContext.java:202)
at org.glassfish.grizzly.http.server.Response.resume(Response.java:1936)
at org.apache.catalina.connector.Request.resumeAfterService(Request.java:3864)
at org.apache.catalina.connector.WebConnectionImpl.close(WebConnectionImpl.java:139)
at org.glassfish.tyrus.servlet.TyrusServletWriter.close(TyrusServletWriter.java:173)
at org.glassfish.tyrus.core.ProtocolHandler.doClose(ProtocolHandler.java:582)
at org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:136)
at org.glassfish.tyrus.core.ProtocolHandler.close(ProtocolHandler.java:469)
at org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:133)
at org.glassfish.tyrus.core.TyrusWebSocketEngine$TyrusReadHandler.handle(TyrusWebSocketEngine.java:569)
at org.glassfish.tyrus.servlet.TyrusHttpUpgradeHandler.onDataAvailable(TyrusHttpUpgradeHandler.java:173)
at org.apache.catalina.connector.InputBuffer$ReadHandlerImpl.processDataAvailable(InputBuffer.java:438)
at org.apache.catalina.connector.InputBuffer$ReadHandlerImpl.onDataAvailable(InputBuffer.java:399)
at org.glassfish.grizzly.http.io.InputBuffer.invokeHandler(InputBuffer.java:1095)
at org.glassfish.grizzly.http.io.InputBuffer.invokeHandlerOnProperThread(InputBuffer.java:1086)
at org.glassfish.grizzly.http.io.InputBuffer.append(InputBuffer.java:969)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:254)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
at java.lang.Thread.run(Thread.java:748)
```
Contributor guide
Research direction
Start at TyrusServletWriter.close(), identified in the stack trace, and inspect the surrounding warning-log handling. Compare the reported behavior with issue #519 and determine whether warnings caused by the close operation are expected. Done means the spurious WARNING event is no longer emitted during this close path without hiding unrelated warnings.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100