[ 
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)

Reply via email to