Summary
When the Coder plugin's environments view queries SettingsService.getEnvironmentInfo over RPC and the underlying RPC channel has been cancelled (which happens on a network drop / network change), the call throws java.lang.IllegalStateException: RpcClient was cancelled.
This exception is not caught by the plugin and propagates up to Toolbox's ComposeWindowsService as an "Unhandled exception in a window 'Toolbox'".
When this happens, every time you open the toolbox and the plugin again it crashes. Only a toolbox force quit and restart fixes it.
Environment
- Coder Toolbox plugin: v0.9.0 (latest release)
- JetBrains Toolbox: 3.5.0.84344
- OS: Windows 11 Pro (build 26200)
- Coder deployment: self-hosted
Steps to reproduce
- Connect to one or more Coder workspaces from the Toolbox Coder plugin (so RPC/SSH channels are live).
- Trigger a network change/drop. The RPC keepalive then times out / the socket closes, logged as
SocketException: Socket closed and KeepaliveTimeoutException: Connection timed out.
- Open / return to the Coder plugin's environments view while a previously-connected workspace's RPC channel is in the cancelled state.
- Now the Toolbox window can no longer be accessed
Primary stack trace
ComposeWindowsService Unhandled exception in a window 'Toolbox':
java.lang.IllegalStateException: RpcClient was cancelled
at kotlinx.rpc.krpc.client.KrpcClient$callServerStreaming$1.invokeSuspend(KrpcClient.kt:265)
at kotlinx.coroutines.flow.SafeFlow.collectSafely(Builders.kt:57)
at kotlinx.coroutines.flow.AbstractFlow.collect(Flow.kt:226)
at kotlinx.coroutines.flow.FlowKt__ReduceKt.first(Reduce.kt:196)
at kotlinx.rpc.krpc.client.KrpcClient.call(KrpcClient.kt:258)
at com.jetbrains.toolbox.agentNetworkApi.settings.SettingsService$$rpcServiceStub.getEnvironmentInfo(SettingsService.kt)
at com.jetbrains.toolbox.viewmodel.DevEnvironmentProviderViewModelImpl$combinedEnvironmentState$$inlined$flatMapLatest$1.invokeSuspend(Merge.kt:190)
... (kotlinx.coroutines flow/combine machinery)
Secondary, related render-thread exception (less frequent)
ComposeWindowsService Unhandled exception in a window 'Toolbox':
java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
at java.desktop/java.awt.Component.getLocationOnScreen_NoTreeLock(...)
at androidx.compose.ui.platform.PlatformWindowContext.convertLocalToScreenPosition-R5De75A(PlatformWindowContext.desktop.kt:132)
at androidx.compose.ui.scene.ComposeSceneMediator$DesktopPlatformContext.convertLocalToScreenPosition-MK-Hz9U(ComposeSceneMediator.desktop.kt:795)
at androidx.compose.ui.node.RootNodeOwner.updatePositionCacheAndDispatch(RootNodeOwner.skiko.kt:229)
Connection
It seems that in general, reconnecting after network change seems to not work sometimes.
The coder workspaces are connected through the coder proxy, no direct connections
Summary
When the Coder plugin's environments view queries
SettingsService.getEnvironmentInfoover RPC and the underlying RPC channel has been cancelled (which happens on a network drop / network change), the call throwsjava.lang.IllegalStateException: RpcClient was cancelled.This exception is not caught by the plugin and propagates up to Toolbox's
ComposeWindowsServiceas an "Unhandled exception in a window 'Toolbox'".When this happens, every time you open the toolbox and the plugin again it crashes. Only a toolbox force quit and restart fixes it.
Environment
Steps to reproduce
SocketException: Socket closedandKeepaliveTimeoutException: Connection timed out.Primary stack trace
Secondary, related render-thread exception (less frequent)
Connection
It seems that in general, reconnecting after network change seems to not work sometimes.
The coder workspaces are connected through the coder proxy, no direct connections