[ 
https://issues.apache.org/jira/browse/MINIFICPP-1501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marton Szasz resolved MINIFICPP-1501.
-------------------------------------
    Fix Version/s:     (was: 1.0.0)
       Resolution: Duplicate

> Enforce that Processor::onTrigger calls are always invoked with a valid 
> session
> -------------------------------------------------------------------------------
>
>                 Key: MINIFICPP-1501
>                 URL: https://issues.apache.org/jira/browse/MINIFICPP-1501
>             Project: Apache NiFi MiNiFi C++
>          Issue Type: Task
>    Affects Versions: 0.7.0
>            Reporter: Adam Hunyadi
>            Priority: Minor
>              Labels: MiNiFi-CPP-Hygiene
>
> *Background:*
> Processor::onTrigger(..., core::ProcessSession*) calls take sessions by 
> pointers even though they are never expected to be called with a nullptr 
> argument. We could check whether this ptr is null in the onTrigger calls, and 
> use it dereferenced, but this would produce a lot of redundant code. Changing 
> the onTrigger signature would be a serious API break, so we should not change 
> it.
> Currently session is not checked for validity before derefencing:
> {code:bash|title=Session dereferencing}
> ➜  git --no-pager grep 'session->' | grep -i 'processors/' | cut -d ":" -f1 | 
> less | sort | uniq | xargs -n1 sh -c 'echo $1 && egrep "if (.*session.*)" $1' 
> sh
> extensions/aws/processors/DeleteS3Object.cpp
> extensions/aws/processors/FetchS3Object.cpp
> extensions/aws/processors/PutS3Object.cpp
> extensions/civetweb/processors/ListenHTTP.cpp
> extensions/http-curl/processors/InvokeHTTP.cpp
> extensions/mqtt/processors/ConsumeMQTT.cpp
> extensions/mqtt/processors/ConvertHeartBeat.cpp
> extensions/mqtt/processors/ConvertJSONAck.cpp
> extensions/mqtt/processors/PublishMQTT.cpp
> extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp
> extensions/sftp/processors/FetchSFTP.cpp
> extensions/sftp/processors/ListSFTP.cpp
>         if (createAndTransferFlowFileFromChild(session, hostname, port, 
> username, file)) {
>     if (!createAndTransferFlowFileFromChild(session, hostname, port, 
> username, updated_entity)) {
> extensions/sftp/processors/PutSFTP.cpp
>     if (!this->processOne(context, session)) {
> extensions/standard-processors/processors/AppendHostInfo.cpp
> extensions/standard-processors/processors/ExecuteProcess.cpp
> extensions/standard-processors/processors/ExtractText.cpp
> extensions/standard-processors/processors/GenerateFlowFile.cpp
> extensions/standard-processors/processors/GetFile.cpp
> extensions/standard-processors/processors/GetTCP.cpp
> extensions/standard-processors/processors/HashContent.cpp
> extensions/standard-processors/processors/ListenSyslog.cpp
> extensions/standard-processors/processors/LogAttribute.cpp
> extensions/standard-processors/processors/PutFile.cpp
> extensions/standard-processors/processors/RetryFlowFile.cpp
> extensions/standard-processors/processors/RouteOnAttribute.cpp
> extensions/standard-processors/processors/TailFile.cpp
>   if (!session->existsFlowFileInRelationship(Success)) {
> extensions/standard-processors/processors/UpdateAttribute.cpp
> extensions/standard-processors/tests/unit/GetTCPTests.cpp
> extensions/standard-processors/tests/unit/ProcessorTests.cpp
> {code}
> *Proposal:*
> If we want to have this added safety of checking pointers before deferencing 
> them, we can enforce adding a gsl_Expects(session) to all of our 
> implementations that overload the mentioned signature by adding a static 
> code-check next to the linter check that enforces the presence at the start 
> of the function using this overload. We can also provide another overload 
> that takes session by reference - and by default the original implementation 
> would do the checks and call into this one, so overloads on this would not 
> require additional checks. This would mean checking for nullptr in 
> Processor::onTrigger(shrd_ptr<>, shrd_ptr<>) and Processor::onTrigger(*, *) 
> and forwarding the call to Processor::onTrigger(&, &) and moving overloads to 
> the (&, &) version whenever possible.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to