This is an automated email from the ASF dual-hosted git repository.
bbende pushed a commit to branch NIFI-15258
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/NIFI-15258 by this push:
new c8728b5ca0 NIFI-15525: Ensure that we call onStepConfigured when we
restore flow; ensure that we synchronized Parmaeter Providers before Connectors
(#10835)
c8728b5ca0 is described below
commit c8728b5ca0b75ec2a3fb7db6f6dfc48042eeb508
Author: Mark Payne <[email protected]>
AuthorDate: Fri Jan 30 09:09:08 2026 -0500
NIFI-15525: Ensure that we call onStepConfigured when we restore flow;
ensure that we synchronized Parmaeter Providers before Connectors (#10835)
---
.../connector/secrets/ParameterProviderSecretsManager.java | 14 +++++++++++++-
.../nifi/components/connector/StandardConnectorNode.java | 8 ++++++--
.../serialization/VersionedFlowSynchronizer.java | 5 +++--
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
index edd1348393..524351a413 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
@@ -22,6 +22,8 @@ import org.apache.nifi.components.connector.SecretReference;
import org.apache.nifi.components.validation.ValidationStatus;
import org.apache.nifi.controller.ParameterProviderNode;
import org.apache.nifi.controller.flow.FlowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Comparator;
@@ -35,6 +37,7 @@ import java.util.function.Function;
import java.util.stream.Collectors;
public class ParameterProviderSecretsManager implements SecretsManager {
+ private static final Logger logger =
LoggerFactory.getLogger(ParameterProviderSecretsManager.class);
private FlowManager flowManager;
@Override
@@ -61,7 +64,12 @@ public class ParameterProviderSecretsManager implements
SecretsManager {
public Set<SecretProvider> getSecretProviders() {
final Set<SecretProvider> providers = new HashSet<>();
for (final ParameterProviderNode parameterProviderNode :
flowManager.getAllParameterProviders()) {
- if (parameterProviderNode.getValidationStatus() !=
ValidationStatus.VALID) {
+ ValidationStatus validationStatus =
parameterProviderNode.getValidationStatus();
+ if (validationStatus != ValidationStatus.VALID) {
+ validationStatus = parameterProviderNode.performValidation();
+ }
+ if (validationStatus != ValidationStatus.VALID) {
+ logger.debug("Will not use Parameter Provider {} as a Secret
Provider because it is not valid", parameterProviderNode.getName());
continue;
}
@@ -88,6 +96,10 @@ public class ParameterProviderSecretsManager implements
SecretsManager {
@Override
public Map<SecretReference, Secret> getSecrets(final Set<SecretReference>
secretReferences) {
+ if (secretReferences.isEmpty()) {
+ return Map.of();
+ }
+
// Partition secret references by Provider
final Map<SecretProvider, Set<SecretReference>> referencesByProvider =
new HashMap<>();
for (final SecretReference secretReference : secretReferences) {
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorNode.java
b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorNode.java
index ae5c73f4cb..7c3b5a8c9d 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorNode.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorNode.java
@@ -195,7 +195,7 @@ public class StandardConnectorNode implements ConnectorNode
{
// Configure the working config but do not apply
for (final VersionedConfigurationStep step : workingConfig) {
final StepConfiguration stepConfig = createStepConfiguration(step);
- setConfiguration(step.getName(), stepConfig);
+ setConfiguration(step.getName(), stepConfig, true);
}
}
@@ -311,9 +311,13 @@ public class StandardConnectorNode implements
ConnectorNode {
@Override
public void setConfiguration(final String stepName, final
StepConfiguration configuration) throws FlowUpdateException {
+ setConfiguration(stepName, configuration, false);
+ }
+
+ private void setConfiguration(final String stepName, final
StepConfiguration configuration, final boolean
forceOnConfigurationStepConfigured) throws FlowUpdateException {
// Update properties and check if the configuration changed.
final ConfigurationUpdateResult updateResult =
workingFlowContext.getConfigurationContext().setProperties(stepName,
configuration);
- if (updateResult == ConfigurationUpdateResult.NO_CHANGES) {
+ if (updateResult == ConfigurationUpdateResult.NO_CHANGES &&
!forceOnConfigurationStepConfigured) {
return;
}
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/VersionedFlowSynchronizer.java
b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/VersionedFlowSynchronizer.java
index 000a4897a5..1b8825971c 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/VersionedFlowSynchronizer.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/VersionedFlowSynchronizer.java
@@ -424,14 +424,15 @@ public class VersionedFlowSynchronizer implements
FlowSynchronizer {
versionedExternalFlow.setParameterContexts(versionedParameterContextMap);
versionedExternalFlow.setFlowContents(versionedFlow.getRootGroup());
- // Inherit Connectors first. Because Connectors are a bit
different, in that updates could result in Exceptions being thrown,
+ // Inherit Parameter Providers and Connectors first. Because
Connectors are a bit different, in that updates could result in Exceptions
being thrown,
// due to the fact that they manipulate the flow, and changes
can be aborted, we handle them first. This way, if there's any Exception,
// we can fail before updating parts of the flow that are not
managed by Connectors.
+ // Because Connectors may depend on Parameter Providers, we
need to ensure that we inherit Parameter Providers first.
+ inheritParameterProviders(controller, versionedFlow,
affectedComponentSet);
inheritConnectors(controller, versionedFlow);
// Inherit controller-level components.
inheritControllerServices(controller, versionedFlow,
affectedComponentSet);
- inheritParameterProviders(controller, versionedFlow,
affectedComponentSet);
inheritParameterContexts(controller, versionedFlow);
inheritReportingTasks(controller, versionedFlow,
affectedComponentSet);
inheritFlowAnalysisRules(controller, versionedFlow,
affectedComponentSet);