Skip to content

Commit eecad68

Browse files
committed
NIFI-15525: Ensure that we call onStepConfigured when we restore flow; ensure that we synchronized Parmaeter Providers before Connectors
1 parent 1348bb6 commit eecad68

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.apache.nifi.components.validation.ValidationStatus;
2323
import org.apache.nifi.controller.ParameterProviderNode;
2424
import org.apache.nifi.controller.flow.FlowManager;
25+
import org.slf4j.Logger;
26+
import org.slf4j.LoggerFactory;
2527

2628
import java.util.ArrayList;
2729
import java.util.Comparator;
@@ -35,6 +37,7 @@
3537
import java.util.stream.Collectors;
3638

3739
public class ParameterProviderSecretsManager implements SecretsManager {
40+
private static final Logger logger = LoggerFactory.getLogger(ParameterProviderSecretsManager.class);
3841
private FlowManager flowManager;
3942

4043
@Override
@@ -61,7 +64,12 @@ public List<Secret> getAllSecrets() {
6164
public Set<SecretProvider> getSecretProviders() {
6265
final Set<SecretProvider> providers = new HashSet<>();
6366
for (final ParameterProviderNode parameterProviderNode : flowManager.getAllParameterProviders()) {
64-
if (parameterProviderNode.getValidationStatus() != ValidationStatus.VALID) {
67+
ValidationStatus validationStatus = parameterProviderNode.getValidationStatus();
68+
if (validationStatus != ValidationStatus.VALID) {
69+
validationStatus = parameterProviderNode.performValidation();
70+
}
71+
if (validationStatus != ValidationStatus.VALID) {
72+
logger.debug("Will not use Parameter Provider {} as a Secret Provider because it is not valid", parameterProviderNode.getName());
6573
continue;
6674
}
6775

@@ -88,6 +96,10 @@ public Optional<Secret> getSecret(final SecretReference secretReference) {
8896

8997
@Override
9098
public Map<SecretReference, Secret> getSecrets(final Set<SecretReference> secretReferences) {
99+
if (secretReferences.isEmpty()) {
100+
return Map.of();
101+
}
102+
91103
// Partition secret references by Provider
92104
final Map<SecretProvider, Set<SecretReference>> referencesByProvider = new HashMap<>();
93105
for (final SecretReference secretReference : secretReferences) {

nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorNode.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public void inheritConfiguration(final List<VersionedConfigurationStep> activeCo
195195
// Configure the working config but do not apply
196196
for (final VersionedConfigurationStep step : workingConfig) {
197197
final StepConfiguration stepConfig = createStepConfiguration(step);
198-
setConfiguration(step.getName(), stepConfig);
198+
setConfiguration(step.getName(), stepConfig, true);
199199
}
200200
}
201201

@@ -311,9 +311,13 @@ public void abortUpdate(final Throwable cause) {
311311

312312
@Override
313313
public void setConfiguration(final String stepName, final StepConfiguration configuration) throws FlowUpdateException {
314+
setConfiguration(stepName, configuration, false);
315+
}
316+
317+
private void setConfiguration(final String stepName, final StepConfiguration configuration, final boolean forceOnConfigurationStepConfigured) throws FlowUpdateException {
314318
// Update properties and check if the configuration changed.
315319
final ConfigurationUpdateResult updateResult = workingFlowContext.getConfigurationContext().setProperties(stepName, configuration);
316-
if (updateResult == ConfigurationUpdateResult.NO_CHANGES) {
320+
if (updateResult == ConfigurationUpdateResult.NO_CHANGES && !forceOnConfigurationStepConfigured) {
317321
return;
318322
}
319323

nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/VersionedFlowSynchronizer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,14 +424,15 @@ private void synchronizeFlow(final FlowController controller, final DataFlow exi
424424
versionedExternalFlow.setParameterContexts(versionedParameterContextMap);
425425
versionedExternalFlow.setFlowContents(versionedFlow.getRootGroup());
426426

427-
// Inherit Connectors first. Because Connectors are a bit different, in that updates could result in Exceptions being thrown,
427+
// Inherit Parameter Providers and Connectors first. Because Connectors are a bit different, in that updates could result in Exceptions being thrown,
428428
// 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,
429429
// we can fail before updating parts of the flow that are not managed by Connectors.
430+
// Because Connectors may depend on Parameter Providers, we need to ensure that we inherit Parameter Providers first.
431+
inheritParameterProviders(controller, versionedFlow, affectedComponentSet);
430432
inheritConnectors(controller, versionedFlow);
431433

432434
// Inherit controller-level components.
433435
inheritControllerServices(controller, versionedFlow, affectedComponentSet);
434-
inheritParameterProviders(controller, versionedFlow, affectedComponentSet);
435436
inheritParameterContexts(controller, versionedFlow);
436437
inheritReportingTasks(controller, versionedFlow, affectedComponentSet);
437438
inheritFlowAnalysisRules(controller, versionedFlow, affectedComponentSet);

0 commit comments

Comments
 (0)