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

ASF subversion and git services commented on NIFI-16315:
--------------------------------------------------------

Commit c87753603ad47de73fc10d59c8a374ded010fb1e in nifi's branch 
refs/heads/NIFI-16315 from Joe Witt
[ https://gitbox.apache.org/repos/asf?p=nifi.git;h=c87753603ad ]

NIFI-16315 Apply IPv4 vs IPv6 UDP payload limits in PutUDP

Co-authored-by: Cursor <[email protected]>


> PutUDP should reject oversized FlowFiles before copying content into a 
> datagram
> -------------------------------------------------------------------------------
>
>                 Key: NIFI-16315
>                 URL: https://issues.apache.org/jira/browse/NIFI-16315
>             Project: Apache NiFi
>          Issue Type: Improvement
>            Reporter: Joe Witt
>            Assignee: Joe Witt
>            Priority: Major
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> PutUDP documents that a FlowFile larger than the UDP transport limit 
> (generally just under 64KB) is marked failed. It never checks size.
> onTrigger always copies the entire FlowFile with IOUtils.toByteArray, then 
> sendEvent. The only oversized handling is whatever Exception the send throws 
> after that copy. testSendLargeFileInvalid (1 MB) already takes that path: the 
> array is allocated, send fails, catch Exception routes to failure.
> That does not hold for a FlowFile large enough to exhaust the heap. 
> toByteArray can throw OutOfMemoryError. The catch is Exception, not 
> Throwable, so OOM never reaches REL_FAILURE and can take down the timer 
> thread.
> IPv4 UDP payload cannot exceed 65,507 bytes (65,535 − 8 UDP − 20 IP). A 
> FlowFile larger than that cannot be a single datagram and should be rejected 
> using flowFile.getSize() before any content copy.
> Proposed change:
> - If getSize() exceeds the IPv4 UDP maximum payload, penalize and route to 
> failure without reading content.
> - Keep the existing send-failure path for sizes that are legal for UDP but 
> still rejected by the local stack (the current tests treat ~32 KB as 
> sendable).
> - Do not change hostname/port EL or the Netty sender.
> Out of scope:
> - Do not add record splitting or delimiter framing. PutUDP is one FlowFile, 
> one datagram.
> - Do not start a campaign to remove toByteArray from other processors.
> Tests (TestPutUDP, in-process DatagramSocket):
> - FlowFile larger than 65,507 bytes routes to failure. Do not allocate a 
> multi-GB array in CI; enqueue a modest oversize (e.g. 70 KB) and assert 
> failure plus that the processor returns without depending on send.
> - Existing ~32 KB success path still sends.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to