An Ignition gateway upgraded from 8.1 installs cleanly, then aborts during context startup because one migrated identity provider (IdP) resource carries "settings": null. The IdP was created in an older 8.1 release that pointed at its user source by numeric ID. That user source no longer exists, so the migration writes an IdP with no settings. The 8.3 validator then throws a NullPointerException when it calls authMethods() on that null object. Inductive Automation tracks the defect as IGN-13838. One reported occurrence was an upgrade from 8.1.51 to 8.3.2.
Where in the startup sequence does the gateway stop?
Read the stack trace bottom-up, the way the request actually travels. The service wrapper launches the JVM. The JVM starts the gateway context. The context starts redundancy, then the identity provider manager, which loads every IdP resource from disk and validates it. The failure happens at the last hop:
| Hop | Frame in wrapper.log | What happens at this hop |
|---|---|---|
| 1 |
IgnitionGateway.initRedundancy / RedundancyManagerImpl.startup
|
Redundancy layer starts and hands control to the gateway context |
| 2 |
IgnitionGateway.startupInternal (line 1240) |
Context starts its subsystems in order |
| 3 | IdentityProviderManager.startup |
IdP subsystem begins loading its resource collection |
| 4 | NamedResourceHandler$Lifecycle.onStartup |
Each IdP resource is streamed through the decoder |
| 5 |
JsonResourceCodec.decode → ExtensionPointResourceCodec.decodeFromJson → validateSettings
|
The IdP's config.json is parsed and handed to its type validator |
| 6 |
InternalIdentityProviderType.validate (line 99) |
Validator calls settings.authMethods(); settings is null, so the call throws |
The exception is not contained at the IdP level. It propagates up to the context startup, which logs Error during context startup and leaves the gateway down. A single bad IdP file therefore takes the whole gateway offline, including the web interface.
Check: Open wrapper.log in the installation's logs directory. Search for Error during context startup. Confirm the next line reads:
java.lang.NullPointerException: Cannot invoke "com.inductiveautomation.ignition.gateway.auth.idp.internal.InternalIdentityProviderConfig.authMethods()" because "settings" is null
If the top frame is a different class, you have a different startup failure. Skip to the section on persistent failures and follow that decision path.
Why does the installer report success when the gateway cannot start?
The installer only replaces binaries. It does not convert your configuration. The 8.1 configuration is migrated into 8.3's file-based resources under data\config\resources when the gateway boots. During that migration, IdentityProviderMigrationStrategy resolves each IdP's user source reference.
Older 8.1 IdPs stored the user source as a numeric profile ID. Current builds store it by name. If that ID no longer maps to a user source, the migration logs a warning and writes the IdP with settings set to null. The resource is left on disk. Every later startup then reads it and fails at hop 6.
The warning and the fatal error are separated in time. In the captured log, the warning appeared at 13:48:22 and the context startup error at 13:59:51. If you only read the tail of the log, you will miss the cause.
| Symptom | Cause | Where to look |
|---|---|---|
| Installer finishes successfully; gateway never comes up | Configuration migration fails at first boot, not at install time |
wrapper.log, first boot after upgrade |
W [c.i.i.g.a.i.IdentityProviderMigrationStrategy] ... User source profile with ID 6 does not exist
|
An IdP references a deleted user source by ID |
wrapper.log, migration phase |
NPE on authMethods() because settings is null |
The migrated IdP's config.json contains "settings": null
|
data\config\resources\core\ignition\identity-provider |
| Same NPE after editing one file | A second IdP is also null, the wrong folder was edited, or the service was not restarted | Search all IdP config.json files |
Check: Search wrapper.log for IdentityProviderMigrationStrategy. Record every user source ID it reports as missing. Each one is a separate broken IdP.
How do you clear the orphaned reference before upgrading?
This path avoids the failure entirely. Use it if the gateway is still on 8.1, or if you restore 8.1 to retry the upgrade.
- Take a gateway backup (
.gwbk) of the running 8.1 gateway. - List the user sources that exist on the gateway.
- Open the Identity Providers page in the gateway's security configuration. Check which user source each internal IdP authenticates against.
- Handle any IdP that points at a user source that is not in the list from step 2. Either delete it, or recreate it against a user source that exists. An IdP created in the current build references its user source by name.
- If the removed IdP was bound to gateway security or to project security, rebind those items to a working IdP.
- Take a second
.gwbk, then run the upgrade.
Check: On first 8.3 boot, wrapper.log contains no User source profile with ID ... does not exist lines. It also contains no Error during context startup.
How do you repair the identity-provider config.json on an upgraded gateway?
If the gateway is already on 8.3 and down, fix the resource file directly.
- Stop the Ignition service.
- Copy the
data\configdirectory to a safe location so you can revert. - Navigate to
<install dir>\data\config\resources\core\ignition\identity-provider. Each IdP has its own subfolder containing aconfig.json. - Find every
config.jsonthat contains"settings": null. Use the search command below. - For each one, choose a fix:
- Delete the IdP's folder if nothing on the gateway uses that IdP.
- Replace the null with a valid settings object if gateway security or a project depends on the IdP.
- Set
userSourceto the name of a user source that exists on this gateway.defaultworks only if a user source with that name exists. - Save the file as valid JSON with no trailing commas, then start the service.
Replacement settings block:
"settings": {
"authMethods": [
{
"config": {},
"type": "basic"
}
],
"rememberMeExp": 0,
"sessionExp": 0,
"sessionInactivityTimeout": 30,
"userSource": "default"
}
| Key | Example value | What to set |
|---|---|---|
authMethods |
one entry, type = basic, empty config
|
Must be a non-empty array. This is the value the validator reads at line 99. |
rememberMeExp |
0 |
Restore your site value later from the IdP settings page. |
sessionExp |
0 |
Restore your site value later from the IdP settings page. |
sessionInactivityTimeout |
30 |
Restore your site value later from the IdP settings page. |
userSource |
default |
Name of an existing user source. Do not use the old numeric ID. |
Check: Before starting the service, confirm no null settings remain and each edited file parses:
Get-ChildItem "<install dir>\data\config\resources\core\ignition\identity-provider" -Recurse -Filter config.json |
Select-String -Pattern '"settings"\s*:\s*null'
Get-Content "<path to edited>\config.json" -Raw | ConvertFrom-Json
The first command must return nothing. The second must return an object without a parse error.
What if the gateway still fails after the config.json edit?
At least one 8.1.51 to 8.3.2 upgrade kept failing after the IdP file looked correct. Do not keep re-editing the same file. Restart once, take the first error of the new boot from a fresh wrapper.log, and route from there:
| First error after the edit | Meaning | Next action |
|---|---|---|
| Same NPE, same frames | Another IdP is still null, you edited a copy rather than the live folder, or the service never restarted | Rerun the Select-String search against the live install path. Confirm the service stop/start actually completed. |
JSON parse or decode error in JsonResourceCodec
|
Syntax damage from the edit | Restore the file from your copy and reapply the block. Watch for trailing commas and mismatched braces. |
Validation or NPE from a different class under com.inductiveautomation.ignition.gateway
|
A different resource type migrated badly | Map the package name to its resource folder under data\config\resources. Inspect that resource for null or empty settings. |
| Gateway starts but logins fail |
userSource names a user source that does not exist |
Correct the name to an existing user source. |
| New migration warnings for other user source IDs | More than one orphaned IdP | Repeat the repair for each ID reported. |
If no single-file fix clears the error, roll back:
- Restore the 8.1 installation.
- Restore the pre-upgrade
.gwbk. - Remove the orphaned IdPs on 8.1, as described in the pre-upgrade section.
- Upgrade again.
For escalation, send Inductive Automation support the full wrapper.log and the .gwbk, and reference IGN-13838. The complete NPE stack trace and the migration warnings are what they need to reproduce the failure.
Check: The fresh wrapper.log shows no Error during context startup after the edit or rollback.
How do you confirm the gateway and its logins work end to end?
A clean boot proves the resource decodes. It does not prove authentication works through the repaired IdP. Walk the login path hop by hop:
- Start the service. Follow
wrapper.logthrough startup and confirm noError during context startupand no newIdentityProviderMigrationStrategywarnings. - Load the gateway web page from a remote browser, not only from localhost. This confirms the web server is listening on the network.
- Log in to the gateway configuration pages using an account from the user source named in
userSource. - Open the repaired IdP on the Identity Providers page. Restore the site values for
rememberMeExp,sessionExpandsessionInactivityTimeout, then save from the UI. Saving from the UI lets the gateway rewriteconfig.jsonitself. - Launch the Designer and authenticate. If the IdP is bound to any Perspective projects, open a session and log in through it.
- Take a new
.gwbkof the working 8.3 gateway. - Restart the service one more time. Confirm
wrapper.logreaches a clean startup again. This proves the repaired resource survives a cold decode, not just the first boot after the edit.
FAQ
What happens if I delete the identity provider folder instead of repairing config.json?
The gateway starts without that IdP. Anything bound to it, such as gateway security or Perspective project logins, loses its authentication path. Delete it only when nothing references it; otherwise rebind those items or repair the settings block.
What happens if I upgrade from 8.1 again without cleaning up the identity providers?
The migration logs User source profile with ID N does not exist again and writes the IdP with "settings": null. The next boot then fails with the same authMethods() NPE. Remove or recreate every IdP that points at a missing user source on 8.1 first.
What happens if the userSource name in the repaired config.json does not exist?
The file passes the null check, but logins through that IdP fail because they cannot reach a user source. Set userSource to the exact name of an existing user source, and test a login before closing out.
How do I find which identity provider broke the Ignition 8.3 upgrade?
Search wrapper.log for IdentityProviderMigrationStrategy warnings to get the missing user source IDs. Then search every config.json under data\config\resources\core\ignition\identity-provider for "settings": null. Each match is a folder you must repair or remove.