[ 
https://issues.apache.org/jira/browse/NIFI-1409?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15107222#comment-15107222
 ] 

ASF GitHub Bot commented on NIFI-1409:
--------------------------------------

Github user JPercivall commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/178#discussion_r50158533
  
    --- Diff: 
nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteSQL.java
 ---
    @@ -164,17 +166,19 @@ public void process(final OutputStream out) throws 
IOException {
                 });
     
                 // set attribute how many rows were selected
    -            outgoing = session.putAttribute(outgoing, RESULT_ROW_COUNT, 
nrOfRows.get().toString());
    +            fileToProcess = session.putAttribute(fileToProcess, 
RESULT_ROW_COUNT, nrOfRows.get().toString());
     
    -            logger.info("{} contains {} Avro records; transferring to 
'success'", new Object[] {outgoing, nrOfRows.get()});
    -            session.getProvenanceReporter().modifyContent(outgoing, 
"Retrieved " + nrOfRows.get() + " rows", 
stopWatch.getElapsed(TimeUnit.MILLISECONDS));
    -            session.transfer(outgoing, REL_SUCCESS);
    +            logger.info("{} contains {} Avro records; transferring to 
'success'",
    +                    new Object[] {fileToProcess, nrOfRows.get()});
    +            session.getProvenanceReporter().modifyContent(fileToProcess, 
"Retrieved " + nrOfRows.get() + " rows",
    +                    stopWatch.getElapsed(TimeUnit.MILLISECONDS));
    +            session.transfer(fileToProcess, REL_SUCCESS);
             } catch (final ProcessException | SQLException e) {
    --- End diff --
    
    This error handling should be expanded a bit more. In the event there is no 
incoming flowfile then the processor should yield when an error is occurred. 
Also the log statements should be changed a bit to better reflect the state the 
processor is in. For example the else statement says that the error is caused 
by the flowfile but that isn't true when it's a source processor (the flowfile 
is created to hold the content, doesn't influence the query).


> ExecuteSQL gives transfer error when SQLException occurs with no input 
> flowfile
> -------------------------------------------------------------------------------
>
>                 Key: NIFI-1409
>                 URL: https://issues.apache.org/jira/browse/NIFI-1409
>             Project: Apache NiFi
>          Issue Type: Bug
>            Reporter: Matt Burgess
>
> When the result set from ExecuteSQL has no columns, a bulletin is issued 
> saying a flowfile was not transferred:
> 13:35:12 ESTERROR05845c66-73a4-49ff-a973-ad986fb651bf
> ExecuteSQL[id=05845c66-73a4-49ff-a973-ad986fb651bf] Unable to execute SQL 
> select query SELECT * FROM test due to 
> org.apache.nifi.processor.exception.ProcessException: 
> org.postgresql.util.PSQLException: The column index is out of range: 1, 
> number of columns: 0.. No incoming flow file to route to failure: 
> org.apache.nifi.processor.exception.ProcessException: 
> org.postgresql.util.PSQLException: The column index is out of range: 1, 
> number of columns: 0.
> 13:35:12 ESTERROR05845c66-73a4-49ff-a973-ad986fb651bf
> ExecuteSQL[id=05845c66-73a4-49ff-a973-ad986fb651bf] 
> ExecuteSQL[id=05845c66-73a4-49ff-a973-ad986fb651bf] failed to process due to 
> org.apache.nifi.processor.exception.FlowFileHandlingException: 
> StandardFlowFileRecord[uuid=c9077d5c-d873-4bf2-a8c0-4cc92a6f3309,claim=,offset=0,name=258316166470532,size=0]
>  transfer relationship not specified; rolling back session: 
> org.apache.nifi.processor.exception.FlowFileHandlingException: 
> StandardFlowFileRecord[uuid=c9077d5c-d873-4bf2-a8c0-4cc92a6f3309,claim=,offset=0,name=258316166470532,size=0]
>  transfer relationship not specified
> If there is any problem with the query (such as selecting a column that 
> doesn't exist, or SELECT * from a table with no columns), a SQLException is 
> thrown, which becomes a ProcessException in the ExecuteSQL processor. In 
> addition, the exception handling tries to route the flowfile to failure, but 
> for the newly created flowfile (to contain the result set), the reference has 
> since been lost, and thus the flowfile is never transferred.
> At present, if it desired that an empty result set causes a route to failure, 
> then a workaround is to add a GenerateFlowFile processor (with a 0-byte size) 
> in front of the ExecuteSQL processor. This bypasses the logic error because 
> the incoming flowfile is reused and eventually transferred to failure because 
> of the exception thrown.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to