Possible Bug in v8.3 with Classic Authentication Mode for Designer w/ AD Failover to Local Source

I may have stumbled upon a bug when using classic authentication mode with an Active Directory user source with soft or hard failover to a local/internal user source when the Active Directory user source is not available.

I restored a client's backup to a VM and was able to login to the gateway web interface just fine (it did take a bit for the main source to failover to the local user source, but that was expected. I was unable to login to the designer and kept getting the below error. If I changed the designer user source in classic mode to the local user source, I could login, and if I left it set to the AD user source, but changed the authentication mode to Identity Provider instead of Classic, it also worked. So it seems it's specific to that one combination.

This worked fine in v8.1, but this is on v8.3.9 and having this issue. (I haven't tried logging in with a local account in soft failover on the designer when the AD user source is available, but will be able to next week.)

com.inductiveautomation.ignition.client.gateway_interface.GatewayException: java.util.concurrent.TimeoutException: Idle timeout expired: 30013/30000 ms
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.login(GatewayInterface.java:231)
	at com.inductiveautomation.ignition.designer.DesignerGatewayConnection.loginDesigner(DesignerGatewayConnection.java:61)
	at com.inductiveautomation.ignition.designer.DesignerGatewayConnection.authChallengeLogin(DesignerGatewayConnection.java:78)
	at com.inductiveautomation.ignition.client.gateway_interface.AbstractGatewayConnection.authChallengeLogin(AbstractGatewayConnection.java:1214)
	at com.inductiveautomation.ignition.designer.ClassicDesignerSplash.doLogin(ClassicDesignerSplash.java:239)
	at com.inductiveautomation.ignition.designer.ClassicDesignerSplash.lambda$new$0(ClassicDesignerSplash.java:106)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton.doClick(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.SwingUtilities.notifyAction(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyBinding(Unknown Source)
	at java.desktop/javax.swing.KeyboardManager.fireBinding(Unknown Source)
	at java.desktop/javax.swing.KeyboardManager.fireKeyboardAction(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyBindingsForAllComponents(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyBindings(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Idle timeout expired: 30013/30000 ms
	at org.eclipse.jetty.client.InputStreamResponseListener.get(InputStreamResponseListener.java:217)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.login(GatewayInterface.java:219)
	... 49 more
Caused by: java.util.concurrent.TimeoutException: Idle timeout expired: 30013/30000 ms
	at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:167)
	at org.eclipse.jetty.io.IdleTimeout.idleCheck(IdleTimeout.java:113)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

Ignition v8.3.9 (b2026082511)
Java: Azul Systems, Inc. 17.0.19

This also seems to apply to the Vision launcher also. Gonna open a support ticket to see if I can get this fixed.

Any errors in the gateway logs? Can you get a thread dump on the gateway during that 30 second wait for the event to time out?

Nothing besides the usual. (Primary LDAP connection failed: connecting to secondary)
Attaching a thread dump here and on the ticket.
IGN01_thread_dump_20260904.zip (39.4 KB)
Grabbed a few during the 30-second wait while trying to login to a vision client.

Support ticket: 198170

So I've been unable to replicate this issue again. I'll keep trying but after the weekend and having everything shut down and booting it all back up it's working every time.