Skip to content

# Race condition in GraphQlWebSocketHandler.getSessionInfo() causes IllegalArgumentException error logging #1449

@snuderl

Description

@snuderl

Bug Description

This is returning in a lot of error logs for us but no actual production issues. It just makes looking at logs scarier than it should be.

GraphQlWebSocketHandler throws IllegalArgumentException: No SessionInfo for StandardWebSocketSession[...] when Tomcat delivers a text message concurrently with (or immediately after) the WebSocket session close. The exception is thrown from getSessionInfo() which uses Assert.notNull on the result of sessionInfoMap.get(session.getId()).

Stack Trace

java.lang.IllegalArgumentException: No SessionInfo for StandardWebSocketSession[id=9be09e8e-413f-d21c-8fa9-27fe80637acf, uri=wss://gql.opensea.io/subscriptions]
	at org.springframework.util.Assert.notNull(Assert.java:182)
	at org.springframework.graphql.server.webmvc.GraphQlWebSocketHandler.getSessionInfo(GraphQlWebSocketHandler.java:298)
	at org.springframework.graphql.server.webmvc.GraphQlWebSocketHandler.handleInternal(GraphQlWebSocketHandler.java:204)
	at org.springframework.graphql.server.webmvc.GraphQlWebSocketHandler.handleTextMessage(GraphQlWebSocketHandler.java:196)
	at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43)
	at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75)
	at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56)
	at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58)
	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113)
	at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:392)
	at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130)
	at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:486)
	at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:286)
	at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:129)
	at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85)
	at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184)
	at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164)
	at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152)
	at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1778)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:946)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:480)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:57)
	at java.base/java.lang.Thread.run(Thread.java:1474)

Environment

  • spring-graphql: 2.0.0
  • netflix dgs 11.1.0
  • JDK: 25

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions