A Processor's onTrigger method will be called only when it
is scheduled to run and when work exists for the Processor. Work is said to exist for a
Processor if any of the following conditions is met:

A Connection whose destination is the Processor has at least one FlowFile in
its queue

The Processors has no incoming Connections

The Processor is annotated with the @TriggerWhenEmpty annotation

Several factors exist that will contribute to when a Processor's
onTrigger method is invoked. First, the Processor will not be
triggered unless a user has configured the Processor to run. If a Processor is scheduled
to run, the Framework periodically (the period is configured by users in the User
Interface) checks if there is work for the Processor to do, as described above. If so,
the Framework will check downstream destinations of the Processor. If any of the
Processor's outbound Connections is full, by default, the Processor will not be
scheduled to run.

However, the @TriggerWhenAnyDestinationAvailable annotation may
be added to the Processor's class. In this case, the requirement is changed so that
only one downstream destination must be "available" (a destination is
considered "available" if the Connection's queue is not full), rather
than requiring that all downstream destinations be available.

Also related to Processor scheduling is the @TriggerSerially
annotation. Processors that use this Annotation will never have more than one thread
running the onTrigger method simultaneously. It is crucial to note,
though, that the thread executing the code may change from invocation to invocation.
Therefore, care must still be taken to ensure that the Processor is thread-safe!