Use the update compatibility command to determine if you can update your deployment with a rolling update strategy when enabling or disabling features or changing the {project_name} version, configurations or providers and themes.
The outcome shows whether a rolling update is possible or if a recreate update is required.
In its current version, it shows that a rolling update is possible when the {project_name} version is the same for the old and the new version.
Future versions of {project_name} might change that behavior to use additional information from the configuration, the image and the version to determine if a rolling update is possible.
This is fully scriptable, so your update procedure can use that information to perform a rolling or recreate strategy depending on the change performed.
It is also GitOps friendly, as it allows storing the metadata of the previous configuration in a file. Use this file in a CI/CD pipeline with the new configuration to determine if a rolling update is possible or if a recreate update is needed.
If you are using the {project_name} Operator, continue to the <@links.operator id="rolling-updates" /> {section} and the `Auto` strategy for more information.
== Supported update strategies
Rolling Update::
In this guide, a rolling update is an update that can be performed with zero downtime for your deployment, which consists of at least two nodes.
Update your {project_name} one by one; shut down one of your old deployment nodes and start a new deployment node.
Wait until the new node's start-up probe returns success before proceeding to the next {project_name} node. See {section} <@links.observability id="health"/> for details on how to enable and use the start-up probe.
NOTE: If you do not use `--optimized` keep in mind that an `update` command may implicitly create or update an optimized build for you - if you are running the command from the same machine as a server instance, this may impact the next start of your server.
Instead, they should rely only on the exit code of the `check` command to benefit from future enhancements on the internal logic to determine when a rolling update is possible.
| `--cache` | The `ispn` and `local` configurations are mutually exclusive, changing from one to another will lead to data loss.
| `--cache-config-file` | Changing the configuration file could result in incompatible cache or transport configurations, resulting in clusters not forming as expected.
| `--cache-stack` | Changing stack will result in the cluster not forming during rolling update and will lead to data loss.
| `--cache-embedded-mtls-enabled` | Enabling/Disabling TLS will result in the cluster not forming during rolling update and will lead to data loss.
| `--cache-remote-host` | Connecting to a new remote cache will cause previously cached data to be lost.
| `--cache-remote-port` | Connecting to a new remote cache will cause previously cached data to be lost.
|===
[WARNING]
====
{project_name} does not verify changes to the content of the cache configuration file provided via `--cache-config-file`.
If you change this file, you need to review and test your changes to ensure that nodes using the new configuration can form a cluster with the nodes running the old configuration.
If a cluster cannot be formed, you should shut down {project_name} running the old configuration first before migrating to the new configuration.
* Enable sticky sessions in your loadbalancer to avoid users bouncing between different versions of {project_name} as this could result in users needing to refresh their Account Console and Admin UI multiple times while the upgrade is progressing.
Supported functionality during rolling updates:
* Users can log in and log out for OpenID Connect clients.
* OpenID Connect clients can perform all operations, for example, refreshing tokens and querying the user info endpoint.
Known limitations:
* If there have been changes to the Account Console or Admin UI in the patch release, and the user opened the Account Console or Admin UI before or during the upgrade, the user might see an error message and be asked to reload the application while navigating in browser during or after the upgrade.
The {project_name} Operator uses the functionality described above to determine if a rolling update is possible. See the <@links.operator id="rolling-updates" /> {section} and the `Auto` strategy for more information.