Repository: nifi
Updated Branches:
  refs/heads/master 5cfa29e48 -> 868808f4b


NIFI-5150: Fixed bug that caused StandardProcessSession.append() to copy too 
much data when called on an incoming flowfile

This closes #2676.

Signed-off-by: Bryan Bende <[email protected]>


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

Branch: refs/heads/master
Commit: 868808f4b44a5f071285cadc76b5b1d793e29e11
Parents: 5cfa29e
Author: Mark Payne <[email protected]>
Authored: Fri May 4 12:03:14 2018 -0400
Committer: Bryan Bende <[email protected]>
Committed: Mon May 7 11:44:52 2018 -0400

----------------------------------------------------------------------
 .../repository/StandardProcessSession.java      |  2 +-
 .../repository/TestStandardProcessSession.java  | 32 ++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/868808f4/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/repository/StandardProcessSession.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/repository/StandardProcessSession.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/repository/StandardProcessSession.java
index bf9b174..c6e79bf 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/repository/StandardProcessSession.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/repository/StandardProcessSession.java
@@ -2677,7 +2677,7 @@ public final class StandardProcessSession implements 
ProcessSession, ProvenanceE
             if (outStream == null) {
                 claimCache.flush(oldClaim);
 
-                try (final InputStream oldClaimIn = 
context.getContentRepository().read(oldClaim)) {
+                try (final InputStream oldClaimIn = read(source)) {
                     newClaim = 
context.getContentRepository().create(context.getConnectable().isLossTolerant());
                     claimLog.debug("Creating ContentClaim {} for 'append' for 
{}", newClaim, source);
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/868808f4/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/repository/TestStandardProcessSession.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/repository/TestStandardProcessSession.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/repository/TestStandardProcessSession.java
index 53019b2..f6089dc 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/repository/TestStandardProcessSession.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/repository/TestStandardProcessSession.java
@@ -38,6 +38,7 @@ import java.io.FilterOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -73,6 +74,7 @@ import org.apache.nifi.flowfile.attributes.CoreAttributes;
 import org.apache.nifi.groups.ProcessGroup;
 import org.apache.nifi.processor.FlowFileFilter;
 import org.apache.nifi.processor.FlowFileFilter.FlowFileFilterResult;
+import org.apache.nifi.processor.ProcessSession;
 import org.apache.nifi.processor.Relationship;
 import org.apache.nifi.processor.exception.FlowFileAccessException;
 import org.apache.nifi.processor.exception.MissingFlowFileException;
@@ -1177,6 +1179,36 @@ public class TestStandardProcessSession {
     }
 
     @Test
+    public void 
testAppendToFlowFileWhereResourceClaimHasMultipleContentClaims() throws 
IOException {
+        final Relationship relationship = new 
Relationship.Builder().name("A").build();
+
+        FlowFile ffa = session.create();
+        ffa = session.write(ffa, (out) -> out.write('A'));
+        session.transfer(ffa, relationship);
+
+        FlowFile ffb = session.create();
+        ffb = session.write(ffb, (out) -> out.write('B'));
+        session.transfer(ffb, relationship);
+        session.commit();
+
+        final ProcessSession newSession = new StandardProcessSession(context, 
() -> false);
+        FlowFile toUpdate = newSession.get();
+        newSession.append(toUpdate, out -> out.write('C'));
+
+        // Read the content back and ensure that it is correct
+        final byte[] buff;
+        try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+            newSession.read(toUpdate, in -> StreamUtils.copy(in, baos));
+            buff = baos.toByteArray();
+        }
+
+        final String output = new String(buff, StandardCharsets.UTF_8);
+        assertEquals("AC", output);
+        newSession.transfer(toUpdate);
+        newSession.commit();
+    }
+
+    @Test
     public void testAppendDoesNotDecrementContentClaimIfNotNeeded() {
         FlowFile flowFile = session.create();
 

Reply via email to