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

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

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

    https://github.com/apache/nifi/pull/439#discussion_r63425128
  
    --- Diff: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/repository/StandardProcessSession.java
 ---
    @@ -2308,18 +2308,50 @@ public void exportTo(final FlowFile source, final 
Path destination, final boolea
         public void exportTo(final FlowFile source, final OutputStream 
destination) {
             validateRecordState(source);
             final StandardRepositoryRecord record = records.get(source);
    +
    +        if(record.getCurrentClaim() == null) {
    +            return;
    +        }
    +
             try {
    -            if (record.getCurrentClaim() == null) {
    -                return;
    +            ensureNotAppending(record.getCurrentClaim());
    +        } catch (final IOException e) {
    +            throw new FlowFileAccessException("Failed to access 
ContentClaim for " + source.toString(), e);
    +        }
    +
    +        try (final InputStream rawIn = getInputStream(source, 
record.getCurrentClaim(), record.getCurrentClaimOffset());
    +                final InputStream limitedIn = new 
LimitedInputStream(rawIn, source.getSize());
    +                final InputStream disableOnCloseIn = new 
DisableOnCloseInputStream(limitedIn);
    +                final ByteCountingInputStream countingStream = new 
ByteCountingInputStream(disableOnCloseIn, this.bytesRead)) {
    +
    +            // We want to differentiate between IOExceptions thrown by the 
repository and IOExceptions thrown from
    +            // Processor code. As a result, as have the 
FlowFileAccessInputStream that catches IOException from the repository
    +            // and translates into either FlowFileAccessException or 
ContentNotFoundException. We keep track of any
    +            // ContentNotFoundException because if it is thrown, the 
Processor code may catch it and do something else with it
    +            // but in reality, if it is thrown, we want to know about it 
and handle it, even if the Processor code catches it.
    +            final FlowFileAccessInputStream ffais = new 
FlowFileAccessInputStream(countingStream, source, record.getCurrentClaim());
    +            boolean cnfeThrown = false;
    +
    +            try {
    +                recursionSet.add(source);
    +                StreamUtils.skip(ffais, record.getCurrentClaimOffset());
    --- End diff --
    
    I don't believe we want to be skipping here. This is done already in the 
call to getInputStream() above, is it not?


> Exception thrown by StandardProcessSession.exportTo implies issues reading 
> from repository
> ------------------------------------------------------------------------------------------
>
>                 Key: NIFI-1866
>                 URL: https://issues.apache.org/jira/browse/NIFI-1866
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>            Reporter: Mark Payne
>            Assignee: Mark Payne
>             Fix For: 0.7.0
>
>
> When calling ProcessSession.exportTo, if unable to write to the OutputStream 
> provided, we end up with a FlowFileAccessException, rather than IOException. 
> This implies that we were unable to access the ContentRepository, but this is 
> not accurate. We need to ensure that we throw the appropriate Exception here 
> so that Processors that cause ProcessException are able to handle the 
> Exception properly
> 23:23:03,338 ERROR Timer-Driven Process Thread-3 
> standard.HandleHttpResponse:306 - 
> org.apache.nifi.processor.exception.FlowFileAccessException: Failed to export 
> StandardFlowFileRecord[uuid=366b3598-a1f7-446e-83b6-9d0404532691,claim=StandardContentClaim
>  [resourceClaim=StandardResourceClaim[id=1462828983178-2, container=default, 
> section=2], offset=49798, 
> length=51200000],offset=0,name=1095188501442536,size=51200000] to 
> HttpOutput@1eb25c5d{OPEN} due to org.eclipse.jetty.io.EofException
>     at 
> org.apache.nifi.controller.repository.StandardProcessSession.exportTo(StandardProcessSession.java:2322)
>     at 
> org.apache.nifi.processors.standard.HandleHttpResponse.onTrigger(HandleHttpResponse.java:166)
>     at 
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)



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

Reply via email to