Scenario:
Using NiFi Registry to version control changes to the graph. A development
system is used to make all changes. Once the changes are "vetted", the
production system will pull down the latest version to get the changes.
Further, the goal is to automate the version update, and not require an
operator to manually perform the version update through the UI.

Now, consider the case where the new version removes a connection. When the
production system attempts to apply the new version, it will fail if there
are flowfiles in the queue of that removed connection. That's good in that
it prevents data loss. However, it prevents the versioned process group
from updating.

Are there suggested solutions to this - besides the obvious of manually
stopping the upstream flow and waiting for queue(s) to empty?

One option we discussed was to allow components affected by the version
change to be stopped "smartly". They would be ordered such that upstream
components are stopped first, then downstream, and lastly controller
services. (Is that being done currently?) Additionally, if a processor has
flowfiles in an upstream queue (that is being removed by the version
change), it would delay stopping the processor by some period of time thus
giving the opportunity for that queue to empty. Granted, this could become
problematic if there are many components that fall into this category.
Also, what is an appropriate "period of time"? For example, a delay of even
2 seconds could result in the overall process taking over a minute if there
are 30+ such connections.

Comments are welcome.

Thanks,
Mark

Reply via email to