This is an automated email from the ASF dual-hosted git repository.
pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new bdaf514018 NIFI-13688 Checked Validation Status before Fetching
Parameters
bdaf514018 is described below
commit bdaf514018d580adf37e20b586f5b451eaa1684b
Author: exceptionfactory <[email protected]>
AuthorDate: Wed Aug 28 12:09:31 2024 -0500
NIFI-13688 Checked Validation Status before Fetching Parameters
- Added perform validation for Controller-level Services
- Added wait on Parameter Provider validation status to allow for
Controller Service enabling
Signed-off-by: Pierre Villard <[email protected]>
This closes #9210.
---
.../serialization/VersionedFlowSynchronizer.java | 25 ++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
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 c0e97327dc..d130bf4b92 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
@@ -26,6 +26,7 @@ import org.apache.nifi.authorization.ManagedAuthorizer;
import org.apache.nifi.bundle.BundleCoordinate;
import org.apache.nifi.cluster.protocol.DataFlow;
import org.apache.nifi.cluster.protocol.StandardDataFlow;
+import org.apache.nifi.components.validation.ValidationStatus;
import org.apache.nifi.connectable.Connectable;
import org.apache.nifi.connectable.Position;
import org.apache.nifi.controller.AbstractComponentNode;
@@ -122,6 +123,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -1037,6 +1039,11 @@ public class VersionedFlowSynchronizer implements
FlowSynchronizer {
// Enable any Controller-level services that are intended to be
enabled.
if (!toEnable.isEmpty()) {
controller.getControllerServiceProvider().enableControllerServices(toEnable);
+
+ // Validate Controller-level services
+ for (final ControllerServiceNode serviceNode : toEnable) {
+ serviceNode.performValidation();
+ }
}
// Disable any Controller-level services that are intended to be
disabled.
@@ -1048,15 +1055,25 @@ public class VersionedFlowSynchronizer implements
FlowSynchronizer {
}
private Map<String, Parameter> getProvidedParameters(final FlowManager
flowManager, final VersionedParameterContext versionedParameterContext) {
- final Map<String, Parameter> providedProviders;
+ final Map<String, Parameter> providedParameters;
final String parameterProviderId =
versionedParameterContext.getParameterProvider();
if (parameterProviderId == null) {
- providedProviders = Collections.emptyMap();
+ providedParameters = Collections.emptyMap();
} else {
final ParameterProviderNode parameterProviderNode =
flowManager.getParameterProvider(parameterProviderId);
- providedProviders = getProvidedParameters(parameterProviderNode,
versionedParameterContext.getParameterGroupName());
+
+ // Wait for Validation as needed for Parameter Providers with
Controller Services
+ final ValidationStatus validationStatus =
parameterProviderNode.getValidationStatus(10, TimeUnit.SECONDS);
+
+ final String parameterGroupName =
versionedParameterContext.getParameterGroupName();
+ if (ValidationStatus.VALID == validationStatus) {
+ providedParameters =
getProvidedParameters(parameterProviderNode, parameterGroupName);
+ } else {
+ logger.warn("Parameter Provider [{}] {}: Parameters not
available for Group [{}]", parameterProviderId, validationStatus,
parameterGroupName);
+ providedParameters = Collections.emptyMap();
+ }
}
- return providedProviders;
+ return providedParameters;
}
private Map<String, Parameter> getProvidedParameters(final
ParameterProviderNode parameterProviderNode, final String parameterGroupName) {