You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2024/08/29 13:29:04 UTC

(nifi) branch main updated: NIFI-13688 Checked Validation Status before Fetching Parameters

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 <ex...@apache.org>
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 <pi...@gmail.com>
    
    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) {