Goals

  • Allow rolling upgrade when a new version has removed NARs that are referenced by components in the current flow

Background

Many previous improvements have been made to the flow synchronization process to allow for smoother synchronization and for rolling upgrades. The current flow synchronization process compares the set of ghosted component ids from the cluster against the set from the local flow, and prevents joining the cluster when the sets are different. The general idea was to ensure consistency, such that a NAR is either missing on all nodes, or present on all nodes. However this presents a dilemma during a rolling upgrade from version X to version Y, where version Y removes a NAR that is in use by the flow (components exist in the flow that come from this NAR). When one of the nodes is restarted with version Y, the flow is loaded locally and the components from the removed NAR become ghosted. This node then attempts to connect to the cluster and when checking the cluster's flow the current node will throw an UninheritableFlowException  saying that the node has components that are ghosted locally, but are not ghosted in the cluster's flow.

Proposal

We can improve the above scenario by removing the MissingComponentsCheck  from VersionedFlowSynchronizer . This would allow the upgraded node to join the cluster with the ghosted components, while those same components are not ghosted on the other cluster nodes.  From the UI the components would be seen as ghosted and could not be modified. After each node upgrades and restarts, the components would be ghosted on all nodes.


  • No labels