| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.nifi.provenance; |
| |
| import org.apache.nifi.flowfile.FlowFile; |
| import org.apache.nifi.processor.ProcessSession; |
| import org.apache.nifi.processor.Relationship; |
| |
| import java.util.Collection; |
| |
| /** |
| * ProvenanceReporter generates and records Provenance-related events. A |
| * ProvenanceReporter is always tied to a {@link ProcessSession}. Any events |
| * that are generated are reported to Provenance only after the session has been |
| * committed. If the session is rolled back, the events related to that session |
| * are purged. |
| */ |
| public interface ProvenanceReporter { |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#RECEIVE RECEIVE} that indicates that the given |
| * FlowFile was created from data received from an external source. |
| * |
| * @param flowFile the FlowFile that was received |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| */ |
| void receive(FlowFile flowFile, String transitUri); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#RECEIVE RECEIVE} that indicates that the given |
| * FlowFile was created from data received from the specified URI and that |
| * the source system used the specified identifier (a URI with namespace) to |
| * refer to the data. |
| * |
| * @param flowFile the FlowFile that was received |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param sourceSystemFlowFileIdentifier the URI/identifier that the source |
| * system uses to refer to the data; if this value is non-null and is not a |
| * URI, the prefix "urn:tdo:" will be used to form a URI. |
| */ |
| void receive(FlowFile flowFile, String transitUri, String sourceSystemFlowFileIdentifier); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#RECEIVE RECEIVE} that indicates that the given |
| * FlowFile was created from data received from an external source. |
| * |
| * @param flowFile the FlowFile that was received |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param transmissionMillis the number of milliseconds taken to transfer |
| * the data |
| */ |
| void receive(FlowFile flowFile, String transitUri, long transmissionMillis); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#RECEIVE RECEIVE} that indicates that the given |
| * FlowFile was created from data received from an external source and |
| * provides additional details about the receipt of the FlowFile, such as a |
| * remote system's Distinguished Name. |
| * |
| * @param flowFile the FlowFile that was received |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param details details about the receive event; for example, it may be |
| * relevant to include the DN of the sending system |
| * @param transmissionMillis the number of milliseconds taken to transfer |
| * the data |
| */ |
| void receive(FlowFile flowFile, String transitUri, String details, long transmissionMillis); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#RECEIVE RECEIVE} that indicates that the given |
| * FlowFile was created from data received from an external source and |
| * provides additional details about the receipt of the FlowFile, such as a |
| * remote system's Distinguished Name. |
| * |
| * @param flowFile the FlowFile that was received |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param sourceSystemFlowFileIdentifier the URI/identifier that the source |
| * system uses to refer to the data; if this value is non-null and is not a |
| * URI, the prefix "urn:tdo:" will be used to form a URI. |
| * @param details details about the receive event; for example, it may be |
| * relevant to include the DN of the sending system |
| * @param transmissionMillis the number of milliseconds taken to transfer |
| * the data |
| */ |
| void receive(FlowFile flowFile, String transitUri, String sourceSystemFlowFileIdentifier, String details, long transmissionMillis); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| */ |
| void send(FlowFile flowFile, String transitUri); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param details additional details related to the SEND event, such as a |
| * remote system's Distinguished Name |
| */ |
| void send(FlowFile flowFile, String transitUri, String details); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param transmissionMillis the number of milliseconds spent sending the |
| * data to the remote system |
| */ |
| void send(FlowFile flowFile, String transitUri, long transmissionMillis); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param details additional details related to the SEND event, such as a |
| * remote system's Distinguished Name |
| * @param transmissionMillis the number of milliseconds spent sending the |
| * data to the remote system |
| */ |
| void send(FlowFile flowFile, String transitUri, String details, long transmissionMillis); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param force if <code>true</code>, this event will be added to the |
| * Provenance Repository immediately and will still be persisted if the |
| * {@link nifi.processor.ProcessSession ProcessSession} to which this |
| * ProvenanceReporter is associated is rolled back. Otherwise, the Event |
| * will be recorded only on a successful session commit. |
| */ |
| void send(FlowFile flowFile, String transitUri, boolean force); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param details additional details related to the SEND event, such as a |
| * remote system's Distinguished Name |
| * @param force if <code>true</code>, this event will be added to the |
| * Provenance Repository immediately and will still be persisted if the |
| * {@link nifi.processor.ProcessSession ProcessSession} to which this |
| * ProvenanceReporter is associated is rolled back. Otherwise, the Event |
| * will be recorded only on a successful session commit. |
| */ |
| void send(FlowFile flowFile, String transitUri, String details, boolean force); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param transmissionMillis the number of milliseconds spent sending the |
| * data to the remote system |
| * @param force if <code>true</code>, this event will be added to the |
| * Provenance Repository immediately and will still be persisted if the |
| * {@link nifi.processor.ProcessSession ProcessSession} to which this |
| * ProvenanceReporter is associated is rolled back. Otherwise, the Event |
| * will be recorded only on a successful session commit. |
| */ |
| void send(FlowFile flowFile, String transitUri, long transmissionMillis, boolean force); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#SEND SEND} |
| * that indicates that a copy of the given FlowFile was sent to an external |
| * destination. The external destination may be a remote system or may be a |
| * local destination, such as the local file system but is external to NiFi. |
| * |
| * @param flowFile the FlowFile that was sent |
| * @param transitUri A URI that provides information about the System and |
| * Protocol information over which the transfer occurred. The intent of this |
| * field is such that both the sender and the receiver can publish the |
| * events to an external Enterprise-wide system that is then able to |
| * correlate the SEND and RECEIVE events. |
| * @param details additional details related to the SEND event, such as a |
| * remote system's Distinguished Name |
| * @param transmissionMillis the number of milliseconds spent sending the |
| * data to the remote system |
| * @param force if <code>true</code>, this event will be added to the |
| * Provenance Repository immediately and will still be persisted if the |
| * {@link nifi.processor.ProcessSession ProcessSession} to which this |
| * ProvenanceReporter is associated is rolled back. Otherwise, the Event |
| * will be recorded only on a successful session commit. |
| */ |
| void send(FlowFile flowFile, String transitUri, String details, long transmissionMillis, boolean force); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#ADDINFO ADDINFO} that provides a linkage |
| * between the given FlowFile and alternate identifier. This information can |
| * be useful if published to an external, enterprise-wide Provenance |
| * tracking system that is able to associate the data between different |
| * processes. |
| * |
| * @param flowFile the FlowFile for which the association should be made |
| * @param alternateIdentifierNamespace the namespace of the alternate system |
| * @param alternateIdentifier the identifier that the alternate system uses |
| * when referring to the data that is encompassed by this FlowFile |
| */ |
| void associate(FlowFile flowFile, String alternateIdentifierNamespace, String alternateIdentifier); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#FORK FORK} |
| * that establishes that the given parent was split into multiple child |
| * FlowFiles. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parent the FlowFile from which the children are derived |
| * @param children the FlowFiles that are derived from the parent. |
| */ |
| void fork(FlowFile parent, Collection<FlowFile> children); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#FORK FORK} |
| * that establishes that the given parent was split into multiple child |
| * FlowFiles. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parent the FlowFile from which the children are derived |
| * @param children the FlowFiles that are derived from the parent. |
| * @param details any details pertinent to the fork |
| */ |
| void fork(FlowFile parent, Collection<FlowFile> children, String details); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#FORK FORK} |
| * that establishes that the given parent was split into multiple child |
| * FlowFiles. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parent the FlowFile from which the children are derived |
| * @param children the FlowFiles that are derived from the parent. |
| * @param forkDuration the number of milliseconds that it took to perform |
| * the task |
| */ |
| void fork(FlowFile parent, Collection<FlowFile> children, long forkDuration); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#FORK FORK} |
| * that establishes that the given parent was split into multiple child |
| * FlowFiles. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parent the FlowFile from which the children are derived |
| * @param children the FlowFiles that are derived from the parent. |
| * @param details any details pertinent to the fork |
| * @param forkDuration the number of milliseconds that it took to perform |
| * the task |
| */ |
| void fork(FlowFile parent, Collection<FlowFile> children, String details, long forkDuration); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#JOIN JOIN} |
| * that establishes that the given parents were joined together to create a |
| * new child FlowFile. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parents the FlowFiles that are being joined together to create the |
| * child |
| * @param child the FlowFile that is being created by joining the parents |
| */ |
| void join(Collection<FlowFile> parents, FlowFile child); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#JOIN JOIN} |
| * that establishes that the given parents were joined together to create a |
| * new child FlowFile. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parents the FlowFiles that are being joined together to create the |
| * child |
| * @param child the FlowFile that is being created by joining the parents |
| * @param details any details pertinent to the event |
| */ |
| void join(Collection<FlowFile> parents, FlowFile child, String details); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#JOIN JOIN} |
| * that establishes that the given parents were joined together to create a |
| * new child FlowFile. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parents the FlowFiles that are being joined together to create the |
| * child |
| * @param child the FlowFile that is being created by joining the parents |
| * @param joinDuration the number of milliseconds that it took to join the |
| * FlowFiles |
| */ |
| void join(Collection<FlowFile> parents, FlowFile child, long joinDuration); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#JOIN JOIN} |
| * that establishes that the given parents were joined together to create a |
| * new child FlowFile. In general, this method does not need to be called by |
| * Processors, as the ProcessSession will handle this automatically for you |
| * when calling {@link ProcessSession#create(FlowFile)}. |
| * |
| * @param parents the FlowFiles that are being joined together to create the |
| * child |
| * @param child the FlowFile that is being created by joining the parents |
| * @param details any details pertinent to the event |
| * @param joinDuration the number of milliseconds that it took to join the |
| * FlowFiles |
| */ |
| void join(Collection<FlowFile> parents, FlowFile child, String details, long joinDuration); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#CLONE CLONE} |
| * that establishes that the given child is an exact replica of the parent. |
| * In general, this method does not need to be called by Processors, as the |
| * {@link ProcessSession} will handle this automatically for you when |
| * calling {@link ProcessSession#clone(FlowFile)} |
| * |
| * @param parent the FlowFile that was cloned |
| * @param child the clone |
| */ |
| void clone(FlowFile parent, FlowFile child); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#CONTENT_MODIFIED CONTENT_MODIFIED} that |
| * indicates that the content of the given FlowFile has been modified. One |
| * of the <code>modifyContent</code> methods should be called any time that |
| * the contents of a FlowFile are modified. |
| * |
| * @param flowFile the FlowFile whose content is being modified |
| */ |
| void modifyContent(FlowFile flowFile); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#CONTENT_MODIFIED CONTENT_MODIFIED} that |
| * indicates that the content of the given FlowFile has been modified. One |
| * of the <code>modifyContent</code> methods should be called any time that |
| * the contents of a FlowFile are modified. |
| * |
| * @param flowFile the FlowFile whose content is being modified |
| * @param details Any details about how the content of the FlowFile has been |
| * modified. Details should not be specified if they can be inferred by |
| * other information in the event, such as the name of the Processor, as |
| * specifying this information will add undue overhead |
| */ |
| void modifyContent(FlowFile flowFile, String details); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#CONTENT_MODIFIED CONTENT_MODIFIED} that |
| * indicates that the content of the given FlowFile has been modified. One |
| * of the <code>modifyContent</code> methods should be called any time that |
| * the contents of a FlowFile are modified. |
| * |
| * @param flowFile the FlowFile whose content is being modified |
| * @param processingMillis the number of milliseconds spent processing the |
| * FlowFile |
| */ |
| void modifyContent(FlowFile flowFile, long processingMillis); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#CONTENT_MODIFIED CONTENT_MODIFIED} that |
| * indicates that the content of the given FlowFile has been modified. One |
| * of the <code>modifyContent</code> methods should be called any time that |
| * the contents of a FlowFile are modified. |
| * |
| * @param flowFile the FlowFile whose content is being modified |
| * @param details Any details about how the content of the FlowFile has been |
| * modified. Details should not be specified if they can be inferred by |
| * other information in the event, such as the name of the Processor, as |
| * specifying this information will add undue overhead |
| * @param processingMillis the number of milliseconds spent processing the |
| * FlowFile |
| */ |
| void modifyContent(FlowFile flowFile, String details, long processingMillis); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#ATTRIBUTES_MODIFIED ATTRIBUTES_MODIFIED} that |
| * indicates that the Attributes of the given FlowFile were updated. It is |
| * not necessary to emit such an event for a FlowFile if other Events are |
| * already emitted by a Processor. For example, one should call both |
| * {@link #modifyContent(FlowFile)} and {@link #modifyAttributes(FlowFile)} |
| * for the same FlowFile in the same Processor. Rather, the Processor should |
| * call just the {@link #modifyContent(FlowFile)}, as the call to |
| * {@link #modifyContent(FlowFile)} will generate a Provenance Event that |
| * already contains all FlowFile attributes. As such, emitting another event |
| * that contains those attributes is unneeded and can result in a |
| * significant amount of overhead for storage and processing. |
| * |
| * @param flowFile the FlowFile whose attributes were modified |
| */ |
| void modifyAttributes(FlowFile flowFile); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#ATTRIBUTES_MODIFIED ATTRIBUTES_MODIFIED} that |
| * indicates that the Attributes of the given FlowFile were updated. It is |
| * not necessary to emit such an event for a FlowFile if other Events are |
| * already emitted by a Processor. For example, one should call both |
| * {@link #modifyContent(FlowFile)} and {@link #modifyAttributes(FlowFile)} |
| * for the same FlowFile in the same Processor. Rather, the Processor should |
| * call just the {@link #modifyContent(FlowFile)}, as the call to |
| * {@link #modifyContent(FlowFile)} will generate a Provenance Event that |
| * already contains all FlowFile attributes. As such, emitting another event |
| * that contains those attributes is unneeded and can result in a |
| * significant amount of overhead for storage and processing. |
| * |
| * @param flowFile the FlowFile whose attributes were modified |
| * @param details any details should be provided about the attribute |
| * modification |
| */ |
| void modifyAttributes(FlowFile flowFile, String details); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#ROUTE ROUTE} |
| * that indicates that the given FlowFile was routed to the given |
| * {@link Relationship}. <b>Note: </b> this Event is intended for Processors |
| * whose sole job it is to route FlowFiles and should NOT be used as a way |
| * to indicate that the given FlowFile was routed to a standard 'success' or |
| * 'failure' relationship. Doing so can be problematic, as DataFlow Managers |
| * often will loop 'failure' relationships back to the same processor. As |
| * such, emitting a Route event to indicate that a FlowFile was routed to |
| * 'failure' can result in creating thousands of Provenance Events for a |
| * given FlowFile, resulting in a very difficult-to- understand lineage. |
| * |
| * @param flowFile the FlowFile being routed |
| * @param relationship the Relationship to which the FlowFile was routed |
| */ |
| void route(FlowFile flowFile, Relationship relationship); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#ROUTE ROUTE} |
| * that indicates that the given FlowFile was routed to the given |
| * {@link Relationship}. <b>Note: </b> this Event is intended ONLY for |
| * Processors whose sole job it is to route FlowFiles and should NOT be used |
| * as a way to indicate that hte given FlowFile was routed to a standard |
| * 'success' or 'failure' relationship. Doing so can be problematic, as |
| * DataFlow Managers often will loop 'failure' relationships back to the |
| * same processor. As such, emitting a Route event to indicate that a |
| * FlowFile was routed to 'failure' can result in creating thousands of |
| * Provenance Events for a given FlowFile, resulting in a very difficult-to- |
| * understand lineage. |
| * |
| * @param flowFile the FlowFile being routed |
| * @param relationship the Relationship to which the FlowFile was routed |
| * @param details any details pertinent to the Route event, such as why the |
| * FlowFile was routed to the specified Relationship |
| */ |
| void route(FlowFile flowFile, Relationship relationship, String details); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#ROUTE ROUTE} |
| * that indicates that the given FlowFile was routed to the given |
| * {@link Relationship}. <b>Note: </b> this Event is intended ONLY for |
| * Processors whose sole job it is to route FlowFiles and should NOT be used |
| * as a way to indicate that hte given FlowFile was routed to a standard |
| * 'success' or 'failure' relationship. Doing so can be problematic, as |
| * DataFlow Managers often will loop 'failure' relationships back to the |
| * same processor. As such, emitting a Route event to indicate that a |
| * FlowFile was routed to 'failure' can result in creating thousands of |
| * Provenance Events for a given FlowFile, resulting in a very difficult-to- |
| * understand lineage. |
| * |
| * @param flowFile the FlowFile being routed |
| * @param relationship the Relationship to which the FlowFile was routed |
| * @param processingDuration the number of milliseconds that it took to |
| * determine how to route the FlowFile |
| */ |
| void route(FlowFile flowFile, Relationship relationship, long processingDuration); |
| |
| /** |
| * Emits a Provenance Event of type {@link ProvenanceEventType#ROUTE ROUTE} |
| * that indicates that the given FlowFile was routed to the given |
| * {@link Relationship}. <b>Note: </b> this Event is intended ONLY for |
| * Processors whose sole job it is to route FlowFiles and should NOT be used |
| * as a way to indicate that hte given FlowFile was routed to a standard |
| * 'success' or 'failure' relationship. Doing so can be problematic, as |
| * DataFlow Managers often will loop 'failure' relationships back to the |
| * same processor. As such, emitting a Route event to indicate that a |
| * FlowFile was routed to 'failure' can result in creating thousands of |
| * Provenance Events for a given FlowFile, resulting in a very difficult-to- |
| * understand lineage. |
| * |
| * @param flowFile the FlowFile being routed |
| * @param relationship the Relationship to which the FlowFile was routed |
| * @param details any details pertinent to the Route event, such as why the |
| * FlowFile was routed to the specified Relationship |
| * @param processingDuration the number of milliseconds that it took to |
| * determine how to route the FlowFile |
| */ |
| void route(FlowFile flowFile, Relationship relationship, String details, long processingDuration); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#CREATE CREATE} that indicates that the given |
| * FlowFile was created by NiFi from data that was not received from an |
| * external entity. If the data was received from an external source, use |
| * the {@link #receive(FlowFile, String)} event instead |
| * |
| * @param flowFile the FlowFile that was created |
| */ |
| void create(FlowFile flowFile); |
| |
| /** |
| * Emits a Provenance Event of type |
| * {@link ProvenanceEventType#CREATE CREATE} that indicates that the given |
| * FlowFile was created by NiFi from data that was not received from an |
| * external entity. If the data was received from an external source, use |
| * the {@link #receive(FlowFile, String, String, long)} event instead |
| * |
| * @param flowFile the FlowFile that was created |
| * @param details any relevant details about the CREATE event |
| */ |
| void create(FlowFile flowFile, String details); |
| } |