[
https://issues.apache.org/jira/browse/MINIFICPP-2766?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Marton Szasz updated MINIFICPP-2766:
------------------------------------
Status: Patch Available (was: Open)
> C++ exceptions can't be handled in Python processors
> ----------------------------------------------------
>
> Key: MINIFICPP-2766
> URL: https://issues.apache.org/jira/browse/MINIFICPP-2766
> Project: Apache NiFi MiNiFi C++
> Issue Type: Bug
> Reporter: Marton Szasz
> Priority: Major
> Time Spent: 20m
> Remaining Estimate: 0h
>
> from JS Marier on Slack:
> {noformat}
> Hello MiNiFi. I believe there is an issue with exception handling and the
> Python interpreter.
> If a C++ function called by a Python function raises a C++ exception, this
> C++ exception is not translated to a Python exception. The result is that the
> C++ exception unwinds over the C stack frames all the way back to the catch
> in ProcessSessionImpl::rollback. This is inconvenient because this rollback
> restores the flowfiles to their previous state, effectively making MiNiFi
> retry that forever. Unwinding over the Python interpreter's stack frames
> could cause issues in general, but that would be due to implementation
> details of that interpreter.
> I can't remember precisely in what context I encountered that issue. However,
> I think it would be best to translate the C++ exception to a Python exception
> so that the caller (typically a Python processor) can catch it and deal with
> it appropriately, possibly by transferring the offending flowfile to the
> failure relation.
> The sketch of a solution involves adding something like this:
> #define PYTHON_METHOD_BEGIN \
> try {
> #define PYTHON_METHOD_END \
> } catch (const std::exception& e) { \
> PyErr_SetString(PyExc_Exception, e.what()); \
> return nullptr; \
> }Those two macros would then be added at the beginning and end of each
> method callable from the Python interpreter, e.g.
> PyInputStream::read(PyInputStream* self, PyObject* args).
> If that sounds like a legitimate problem and a reasonable solution, I'll be
> happy to provide a patch that implements this.
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)