eclipse-ee4j / eclipse-ee4j/tyrus

TyrusServletWriter.close can generate a WARNING level log event

Open
#728 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.