Skip to content

Bug Report: Unable to write GOAWAY #7270

@mkarg

Description

@mkarg

Brief Summary

If a HTTP/2 client process is forcably killed (like pressing CTRL-C in Windows Terminal), Payara prints a stack trace into server.log.

This stack trace makes not much sense, as this is not a bug, it is expected behavior in HTTP/2. Neither the server administrator nor the server developer can't do anything to prevent clients from behaving like this. So while it might be interesting to see this event in the log, there is no benefit from having a stack trace.

Expected Outcome

Either no log entry at all, or just a warning like Client closed TCP connection before server could send GOAWAY..

Current Outcome

[2025-03-26T09:50:00.544+0100] [Payara 6.2025.1] [WARNUNG] [] [org.glassfish.grizzly.http2.Http2Session] [tid: _ThreadID=85 _ThreadName=http-thread-pool::http-listener-1(2)] [timeMillis: 1742979000544] [levelValue: 900] [[
  Unable to write GOAWAY.  Terminating session.
java.io.EOFException
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.read(TCPNIOTransport.java:594)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleRead(TCPNIOTransportFilter.java:59)
        at org.glassfish.grizzly.filterchain.TransportFilter.handleRead(TransportFilter.java:133)
        at org.glassfish.grizzly.ssl.SSLBaseFilter$SSLTransportFilterWrapper.handleRead(SSLBaseFilter.java:927)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510)
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515)
        at java.base/java.lang.Thread.run(Unknown Source)
]]

Reproducer

@GET @Path("helloworld")
public String helloworld() {
    return "helloworld";
}

On Windows install original cURL (don't use curl Powershell alias), start cURL --http2 https://my-payara.my-domain.local/helloworld?i=[1-100000] then press CTRL-C to hard-kill that task.

Operating System

Windows 10 Pro

JDK Version

Zulu 17 (64 Bit)

Payara Distribution

Payara Server Full Profile

Metadata

Metadata

Assignees

Labels

Status: AcceptedConfirmed defect or accepted improvement to implement, issue has been escalated to Platform DevType: BugLabel issue as a bug defect

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions