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();
