What are the "EatWhatYouKill" log messages about?

I see warning messages in the log from a logger named “EatWhatYouKill”.
I’ve seen that same logging in other threads but have yet to see anything about what is generating them.
The latest message I have seen is as follows:

java.lang.IllegalStateException: Delegate is not set
at com.inductiveautomation.perspective.gateway.session.SecuredPerspectiveProjectSession.delegateNotSet(SecuredPerspectiveProjectSession.java:183)
at java.base/java.util.Optional.orElseThrow(Unknown Source)
at com.inductiveautomation.perspective.gateway.session.SecuredPerspectiveProjectSession.notifyDisconnected(SecuredPerspectiveProjectSession.java:213)
at com.inductiveautomation.perspective.gateway.session.PerspectiveSessionCollection.notifyDisconnected(PerspectiveSessionCollection.java:358)
at com.inductiveautomation.perspective.gateway.comm.WebSocketChannel.onClose(WebSocketChannel.java:127)
at jdk.internal.reflect.GeneratedMethodAccessor136.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jetty.websocket.common.events.annotated.CallableMethod.call(CallableMethod.java:70)
at org.eclipse.jetty.websocket.common.events.annotated.OptionalSessionCallableMethod.call(OptionalSessionCallableMethod.java:72)
at org.eclipse.jetty.websocket.common.events.JettyAnnotatedEventDriver.onClose(JettyAnnotatedEventDriver.java:148)
at org.eclipse.jetty.websocket.common.WebSocketSession.callApplicationOnClose(WebSocketSession.java:388)
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.disconnect(AbstractWebSocketConnection.java:317)
at org.eclipse.jetty.websocket.common.io.DisconnectCallback.failed(DisconnectCallback.java:36)
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.close(AbstractWebSocketConnection.java:197)
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:511)
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:441)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
at java.base/java.lang.Thread.run(Unknown Source)

Can anyone give me some insight into this logger? What does “Delegate is not set…” refer to? What are these “EatWhatYouKill” procedures?

Edit to add: FWIW, it looks like each “EatWhatYouKill” entry is preceded by a “WebSocketChannel” logger warning with the message, “Websocket connection closed unexpectedly. code=1006, reason=Disconnected”. As they seem to always happen at the same time and with the Web Socket message occurring first in the log, it seems logical to assume they are related.

Thanks.

EatWhatYouKill is the name of a thread management strategy Jetty (Ignition’s backing webserver technology) uses - more info on it here:

I would definitely think they’re related. Whatever is causing the websocket to close is then triggered Jetty to clean up its own threads, which leads to the other message. It’s happening ‘unexpectedly’, from Ignition’s Perspective, so things are in an unusual state, which leads to the logged error. Figuring out what’s happening to the websocket connections should clear up the rest of the problem.

IIRC, this was a known issue with Firefox clients. That is, Firefox was just chopping off connections without formally shutting down the websocket. Or something like that.

I get lots of End of File exceptions from the gateway webpage(s) while using Firefox, but I’ve never seen those bubble up to an actual Perspective related exception; only internal-to-Jetty/Wicket errors.

Thanks guys.

The clients in this system are primarily Perspective Apps on Android tablets.
There are a few web clients used by developers and internal client folks doing testing and validations.
I can’t speak to the browsers that others are using so it could be a Firefox related issue.
Currently I’ve just been watching the logs for warnings and errors and trying to remedy any issues I can. I do appreciate you all’s knowledge any your willingness to share!