You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Mark Payne (JIRA)" <ji...@apache.org> on 2018/08/07 19:25:00 UTC

[jira] [Created] (NIFI-5496) Remove finalizer from StandardProcessSession

Mark Payne created NIFI-5496:
--------------------------------

             Summary: 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


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)