mirror of https://github.com/apache/nifi.git
NIFI-3768: This closes #1727. Avoid wrapping FlowFile Attributes Map in an UnmodifiableMap in the StandardFlowFileBuilder
Signed-off-by: joewitt <joewitt@apache.org>
This commit is contained in:
parent
07989b8460
commit
b96e402e78
|
@ -319,7 +319,12 @@ public final class StandardFlowFileRecord implements FlowFile, FlowFileRecord {
|
||||||
bLineageIdentifiers.clear();
|
bLineageIdentifiers.clear();
|
||||||
bPenaltyExpirationMs = specFlowFile.getPenaltyExpirationMillis();
|
bPenaltyExpirationMs = specFlowFile.getPenaltyExpirationMillis();
|
||||||
bSize = specFlowFile.getSize();
|
bSize = specFlowFile.getSize();
|
||||||
bAttributes = specFlowFile.getAttributes();
|
// If this is a StandardFlowFileRecord, access the attributes map directly. Do not use the
|
||||||
|
// getAttributes() method, because that will wrap the original in an UnmodifiableMap. As a result,
|
||||||
|
// a Processor that continually calls session.append() for instance will have a FlowFile whose attributes
|
||||||
|
// Map is wrapped thousands of times until it hits a StackOverflowError. We want the getter to return
|
||||||
|
// UnmodifiableMap, though, so that Processors cannot directly modify that Map.
|
||||||
|
bAttributes = specFlowFile instanceof StandardFlowFileRecord ? ((StandardFlowFileRecord) specFlowFile).attributes : specFlowFile.getAttributes();
|
||||||
bAttributesCopied = false;
|
bAttributesCopied = false;
|
||||||
bClaim = specFlowFile.getContentClaim();
|
bClaim = specFlowFile.getContentClaim();
|
||||||
bClaimOffset = specFlowFile.getContentClaimOffset();
|
bClaimOffset = specFlowFile.getContentClaimOffset();
|
||||||
|
|
Loading…
Reference in New Issue