[ 
https://issues.apache.org/jira/browse/NIFI-7380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pierre Villard updated NIFI-7380:
---------------------------------
    Description: 
When the flow executed with the NiFi Stateless running mode contains a 
Controller Service with required properties, it'll fail as it does not take 
into account the configuration when performing the validation of the component.

In *StatelessControllerServiceLookup*, the method
{code:java}
public void enableControllerServices(final VariableRegistry variableRegistry) 
{code}
first validates the configured controller services and calls
{code:java}
public Collection<ValidationResult> validate(...){code}
This will create a *StatelessProcessContext* object and a 
*StatelessValidationContext* object. Then the method *validate* is called on 
the controller service and pass the validation context as argument. It will go 
through the properties of the controller service and will retrieve the 
configured value of the properties as set in the *StatelessProcessContext* 
object. The problem is that the *properties* map in the Stateless Process 
Context supposed to contain the configured values is never set. As such, any 
required property in a Controller Service is considered as configured with a 
null value if there is no default value. This will cause the component 
validation to fail and the flow won't be executed.

I opened a PR with a solution that does solve this issue. However I'm not sure 
this issue does not affect other scenarios and a better approach could be 
necessary (more in line with what is done in NiFi core).

  was:
When the flow executed with the NiFi Stateless running mode contains a 
Controller Service with required properties, it'll fail as it does not take 
into account the configuration when performing the validation of the component.

In *StatelessControllerServiceLookup*, the method

 
{code:java}
public void enableControllerServices(final VariableRegistry variableRegistry) 
{code}
first validates the configured controller services and calls
{code:java}
public Collection<ValidationResult> validate(...){code}
This will create a *StatelessProcessContext* object and a 
*StatelessValidationContext* object. Then the method *validate* is called on 
the controller service and pass the validation context as argument. It will go 
through the properties of the controller service and will retrieve the 
configured value of the properties as set in the *StatelessProcessContext* 
object. The problem is that the *properties* map in the Stateless Process 
Context supposed to contain the configured values is never set. As such, any 
required property in a Controller Service is considered as configured with a 
null value if there is no default value. This will cause the component 
validation to fail and the flow won't be executed.

I opened a PR with a solution that does solve this issue. However I'm not sure 
this issue does not affect other scenarios and a better approach could be 
necessary (more in line with what is done in NiFi core).


> NiFi Stateless does not validate CS correctly
> ---------------------------------------------
>
>                 Key: NIFI-7380
>                 URL: https://issues.apache.org/jira/browse/NIFI-7380
>             Project: Apache NiFi
>          Issue Type: Bug
>            Reporter: Pierre Villard
>            Assignee: Pierre Villard
>            Priority: Critical
>              Labels: nifi-stateless, stateless
>
> When the flow executed with the NiFi Stateless running mode contains a 
> Controller Service with required properties, it'll fail as it does not take 
> into account the configuration when performing the validation of the 
> component.
> In *StatelessControllerServiceLookup*, the method
> {code:java}
> public void enableControllerServices(final VariableRegistry variableRegistry) 
> {code}
> first validates the configured controller services and calls
> {code:java}
> public Collection<ValidationResult> validate(...){code}
> This will create a *StatelessProcessContext* object and a 
> *StatelessValidationContext* object. Then the method *validate* is called on 
> the controller service and pass the validation context as argument. It will 
> go through the properties of the controller service and will retrieve the 
> configured value of the properties as set in the *StatelessProcessContext* 
> object. The problem is that the *properties* map in the Stateless Process 
> Context supposed to contain the configured values is never set. As such, any 
> required property in a Controller Service is considered as configured with a 
> null value if there is no default value. This will cause the component 
> validation to fail and the flow won't be executed.
> I opened a PR with a solution that does solve this issue. However I'm not 
> sure this issue does not affect other scenarios and a better approach could 
> be necessary (more in line with what is done in NiFi core).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to