Adam Hunyadi created MINIFICPP-1288:
---------------------------------------

             Summary: Implement static flow configuration validation
                 Key: MINIFICPP-1288
                 URL: https://issues.apache.org/jira/browse/MINIFICPP-1288
             Project: Apache NiFi MiNiFi C++
          Issue Type: Task
            Reporter: Adam Hunyadi
            Assignee: Adam Hunyadi


*Background:*

MiNiFi flows are represented by yaml configuration files. When these are 
published to the FlowController in MiNiFi, it handles this as a “reconfigure 
and restart”. The current logic is:
 # Backup the old process group (in memory representation of the configuration).

 # Stop the FlowController.

 # Try to build up a new process group based on the new configuration.

 # If we fail during the construction of the process group nodes we should keep 
the backup, otherwise we let the new flow run and consider it validated.

This is not awful, but expects the checks implemented in terms of processor 
construction-time checks and separated cheks on the connection network.[ [The 
implementation is also not very 
robust]|https://github.com/apache/nifi-minifi-cpp/blob/rel/minifi-cpp-0.7.0/libminifi/src/core/ProcessGroup.cpp#L343-L359],
 so there is not much extra value in keeping it.

 

*Proposal:*

We should try and validate the configuration files before trying to reload 
using them. Not only would this make us fail earlier, but would have the checks 
a bit more decoupled from the processors. We already send processor 
configuratin requirement data via the heartbeat to EFM, so we have every piece 
of information needed to statically validate the configuration files.

This way the new logic should simplify to:
 # Validate the configuration

 # If it is valid load it, otherwise load it and any subsequent error should be 
considered runtime exception.

As this would potentially break configuration-file backward compatibilty, all 
the changes should be implemented behind a feature flag (build-time).

 



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

Reply via email to