Uploaded image for project: 'Apache NiFi'
  1. Apache NiFi
  2. NIFI-12016

Improve leniency for bundle compatibility to allow for rolling upgrades

    XMLWordPrintableJSON

Details

    Description

      When NiFi loads a flow from disk, if the flow indicates that a components exists with version X, but version X of the nar is not available, we automatically change the version to version Y, provided that (a) Version Y is available and (b) Version Y is the only available version.

      However, when attempting to join a cluster, we do not allow for this. The exact version of the NAR that is specified in the flow must be available. Otherwise, the node will not join the cluster.

      This was done because we did not want to have a case where we have different versions of NiFi running on different nodes in a cluster. If this is the case, then the nodes will behave differently, but also the UI will show that the version is X even though one of the nodes may be running version Y.

      This seems reasonable, but it has caused major issues in one respect: it makes it impossible to perform a rolling upgrade of a NiFi cluster. It means that the entire cluster must be stopped and upgraded at the same time.

      Additionally, the logic comes with another downside. Because we allow multiple versions of a NAR to be loaded, the following scenario is common:

      A cluster is running with one version, say 2.2.0. But the user also has version 2.1.1 of a particular NAR. Now, when the user upgrades to version 2.4.0, the flow says that Processor X should be version 2.2.0. Now, version 2.4.0 is available but 2.2.0 is not. However, we do not use version 2.4.0, because there are two versions available: 2.1.1 and 2.4.0. Instead, we just "ghost" the component, and it's up to the user to notice this and go in and change the version on that component.

      This is easily avoided by making a small change to the logic. Instead of finding a compatible version only when there is exactly 1 version available, we should find a compatible version EITHER when exactly 1 version is available, OR when one of the version is equal to the version of the framework. So in the example above, it means that we'd update the version to 2.4.0.

      Making these changes should allow for rolling upgrades of NiFi.

      Attachments

        Issue Links

          Activity

            People

              markap14 Mark Payne
              markap14 Mark Payne
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 50m
                  50m