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) {

Reply via email to