[
https://issues.apache.org/jira/browse/NIFI-5496?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mark Payne updated NIFI-5496:
-----------------------------
Attachment: gc-with-finalizer.png
> Remove finalizer from StandardProcessSession
> --------------------------------------------
>
> Key: NIFI-5496
> URL: https://issues.apache.org/jira/browse/NIFI-5496
> Project: Apache NiFi
> Issue Type: Improvement
> Components: Core Framework
> Reporter: Mark Payne
> Assignee: Mark Payne
> Priority: Major
> Attachments: gc-with-finalizer.png, gc-without-finalizer.png
>
>
> The NiFi API and documentation have always been pretty clear that Processors
> are responsible for properly committing/rolling back their Process Sessions.
> However, what happens when a Processor fails to do so?
> The AbstractProcessor (from which 99+% of all Processors extend) will
> automatically call ProcessSession.commit() if the subclass's onTrigger()
> method returns successfully and call ProcessSession.rollback() if any
> Throwable is thrown from the subclass's onTrigger().
> However, those Processors that extend from AbstractSessionFactoryProcessor do
> not have this protection. As a fail-safe, we have always had a finalizer in
> StandardProcessSession. The finalizer simply calls rollback(). This ensures
> that any FlowFiles that were not properly handled (transferred, removed,
> etc.) are accounted for and re-queued/discarded.
> Java 9 has now made finalizers deprecated, though. Additionally, through
> doing some research, I have seen that the finalizer ends up being quite
> expensive in the effects that it causes on the system's Garbage Collection.
> Specifically, GC ends up reclaiming less and less and less heap until a point
> at which a lot more is reclaimed. This results in a JVM that is sometimes
> "choppy" in its responsiveness, which can lead to instabilities. (Will attach
> screenshots showing this behavior).
> Given this, and given that only a handful of Processors need to make use of
> the AbstractSessionFactoryProcessor, we should remove the Process Session's
> finalizer.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)