[
https://issues.apache.org/jira/browse/NIFI-15696?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pierre Villard updated NIFI-15696:
----------------------------------
Status: Patch Available (was: Open)
> Add Rebase operation for versioned process groups
> -------------------------------------------------
>
> Key: NIFI-15696
> URL: https://issues.apache.org/jira/browse/NIFI-15696
> Project: Apache NiFi
> Issue Type: New Feature
> Components: Flow Versioning
> Reporter: Pierre Villard
> Assignee: Pierre Villard
> Priority: Major
>
> When a versioned process group is at version N with local modifications
> (state {*}LOCALLY_MODIFIED_AND_STALE{*}), upgrading to a newer version
> requires reverting all local changes first, then changing version, then
> manually re-applying every customization. This is error-prone, causes
> unnecessary downtime, and discourages users from upgrading.
> This change adds a "Rebase" operation that upgrades a versioned process group
> to a newer registry version while automatically preserving compatible local
> changes — analogous to git rebase.
> {*}How it works{*}:
> The rebase operation has two phases:
> # Analysis (read-only): Computes a three-way diff between the local flow,
> the base registry version (N), and the target registry version. Each local
> change is classified as Compatible (will be preserved), Conflicting (same
> field changed both locally and upstream to different values), or Unsupported
> (change type not yet supported by a rebase handler). Rebase is only allowed
> when all local changes are compatible.
> # Execution: Deep-clones the target version snapshot, overlays compatible
> local changes onto it to produce a merged snapshot, then synchronizes the
> process group to the merged snapshot using the existing FlowUpdateResource
> async infrastructure. The VCI is set to the clean target version so that
> subsequent state checks correctly report LOCALLY_MODIFIED.
> Supported change types (for this first iteration, this will evolve over time):
> * POSITION_CHANGED, SIZE_CHANGED, BENDPOINTS_CHANGED — cosmetic, always
> compatible (local wins)
> * PROPERTY_CHANGED, PROPERTY_ADDED — compatible unless upstream changed the
> same property on the same component to a different value (convergent changes
> where both sides set the same value are accepted)
> * COMMENTS_CHANGED — compatible unless upstream also changed comments on the
> same component
> Unsupported change types (examples: COMPONENT_ADDED, COMPONENT_REMOVED) block
> the rebase with a clear message. The handler architecture is extensible —
> adding support for a new change type requires only implementing a single
> RebaseHandler class.
> We follow a similar approach as what already exists for the new API endpoints:
> * GET
> /versions/rebase-analysis/process-groups/\{id}?targetVersion=\{version}
> returns the three-way analysis
> * POST /versions/rebase-requests/process-groups/\{id}
> initiates async rebase execution
> * GET/DELETE /versions/rebase-requests/\{id}
> polling and cleanup (reuses FlowUpdateResource)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)