[
https://issues.apache.org/jira/browse/NIP-34?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18092971#comment-18092971
]
Kevin Doran commented on NIP-34:
--------------------------------
Thanks for the write-up. I'm supportive of this API enhancement
> Add migrateProperties API to Connector
> --------------------------------------
>
> Key: NIP-34
> URL: https://issues.apache.org/jira/browse/NIP-34
> Project: NiFi Improvement Proposal
> Issue Type: Improvement
> Reporter: Bob Paulin
> Priority: Major
>
> h2. Motivation
> {{Processor}} and {{ControllerService}} expose
> {{migrateProperties(PropertyConfiguration)}} so an extension can rename,
> remove, or re-shape its property descriptors over time without breaking flows
> that were persisted under the old shape. The framework invokes that hook
> whenever a component is restored from disk or imported from a flow definition.
> The {{Connector}} extension point from NIP-11 has no equivalent. Connector
> configuration is persisted in {{flow.json}} keyed by
> {{ConfigurationStep.getName()}} and
> {{{}ConnectorPropertyDescriptor.getName(){}}}, so any renamed descriptor,
> removed property, or renamed step silently drops user configuration on the
> next restart. This proposal gives Connectors parity with the Processor /
> Controller Service migration hook.
> h2. Scope
> {{nifi-api}} additions only:
> * New interface
> {{{}org.apache.nifi.migration.ConnectorPropertyConfiguration{}}}.
> * New interface
> {{{}org.apache.nifi.migration.ConnectorStepPropertyConfiguration{}}}.
> * New default no-op method
> {{migrateProperties(ConnectorPropertyConfiguration)}} on
> {{{}org.apache.nifi.components.connector.Connector{}}}.
> Out of scope: cross-flow migration via
> {{{}MigratableConnector.migrateConfiguration{}}}, which is a separate concern.
> h2. Description
> {{Connector.migrateProperties(ConnectorPropertyConfiguration)}} is invoked
> whenever a Connector is restored from a persisted configuration. The default
> implementation is a no-op.
> {{ConnectorPropertyConfiguration}} operates across configuration steps:
> {{{}getStepNames{}}}, {{{}hasStep{}}}, {{renameStep(old, new)}} (re-keys the
> entire step preserving every property and value reference; rejects
> destination collisions), {{{}removeStep{}}}, and {{forStep(stepName)}} which
> returns a per-step sub-view. The sub-view is registered the first time a
> property is written.
> {{ConnectorStepPropertyConfiguration}} mirrors
> {{org.apache.nifi.migration.PropertyConfiguration}} minus
> {{{}createControllerService{}}}, and adds typed value-reference operations to
> align with {{{}ConnectorMigrationContext.setValueReference(...){}}}. It
> exposes {{{}renameProperty{}}}, {{{}removeProperty{}}}, {{{}hasProperty{}}},
> {{{}isPropertySet{}}}, {{setProperty(String)}} for string literals,
> {{setValueReference(ConnectorValueReference)}} for typed sets (and removal
> when {{{}null{}}}), {{getPropertyValue}} (literal-string view),
> {{getValueReference}} (typed view), and {{getProperties}} /
> {{{}getValueReferences{}}}. Default overloads accept
> {{{}ConnectorPropertyDescriptor{}}}. All rename operations preserve the
> underlying {{ConnectorValueReference}} subtype, so {{SecretReference}} and
> {{AssetReference}} values survive a rename without conversion.
> Together these primitives cover common evolution cases: adding, removing, or
> renaming a property; moving a property across steps; and adding, removing, or
> renaming an entire {{ConfigurationStep}} with its properties intact. The
> framework invokes the hook from
> {{StandardConnectorNode.inheritConfiguration(...)}} for both the active and
> working configuration on every restart and flow import, then drives the
> existing per-step {{setConfiguration(..., force=true)}} callbacks from the
> post-migration map. Migrated names are persisted on the next {{flow.json}}
> save, similar to how Processor and Controller Service migration propagates
> today.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)