[IGN-13838] Gateway won't launch after upgrade from 8.1

Installation says it's successful, but gateway fails to launch and produces this error.

Can you get the wrapper.log file and upload them or post the last error message(s) here as preformatted text? The stacktrace on that NPE is going to be helpful.

We may also need you to provide your .gwbk.

3 Likes

wrapper.log (2.7 MB)
@PGriffith

1 Like

Thanks, that's helpful. I'll get a ticket filed so we can get this fixed.

2025-08-05 13:59:51:000
Error during context startup.
	java.lang.NullPointerException: Cannot invoke "com.inductiveautomation.ignition.gateway.auth.idp.internal.InternalIdentityProviderConfig.authMethods()" because "settings" is null
		at com.inductiveautomation.ignition.gateway.auth.idp.internal.InternalIdentityProviderType.validate(InternalIdentityProviderType.java:99)
		at com.inductiveautomation.ignition.gateway.auth.idp.internal.InternalIdentityProviderType.validate(InternalIdentityProviderType.java:35)
		at com.inductiveautomation.ignition.gateway.config.AbstractExtensionPoint.lambda$buildValidator$0(AbstractExtensionPoint.java:86)
		at com.inductiveautomation.ignition.gateway.config.ExtensionPointResourceCodec.validateSettings(ExtensionPointResourceCodec.java:188)
		at com.inductiveautomation.ignition.gateway.config.ExtensionPointResourceCodec.decodeFromJson(ExtensionPointResourceCodec.java:135)
		at com.inductiveautomation.ignition.gateway.config.ExtensionPointResourceCodec.decodeFromJson(ExtensionPointResourceCodec.java:29)
		at com.inductiveautomation.ignition.gateway.config.JsonResourceCodec.decodeFromJson(JsonResourceCodec.java:45)
		at com.inductiveautomation.ignition.gateway.config.JsonResourceCodec.decode(JsonResourceCodec.java:63)
		at com.inductiveautomation.ignition.gateway.config.NamedResourceHandler.decode(NamedResourceHandler.java:449)
		at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
		at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
		at java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(Unknown Source)
		at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
		at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
		at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
		at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
		at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
		at com.inductiveautomation.ignition.gateway.config.NamedResourceHandler$Lifecycle.onStartup(NamedResourceHandler.java:562)
		at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycle.onStartup(ResourceCollectionLifecycle.java:61)
		at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
		at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.maybeStartLifecycle(ResourceCollectionLifecycleFactory.java:264)
		at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$4(ResourceCollectionLifecycleFactory.java:248)
		at java.base/java.util.Optional.ifPresent(Unknown Source)
		at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$5(ResourceCollectionLifecycleFactory.java:243)
		at java.base/java.util.ArrayList.forEach(Unknown Source)
		at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.updateOrStartAffected(ResourceCollectionLifecycleFactory.java:190)
		at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.collectionAdded(ResourceCollectionLifecycleFactory.java:145)
		at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
		at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
		at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
		at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
		at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
		at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
		at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
		at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
		at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
		at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory.onStartup(ResourceCollectionLifecycleFactory.java:61)
		at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
		at com.inductiveautomation.ignition.gateway.config.NamedResourceHandler.onStartup(NamedResourceHandler.java:436)
		at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
		at com.inductiveautomation.ignition.gateway.auth.idp.IdentityProviderManager.startup(IdentityProviderManager.java:362)
		at com.inductiveautomation.ignition.gateway.IgnitionGateway.startupInternal(IgnitionGateway.java:1240)
		at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.startup(RedundancyManagerImpl.java:352)
		at com.inductiveautomation.ignition.gateway.IgnitionGateway.initRedundancy(IgnitionGateway.java:787)
		at com.inductiveautomation.ignition.gateway.IgnitionGateway.lambda$initInternal$1(IgnitionGateway.java:712)
		at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:550)
		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)
2 Likes

After some further digging we were able to replicate this upgrade issue. The following warning showed in the logs which helped lead to replication.

INFO   | jvm 1    | 2025/08/05 13:48:22 | W [c.i.i.g.a.i.IdentityProviderMigrationStrategy] [13:48:22.061]: User source profile with ID 6 does not exist 

The problem with “settings” being set to null during the upgrade is due to an IdP being migrated that references a user source that’s no longer available. This specifically will occur if the IdP was created in older versions of Ignition that referenced the User Source by ID instead of the current implementation of referencing by Name.

Edit: If anyone else runs into this before we get it fixed, you could remove any IdPs that are referencing non-existent user sources prior to upgrading. Or after the upgrade either delete the IdP configuration or modify the settings property in the config.json file for the Identity Provider that has settings set to null. Then stop/start the service.

The folder path and example settings are below.

\data\config\resources\core\ignition\identity-provider

  "settings": {
    "authMethods": [
      {
        "config": {},
        "type": "basic"
      }
    ],
    "rememberMeExp": 0,
    "sessionExp": 0,
    "sessionInactivityTimeout": 30,
    "userSource": "default"
  }
4 Likes