Save fails after a few minutes in 8.3.6 (Project disappear ?)

Hi everyone,

I am currently setting up a new server to test the migration of a Perspective project from Ignition 8.1 to 8.3.6.

I am experiencing a recurring issue with the Designer. After a few minutes of use, if I try to save my work or perform actions like creating Tag Groups, this error pops up:


Full error:

com.inductiveautomation.ignition.common.rpc.RpcException: Unexpected status code: 403
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invokeRaw(GatewayInterface.java:417)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:366)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayConnection$Rpc$RpcInvocationHandler.invoke(GatewayConnection.java:317)
	at jdk.proxy2/jdk.proxy2.$Proxy8.canSaveProject(Unknown Source)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner.handleSave(IgnitionDesigner.java:1396)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.lambda$handleSaveAction$12(IgnitionDesigner.java:2773)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:259)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:249)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task.lambda$runInternal$3(Task.java:215)
	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.6 (b2026042713)
Java: Azul Systems, Inc. 17.0.18

The timing seems inconsistent, but once the error occurs, if I go to File > Open (without saving the current project), the project selection window appears completely empty.

Full error:

java.util.concurrent.ExecutionException: java.lang.reflect.UndeclaredThrowableException
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task.runBlocking(Task.java:151)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task.runBlocking(Task.java:128)
	at com.inductiveautomation.ignition.designer.ProjectDialog.<init>(ProjectDialog.java:123)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.handleOpen(IgnitionDesigner.java:2994)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.handleOpen(IgnitionDesigner.java:2955)
	at com.inductiveautomation.ignition.client.util.action.BaseAction$BaseActionImpl.actionPerformed(BaseAction.java:188)
	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.BasicMenuItemUI.doClick(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
	at java.desktop/javax.swing.JComponent.processMouseEvent(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.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(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.lang.reflect.UndeclaredThrowableException
	at jdk.proxy2/jdk.proxy2.$Proxy8.getValidProjectManifests(Unknown Source)
	at com.inductiveautomation.ignition.designer.ProjectDialog.lambda$new$1(ProjectDialog.java:120)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task.lambda$create$2(Task.java:107)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:259)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:249)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task.lambda$runInternal$3(Task.java:215)
	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.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.rpc.RpcException: Unexpected status code: 403
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invokeRaw(GatewayInterface.java:417)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:366)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayConnection$Rpc$RpcInvocationHandler.invoke(GatewayConnection.java:317)
	... 11 more

Ignition v8.3.6 (b2026042713)
Java: Azul Systems, Inc. 17.0.18

Currently, the only way I figure out to get back to work is to force-close the Designer via Task Manager, restart it, and reopen the project (which is still there and visible upon restart).

Has anyone encountered this behavior?

What's your network topology look like?

What's happening suggests to me that your designer is making a connection and establishing a session, and then a few minutes later something about your local machine changes and the session you had on the backend is lost.

Check your gateway logs, they may have more details.

This is the last log after the error

As an additional detail, I am currently connected via VPN. Tomorrow I will test without it to see if the issue persists.

However, the strange thing is that I am also connected to the production server (which is basically a "twin" machine running 8.1) over the exact same VPN, and I am not experiencing any connection drops there.

What's under "Websocket connection errored out"? The stacktrace there might be interesting.

I think that it's something with your VPN interacting poorly with the designer's persistent session(s).

You could also keep an eye on the gateway status page that lists active designer connections - I'm betting when this starts happening your extant designer connection will go "dormant" - to the gateway, your existing designer connection is disappearing.

Thanks for the feedback. This is the screenshot of the warning of the 8.3.6 gateway:

To be honest, I’m seeing the same error in the production gateway as well. I never really gave it much thought, but I actually see this warning several times a day. This is the error I'm getting in version 8.1.47.

What’s puzzling is the difference between versions. I’ve been working on 8.1.47 over the same VPN for a long time without ever experiencing this issue. Even today, while performing migration tests, I had both versions open simultaneously: the 8.1.47 project stayed perfectly stable, while the newer version triggered the warning.

Yes you're right, I make a test now and after less than 1 minutes that I open the designer I had the 403 error and in the gateway there was no designer session

In 8.3 we changed the way the designer and client connect to the gateway, for a variety of reasons, so it doesn't totally surprise me that it's different from one version to the other. Obviously it's not intentional that this broke your setup, but that's the likely root cause.

You should contact our support department officially so they can start a real troubleshooting session and help figure out the root cause and/or a workaround for your environment.

We're seeing the same issue, it's basically making Designer unusable. Has anyone figured out a workaround?

We have a ticket open but no progress on that as of yet. I'd be grateful for anyone else's experience.

What's your serialization format set to under System -> Gateway Settings?

I'm wondering if you switch this to the other setting if things get better/worse. Protobuf is recommended, but Java Serialization would be more consistent with v8.1

Here is what happened in my case: I have two test Gateways set up in redundancy where, unlike our production environment, SSL was enabled at a later stage.

It might be irrelevant, but these test Gateways were also assigned a hostname, while the production ones are accessed strictly via IP.

I did all my initial testing without a VPN using hostname:8088 in the Designer and everything worked perfectly (so I wasn't targeting SSL), but once I tried connecting from home via VPN, I ran into the issue we've been discussing.

After some further testing, I updated the Gateway address in the Designer to hostname:SSL_port and it is now working correctly even over the VPN.

Tried changing serialization, tried a couple other settings suggested by support, tried adding SSL, nothing worked. Then we restarted the Docker container and now everything works. I guess we somehow missed the "have you tried rebooting" step.