Repository: nifi
Updated Branches:
  refs/heads/master 9cde92da1 -> 38c782c30


NIFI-1650: Ensure that we seek to the appropriate offset within the Content 
Claim when downloading content of a FlowFile


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/d3578a7c
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/d3578a7c
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/d3578a7c

Branch: refs/heads/master
Commit: d3578a7c03835fb55f90fa25856f6cc7ae824994
Parents: 9cde92d
Author: Mark Payne <[email protected]>
Authored: Sat Mar 19 11:18:02 2016 -0400
Committer: Mark Payne <[email protected]>
Committed: Mon Mar 21 10:30:23 2016 -0400

----------------------------------------------------------------------
 .../org/apache/nifi/controller/FlowController.java     | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/d3578a7c/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java
index 6d09bf6..c9aaceb 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java
@@ -158,6 +158,8 @@ import 
org.apache.nifi.reporting.ReportingInitializationContext;
 import org.apache.nifi.reporting.ReportingTask;
 import org.apache.nifi.reporting.Severity;
 import org.apache.nifi.scheduling.SchedulingStrategy;
+import org.apache.nifi.stream.io.LimitingInputStream;
+import org.apache.nifi.stream.io.StreamUtils;
 import org.apache.nifi.util.FormatUtils;
 import org.apache.nifi.util.NiFiProperties;
 import org.apache.nifi.util.ReflectionUtils;
@@ -3381,7 +3383,7 @@ public class FlowController implements EventAccess, 
ControllerServiceProvider, R
         requireNonNull(requestor);
         requireNonNull(requestUri);
 
-        final InputStream stream;
+        InputStream stream;
         final ResourceClaim resourceClaim;
         final ContentClaim contentClaim = flowFile.getContentClaim();
         if (contentClaim == null) {
@@ -3390,6 +3392,12 @@ public class FlowController implements EventAccess, 
ControllerServiceProvider, R
         } else {
             resourceClaim = flowFile.getContentClaim().getResourceClaim();
             stream = contentRepository.read(flowFile.getContentClaim());
+            final long contentClaimOffset = flowFile.getContentClaimOffset();
+            if (contentClaimOffset > 0L) {
+                StreamUtils.skip(stream, contentClaimOffset);
+            }
+
+            stream = new LimitingInputStream(stream, flowFile.getSize());
         }
 
         // Register a Provenance Event to indicate that we replayed the data.
@@ -3406,7 +3414,8 @@ public class FlowController implements EventAccess, 
ControllerServiceProvider, R
             .setDetails("Download of Content requested by " + requestor + " 
for " + flowFile);
 
         if (contentClaim != null) {
-            
sendEventBuilder.setCurrentContentClaim(resourceClaim.getContainer(), 
resourceClaim.getSection(), resourceClaim.getId(), contentClaim.getOffset(), 
flowFile.getSize());
+            
sendEventBuilder.setCurrentContentClaim(resourceClaim.getContainer(), 
resourceClaim.getSection(), resourceClaim.getId(),
+                contentClaim.getOffset() + flowFile.getContentClaimOffset(), 
flowFile.getSize());
         }
 
         final ProvenanceEventRecord sendEvent = sendEventBuilder.build();

Reply via email to