public interface ProcessSession
A process session encompasses all the behaviors a processor can perform to obtain, clone, read, modify remove FlowFiles in an atomic unit. A process session is always tied to a single processor at any one time and ensures no FlowFile can ever be accessed by any more than one processor at a given time. The session also ensures that all FlowFiles are always accounted for. The creator of a ProcessSession is always required to manage the session.
A session is not considered thread safe. The session supports a unit of work that is either committed or rolled back
As noted on specific methods and for specific exceptions automated rollback will occur to ensure consistency of the repository. However, several situations can result in exceptions yet not cause automated rollback. In these cases the consistency of the repository will be retained but callers will be able to indicate whether it should result in rollback or continue on toward a commit.
A process session has two 'terminal' methods that will result in the process session
being in a 'fresh', containing no knowledge or any FlowFile, as if the session were newly
created. After one of these methods is called, the instance may be used again. The terminal
methods for a Process Session are the commit()
and rollback()
. Additionally,
the migrate(ProcessSession, Collection)
method results in this
containing
no knowledge of any of the FlowFiles that are provided, as if the FlowFiles never existed in
this ProcessSession. After each commit or rollback, the session can be used again. Note, however,
that even if all FlowFiles are migrated via the migrate(ProcessSession, Collection)
method,
this Process Session is not entirely cleared, as it still has knowledge of Counters that were adjusted
via the adjustCounter(String, long, boolean)
method. A commit or rollback will clear these
counters, as well.
Modifier and Type | Method and Description |
---|---|
void |
adjustCounter(String name,
long delta,
boolean immediate)
Adjusts counter data for the given counter name and takes care of
registering the counter if not already present.
|
FlowFile |
append(FlowFile source,
OutputStreamCallback writer)
Executes the given callback against the content corresponding to the
given FlowFile, such that any data written to the OutputStream of the
content will be appended to the end of FlowFile.
|
void |
clearState(Scope scope)
Clears all keys and values from the component's state when the session is committed
|
FlowFile |
clone(FlowFile example)
Creates a new FlowFile that is a clone of the given FlowFile as of the
time this is called, both in content and attributes.
|
FlowFile |
clone(FlowFile parent,
long offset,
long size)
Creates a new FlowFile whose parent is the given FlowFile.
|
void |
commit()
Commits the current session ensuring all operations against FlowFiles
within this session are atomically persisted.
|
void |
commitAsync()
Commits the current session ensuring all operations against FlowFiles
within this session are atomically persisted.
|
default void |
commitAsync(Runnable onSuccess)
Commits the current session ensuring all operations against FlowFiles
within this session are atomically persisted.
|
void |
commitAsync(Runnable onSuccess,
Consumer<Throwable> onFailure)
Commits the current session ensuring all operations against FlowFiles
within this session are atomically persisted.
|
FlowFile |
create()
Creates a new FlowFile in the repository with no content and without any
linkage to a parent FlowFile.
|
FlowFile |
create(Collection<FlowFile> parents)
Creates a new FlowFile in the repository with no content but with a
parent linkage to the FlowFiles specified by the parents Collection.
|
FlowFile |
create(FlowFile parent)
Creates a new FlowFile in the repository with no content but with a
parent linkage to
parent . |
void |
exportTo(FlowFile flowFile,
OutputStream destination)
Writes the content of the given FlowFile to the given destination stream
|
void |
exportTo(FlowFile flowFile,
Path destination,
boolean append)
Writes the content of the given FlowFile to the given destination path.
|
FlowFile |
get() |
List<FlowFile> |
get(FlowFileFilter filter)
Returns all FlowFiles from all of the incoming queues for which the given
FlowFileFilter indicates should be accepted. |
List<FlowFile> |
get(int maxResults)
Returns up to
maxResults FlowFiles from the work queue. |
ProvenanceReporter |
getProvenanceReporter()
Returns a ProvenanceReporter that is tied to this ProcessSession.
|
QueueSize |
getQueueSize() |
StateMap |
getState(Scope scope)
Returns the current state for the component.
|
FlowFile |
importFrom(InputStream source,
FlowFile destination)
Writes to the given FlowFile all content from the given content path.
|
FlowFile |
importFrom(Path source,
boolean keepSourceFile,
FlowFile destination)
Writes to the given FlowFile all content from the given content path.
|
FlowFile |
merge(Collection<FlowFile> sources,
FlowFile destination)
Combines the content of all given source FlowFiles into a single given
destination FlowFile.
|
FlowFile |
merge(Collection<FlowFile> sources,
FlowFile destination,
byte[] header,
byte[] footer,
byte[] demarcator)
Combines the content of all given source FlowFiles into a single given
destination FlowFile.
|
void |
migrate(ProcessSession newOwner)
Migrates all FlowFiles to the given new owner as described in
migrate(ProcessSession, Collection) |
void |
migrate(ProcessSession newOwner,
Collection<FlowFile> flowFiles)
Migrates ownership of the given FlowFiles from
this to the given newOwner . |
FlowFile |
penalize(FlowFile flowFile)
Sets a penalty for the given FlowFile which will make it unavailable to
be operated on any further during the penalty period.
|
FlowFile |
putAllAttributes(FlowFile flowFile,
Map<String,String> attributes)
Updates the given FlowFiles attributes with the given key/value pairs.
|
FlowFile |
putAttribute(FlowFile flowFile,
String key,
String value)
Updates the given FlowFiles attributes with the given key/value pair.
|
InputStream |
read(FlowFile flowFile)
Provides an InputStream that can be used to read the contents of the given FlowFile.
|
void |
read(FlowFile source,
boolean allowSessionStreamManagement,
InputStreamCallback reader)
Executes the given callback against the contents corresponding to the
given FlowFile.
|
void |
read(FlowFile source,
InputStreamCallback reader)
Executes the given callback against the contents corresponding to the
given FlowFile.
|
void |
remove(Collection<FlowFile> flowFiles)
Ends the managed persistence for the given FlowFiles.
|
void |
remove(FlowFile flowFile)
Ends the managed persistence for the given FlowFile.
|
FlowFile |
removeAllAttributes(FlowFile flowFile,
Pattern keyPattern)
Remove all attributes from the given FlowFile that have keys which match
the given pattern.
|
FlowFile |
removeAllAttributes(FlowFile flowFile,
Set<String> keys)
Removes the attributes with the given keys from the given FlowFile.
|
FlowFile |
removeAttribute(FlowFile flowFile,
String key)
Removes the given FlowFile attribute with the given key.
|
boolean |
replaceState(StateMap oldValue,
Map<String,String> newValue,
Scope scope)
Updates the value of the component's state to the new value if and only if the value currently
is the same as the given oldValue.
|
void |
rollback()
Reverts any changes made during this session.
|
void |
rollback(boolean penalize)
Reverts any changes made during this session.
|
void |
setState(Map<String,String> state,
Scope scope)
Updates the value of the component's state, setting it to given value.
|
void |
transfer(Collection<FlowFile> flowFiles)
Transfers the given FlowFiles back to the work queues from which the
FlowFiles were pulled.
|
void |
transfer(Collection<FlowFile> flowFiles,
Relationship relationship)
Transfers the given FlowFile to the appropriate destination processor
work queue(s) based on the given relationship.
|
void |
transfer(FlowFile flowFile)
Transfers the given FlowFile back to the work queue from which it was
pulled.
|
void |
transfer(FlowFile flowFile,
Relationship relationship)
Transfers the given FlowFile to the appropriate destination processor
work queue(s) based on the given relationship.
|
OutputStream |
write(FlowFile source)
Provides an OutputStream that can be used to write to the contents of the
given FlowFile.
|
FlowFile |
write(FlowFile source,
OutputStreamCallback writer)
Executes the given callback against the content corresponding to the
given FlowFile.
|
FlowFile |
write(FlowFile source,
StreamCallback writer)
Executes the given callback against the content corresponding to the
given flow file.
|
void commit()
Commits the current session ensuring all operations against FlowFiles within this session are atomically persisted. All FlowFiles operated on within this session must be accounted for by transfer or removal or the commit will fail.
As soon as the commit completes the session is again ready to be used
IllegalStateException
- if detected that this method is being
called from within a callback of another method in this session.FlowFileHandlingException
- if not all FlowFiles acted upon within
this session are accounted for by user code such that they have a
transfer identified or where marked for removal. Automated rollback
occurs.ProcessException
- if some general fault occurs while persisting
the session. Initiates automatic rollback. The root cause can be obtained
via Exception.getCause()
void commitAsync()
Commits the current session ensuring all operations against FlowFiles within this session are atomically persisted. All FlowFiles operated on within this session must be accounted for by transfer or removal or the commit will fail.
Unlike the commit()
method, the persistence of data to the repositories is not
guaranteed to have occurred by the time that this method returns. Therefore, if any follow-on actions
are necessary after the data has been persisted to the repository (for example, acknowledging receipt from
a source system, removing a source file, etc.) that logic should be performed only by invoking
commitAsync(Runnable)
or commitAsync(Runnable, Consumer)
and implementing that action in the provided callback.
If the session cannot be committed, an error will be logged and the session will be rolled back instead.
IllegalStateException
- if called from within a read or write callback (See write(FlowFile, StreamCallback)
, write(FlowFile, OutputStreamCallback)
,
read(FlowFile, InputStreamCallback)
).FlowFileHandlingException
- if any FlowFile is not appropriately accounted for by transferring it to a Relationship (see transfer(FlowFile, Relationship)
)
or removed (see remove(FlowFile)
.default void commitAsync(Runnable onSuccess)
Commits the current session ensuring all operations against FlowFiles within this session are atomically persisted. All FlowFiles operated on within this session must be accounted for by transfer or removal or the commit will fail.
If the session is successfully committed, the given onSuccess
Runnable
will be called.
At the point that the session commit is completed, the session will have already been committed, so any calls
to rollback()
/ rollback(boolean)
will not undo that session commit but instead roll back any changes
that may have occurred since.
If, for any reason, the session could not be committed, an error-level log message will be generated, but the caller will not
have a chance to perform any cleanup logic. If such logic is necessary, use commitAsync(Runnable, Consumer)
instead.
Unlike the commit()
method, the persistence of data to the repositories is not
guaranteed to have occurred by the time that this method returns. As a result, the following
very common idiom:
getDataFromSource();
session.commit();
acknowledgeReceiptOfData();
Cannot be simply changed to:
getDataFromSource();
session.commitAsync();
acknowledgeReceiptOfData();
Doing so could result in acknowledging receipt of data from the source system before data has been committed to the repositories.
If NiFi were to then be restarted, there is potential for data loss.
Rather, the following idiom should take its place to ensure that there is no data loss:
getDataFromSource();
session.commitAsync( () -> acknowledgeReceiptOfData() );
IllegalStateException
- if called from within a callback (See write(FlowFile, StreamCallback)
, write(FlowFile, OutputStreamCallback)
,
read(FlowFile, InputStreamCallback)
).FlowFileHandlingException
- if any FlowFile is not appropriately accounted for by transferring it to a Relationship (see transfer(FlowFile, Relationship)
)
or removed (see remove(FlowFile)
.void commitAsync(Runnable onSuccess, Consumer<Throwable> onFailure)
Commits the current session ensuring all operations against FlowFiles within this session are atomically persisted. All FlowFiles operated on within this session must be accounted for by transfer or removal or the commit will fail.
If the session is successfully committed, the given onSuccess
Runnable
will be called.
At the point that the session commit is completed, the session will have already been committed, so any calls
to rollback()
/ rollback(boolean)
will not undo that session commit but instead roll back any chances
that may have occurred since.
If, for any reason, the session could not be committed, the given onFailure
Consumer
will be called
instead of the onSuccess
Runnable
. The Consumer will be provided the Throwable that prevented the session
commit from completing.
Unlike the commit()
method, the persistence of data to the repositories is not
guaranteed to have occurred by the time that this method returns.
IllegalStateException
- if called from within a callback (See write(FlowFile, StreamCallback)
, write(FlowFile, OutputStreamCallback)
,
read(FlowFile, InputStreamCallback)
).FlowFileHandlingException
- if any FlowFile is not appropriately accounted for by transferring it to a Relationship (see transfer(FlowFile, Relationship)
)
or removed (see remove(FlowFile)
.void rollback()
rollback(boolean)
passing
false
as the parameter.void rollback(boolean penalize)
penalize
- whether or not the FlowFiles that are being restored back
to their queues should be penalizedvoid migrate(ProcessSession newOwner, Collection<FlowFile> flowFiles)
Migrates ownership of the given FlowFiles from this
to the given newOwner
.
When calling this method, all of the following pre-conditions must be met:
write(FlowFile, OutputStreamCallback)
, write(FlowFile, StreamCallback)
,
read(FlowFile, InputStreamCallback)
, read(FlowFile, boolean, InputStreamCallback)
for any of
the given FlowFiles.read(FlowFile)
).write(FlowFile)
.create(FlowFile)
and passing the FlowFile
as the argument), then all children that were created must also be in the Collection of provided FlowFiles.
Also note, that if any FlowFile given is not the most up-to-date version of that FlowFile, then the most up-to-date
version of the FlowFile will be migrated to the new owner. For example, if a call to putAttribute(FlowFile, String, String)
is made,
passing flowFile1
as the FlowFile, and then flowFile1
is passed to this method, then the newest version (including the
newly added attribute) will be migrated, not the outdated version of the FlowFile that flowFile1
points to.
newOwner
- the ProcessSession that is to become the new owner of the given FlowFilesflowFiles
- the FlowFiles to migratevoid migrate(ProcessSession newOwner)
migrate(ProcessSession, Collection)
newOwner
- the ProcessSession that is to become the new owner of all FlowFilesvoid adjustCounter(String name, long delta, boolean immediate)
name
- the name of the counterdelta
- the delta by which to modify the counter (+ or -)immediate
- if true, the counter will be updated immediately,
without regard to whether the ProcessSession is commit or rolled back;
otherwise, the counter will be incremented only if and when the
ProcessSession is committed.FlowFile get()
List<FlowFile> get(int maxResults)
maxResults
FlowFiles from the work queue. If
no FlowFiles are available, returns an empty list. Will not return null.
If multiple incoming queues are present, the behavior is unspecified in
terms of whether all queues or only a single queue will be polled in a
single call.maxResults
- the maximum number of FlowFiles to returnmaxResults
FlowFiles from the work queue. If
no FlowFiles are available, returns an empty list. Will not return null.IllegalArgumentException
- if maxResults
is less than
0List<FlowFile> get(FlowFileFilter filter)
Returns all FlowFiles from all of the incoming queues for which the given
FlowFileFilter
indicates should be accepted. Calls to this method
provide exclusive access to the underlying queues. I.e., no other thread
will be permitted to pull FlowFiles from this Processor's queues or add
FlowFiles to this Processor's incoming queues until this method call has
returned.
filter
- to limit which flow files are returnedFlowFileFilter
indicates should be accepted.QueueSize getQueueSize()
FlowFile create()
create(FlowFile)
or
create(Collection)
.
When this method is used, a Provenance CREATE or RECEIVE Event should be
generated. See the getProvenanceReporter()
method and
ProvenanceReporter
class for more informationFlowFile create(FlowFile parent)
parent
. The newly created FlowFile will
inherit all of the parent's attributes except for the UUID. This method
will automatically generate a Provenance FORK event or a Provenance JOIN
event, depending on whether or not other FlowFiles are generated from the
same parent before the ProcessSession is committed.parent
- to base the new flowfile onFlowFile create(Collection<FlowFile> parents)
parents
- which the new flowfile should inherit shared attributes fromFlowFile clone(FlowFile example)
example
- FlowFile to be the source of cloning - given FlowFile must
be a part of the given sessionIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile contentNullPointerException
- if the argument nullFlowFile clone(FlowFile parent, long offset, long size)
parent
- to base the new flowfile attributes onoffset
- of the parent flowfile to base the child flowfile content onsize
- of the new flowfile from the offsetIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFileFlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session, or if the
specified offset + size exceeds that of the size of the parent FlowFile.
Automatic rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFile penalize(FlowFile flowFile)
flowFile
- to penalizeIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.NullPointerException
- if the argument nullFlowFile putAttribute(FlowFile flowFile, String key, String value)
uuid
, this attribute will be ignored.flowFile
- to updatekey
- of attributevalue
- of attributeFlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.NullPointerException
- if an argument is nullFlowFile putAllAttributes(FlowFile flowFile, Map<String,String> attributes)
uuid
, this attribute will be
ignored.flowFile
- to updateattributes
- the attributes to add to the given FlowFileIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.NullPointerException
- if an argument is nullFlowFile removeAttribute(FlowFile flowFile, String key)
uuid
, this method will return the same FlowFile without
removing any attribute.flowFile
- to updatekey
- of attributeIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.NullPointerException
- if the argument nullFlowFile removeAllAttributes(FlowFile flowFile, Set<String> keys)
uuid
, this key will be ignoredflowFile
- to updatekeys
- of attributeIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.NullPointerException
- if the argument nullFlowFile removeAllAttributes(FlowFile flowFile, Pattern keyPattern)
uuid
, this key
will not be removed.flowFile
- to updatekeyPattern
- may be null; if supplied is matched against each of the
FlowFile attribute keysvoid transfer(FlowFile flowFile, Relationship relationship)
flowFile
- to transferrelationship
- to transfer toIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.NullPointerException
- if the argument nullIllegalArgumentException
- if given relationship is not a known or
registered relationshipvoid transfer(FlowFile flowFile)
flowFile
- to transferIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.IllegalArgumentException
- if the FlowFile was created by this
processorNullPointerException
- if the argument nullvoid transfer(Collection<FlowFile> flowFiles)
flowFiles
- to transferIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFiles are already
transferred or removed or don't belong to this session. Automatic
rollback will occur.IllegalArgumentException
- if the FlowFile was created by this
processorNullPointerException
- if the argument nullvoid transfer(Collection<FlowFile> flowFiles, Relationship relationship)
flowFiles
- to transferrelationship
- to transfer toIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.NullPointerException
- if the argument nullIllegalArgumentException
- if given relationship is not a known or
registered relationshipvoid remove(FlowFile flowFile)
flowFile
- to removeIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.void remove(Collection<FlowFile> flowFiles)
flowFiles
- to removeIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if any of the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.void read(FlowFile source, InputStreamCallback reader) throws FlowFileAccessException
source
- flowfile to retrieve content ofreader
- that will be called to read the flowfile contentIllegalStateException
- if detected that this method is being
called from within a write callback of another method (i.e., from within the callback
that is passed to write(FlowFile, OutputStreamCallback)
or write(FlowFile, StreamCallback)
)
or has an OutputStream open (via a call to write(FlowFile)
) in this session and for
the given FlowFile(s). Said another way, it is not permissible to call this method while writing to
the same FlowFile.FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be referenced, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile content; if an attempt is made to access the InputStream
provided to the given InputStreamCallback after this method completed its
executionInputStream read(FlowFile flowFile)
commit()
or rollback()
is called, but the responsibility of doing so belongs to the caller. The InputStream will throw
an IOException if an attempt is made to read from the stream after the session is committed or
rolled back.flowFile
- the FlowFile to readIllegalStateException
- if detected that this method is being
called from within a write callback of another method (i.e., from within the callback
that is passed to write(FlowFile, OutputStreamCallback)
or write(FlowFile, StreamCallback)
)
or has an OutputStream open (via a call to write(FlowFile)
) in this session and for
the given FlowFile(s). Said another way, it is not permissible to call this method while writing to
the same FlowFile.FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be referenced, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.void read(FlowFile source, boolean allowSessionStreamManagement, InputStreamCallback reader) throws FlowFileAccessException
source
- flowfile to retrieve content ofallowSessionStreamManagement
- allow session to hold the stream open for performance reasonsreader
- that will be called to read the flowfile contentIllegalStateException
- if detected that this method is being
called from within a write callback of another method (i.e., from within the callback
that is passed to write(FlowFile, OutputStreamCallback)
or write(FlowFile, StreamCallback)
)
or has an OutputStream open (via a call to write(FlowFile)
) in this session and for
the given FlowFile(s). Said another way, it is not permissible to call this method while writing to
the same FlowFile.FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile content; if an attempt is made to access the InputStream
provided to the given InputStreamCallback after this method completed its
executionFlowFile merge(Collection<FlowFile> sources, FlowFile destination)
sources
- the flowfiles to mergedestination
- the flowfile to use as the merged resultIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)IllegalArgumentException
- if the given destination is contained
within the sourcesFlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile content. The state of the destination will be as it was prior to
this call.FlowFile merge(Collection<FlowFile> sources, FlowFile destination, byte[] header, byte[] footer, byte[] demarcator)
sources
- to merge togetherdestination
- to merge toheader
- bytes that will be added to the beginning of the merged
output. May be null or empty.footer
- bytes that will be added to the end of the merged output.
May be null or empty.demarcator
- bytes that will be placed in between each object merged
together. May be null or empty.IllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)IllegalArgumentException
- if the given destination is contained
within the sourcesFlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile content. The state of the destination will be as it was prior to
this call.FlowFile write(FlowFile source, OutputStreamCallback writer) throws FlowFileAccessException
source
- to write towriter
- used to write new contentIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s), or if there is an open InputStream or OutputStream for the FlowFile's content
(see read(FlowFile)
and write(FlowFile)
).FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be referenced, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile content; if an attempt is made to access the OutputStream
provided to the given OutputStreamCallaback after this method completed
its executionOutputStream write(FlowFile source)
source
- to write toIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s), or if there is an open InputStream or OutputStream for the FlowFile's content
(see read(FlowFile)
).FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be referenced, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile content; if an attempt is made to access the OutputStream
provided to the given OutputStreamCallaback after this method completed
its executionFlowFile write(FlowFile source, StreamCallback writer) throws FlowFileAccessException
source
- to read from and write towriter
- used to read the old content and write new contentIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s), or if there is an open InputStream or OutputStream for the FlowFile's content
(see read(FlowFile)
and write(FlowFile)
).FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile content; if an attempt is made to access the InputStream or
OutputStream provided to the given StreamCallback after this method
completed its executionFlowFile append(FlowFile source, OutputStreamCallback writer) throws FlowFileAccessException
source
- the flowfile for which content should be appendedwriter
- used to write new bytes to the flowfile contentFlowFileAccessException
- if an attempt is made to access the
OutputStream provided to the given OutputStreamCallaback after this
method completed its executionIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s), or if there is an open InputStream or OutputStream for the FlowFile's content
(see read(FlowFile)
and write(FlowFile)
).FlowFile importFrom(Path source, boolean keepSourceFile, FlowFile destination)
source
- the file from which content will be obtainedkeepSourceFile
- if true the content is simply copied; if false the
original content might be used in a destructive way for efficiency such
that the repository will have the data but the original data will be
gone. If false the source object will be removed or gone once imported.
It will not be restored if the session is rolled back so this must be
used with caution. In some cases it can result in tremendous efficiency
gains but is also dangerous.destination
- the FlowFile whose content will be updatedIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile contentFlowFile importFrom(InputStream source, FlowFile destination)
source
- the file from which content will be obtaineddestination
- the FlowFile whose content will be updatedIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile contentvoid exportTo(FlowFile flowFile, Path destination, boolean append)
flowFile
- to export the content ofdestination
- to export the content toappend
- if true will append to the current content at the given
path; if false will replace any current contentIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile contentvoid exportTo(FlowFile flowFile, OutputStream destination)
flowFile
- to export the content ofdestination
- to export the content toIllegalStateException
- if detected that this method is being
called from within a callback of another method in this session and for
the given FlowFile(s)FlowFileHandlingException
- if the given FlowFile is already
transferred or removed or doesn't belong to this session. Automatic
rollback will occur.MissingFlowFileException
- if the given FlowFile content cannot be
found. The FlowFile should no longer be reference, will be internally
destroyed, and the session is automatically rolled back and what is left
of the FlowFile is destroyed.FlowFileAccessException
- if some IO problem occurs accessing
FlowFile contentProvenanceReporter getProvenanceReporter()
void setState(Map<String,String> state, Scope scope) throws IOException
commit()
is called. At that point, it will publish the
state to the remote State Provider, if the state is the latest according to the remote State Provider.state
- the value to change the state toscope
- the scope to use when storing the stateIOException
- if unable to communicate with the underlying storage mechanismStateMap getState(Scope scope) throws IOException
null
.
If the state has not yet been set, the StateMap's version will be -1, and the map of values will be empty.scope
- the scope to use when fetching the stateIOException
- if unable to communicate with the underlying storage mechanismboolean replaceState(StateMap oldValue, Map<String,String> newValue, Scope scope) throws IOException
commit()
is called. At that point,
if the value that has been set by this method is the most up-to-date value, according to the state provider,
then the remote state provider will be updated to match the given newValue
.oldValue
- the old value to compare againstnewValue
- the new value to use if and only if the state's value is the same as the given oldValuescope
- the scope to use for storing the new statetrue
if the state was updated to the new value, false
if the state's value was not
equal to oldValueIOException
- if unable to communicate with the underlying storage mechanismvoid clearState(Scope scope) throws IOException
scope
- the scope whose values should be clearedIOException
- if unable to communicate with the underlying storage mechanism.Copyright © 2023 Apache NiFi Project. All rights reserved.