:_mod-docs-content-type: ASSEMBLY
[id="update-paths"]
= Update paths
include::_attributes/common-attributes.adoc[]
:context: update-paths

toc::[]

When determining _update paths_, also known as upgrade edges or upgrade constraints, for an installed cluster extension, {olmv1-first} supports {olmv0} semantics starting in {product-title} 4.16. This support follows the behavior from {olmv0}, including `replaces`, `skips`, and `skipRange` directives, with a few noted differences.

By supporting {olmv0} semantics, {olmv1} accurately reflects the update graph from catalogs.

.Differences from original {olmv0} implementation

* If there are multiple possible successors, {olmv1} behavior differs in the following ways:
** In {olmv0}, the successor closest to the channel head is chosen.
** In {olmv1}, the successor with the highest semantic version (semver) is chosen.

* Consider the following set of file-based catalog (FBC) channel entries:
+
[source,yaml]
----
# ...
- name: example.v3.0.0
  skips: ["example.v2.0.0"]
- name: example.v2.0.0
  skipRange: >=1.0.0 <2.0.0
----
+
If `1.0.0` is installed, {olmv1} behavior differs in the following ways:
+
--
** {olmv0-caps} will not detect an update path to `v2.0.0` because `v2.0.0` is skipped and not on the `replaces` chain.
** {olmv1} will detect the update path because {olmv1} does not have a concept of a `replaces` chain. {olmv1} finds all entries that have a `replace`, `skip`, or `skipRange` value that covers the currently installed version.
--

[role="_additional-resources"]
.Additional resources
* xref:../../operators/understanding/olm/olm-workflow.adoc#olm-upgrades_olm-workflow[{olmv0-caps} upgrade semantics]

include::modules/olmv1-version-range-support.adoc[leveloffset=+1]

include::modules/olmv1-version-range-comparisons.adoc[leveloffset=+1]

include::modules/olmv1-about-target-versions.adoc[leveloffset=+1]

include::modules/olmv1-forcing-an-update-or-rollback.adoc[leveloffset=+1]

[role="_additional-resources"]
.Additional resources
* xref:../../extensions/ce/update-paths.adoc#olmv1-version-range-support_update-paths[Support for version ranges]
// after #82245 merges, add an xref to _Creating a service account to manage cluster extensions_

include::modules/olmv1-ocp-compat.adoc[leveloffset=+1]

[role="_additional-resources"]
.Additional resources
* link:https://kubernetes.io/docs/reference/using-api/deprecation-guide/[Deprecated API Migration Guide] (Kubernetes documentation)


include::modules/olmv1-blocked-cluster-updates.adoc[leveloffset=+2]

[role="_additional-resources"]
.Additional resources
* xref:../../updating/understanding_updates/intro-to-updates.adoc#understanding_clusteroperator_conditiontypes_understanding-openshift-updates[Understanding cluster Operator condition types]
* xref:../../operators/admin/olm-upgrading-operators.adoc#olm-upgrading-operators[Upgrading installed Operators]
* xref:../../operators/admin/olm-deleting-operators-from-cluster.adoc#olm-deleting-operators-from-a-cluster[Deleting Operators from a cluster]
* xref:../../operators/operator-reference.adoc#cluster-operators-ref-olmv1_operator-reference[Cluster Operators reference -> {olmv1-first} Operator]
