Skip to content

[WIP][SYSTEMDS-3946] Merge PR Enable sending of large (>2GiB) FederatedRequests - #2591

Open
ywcb00 wants to merge 13 commits into
apache:mainfrom
ywcb00:pr-2496
Open

[WIP][SYSTEMDS-3946] Merge PR Enable sending of large (>2GiB) FederatedRequests#2591
ywcb00 wants to merge 13 commits into
apache:mainfrom
ywcb00:pr-2496

Conversation

@ywcb00

@ywcb00 ywcb00 commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Intermediate PR for merging #2496

Biranavan-Parameswaran and others added 10 commits August 18, 2026 10:00
… Responses

Federated transfers previously failed for payloads above 2GiB because the
single Netty frame size is bounded by a 32-bit length field, capping any
request or response at Integer.MAX_VALUE bytes.

This patch adds a streaming chunked codec that splits a large payload into
bounded frames on the sender and reassembles them on the receiver, so the
on-wire size is no longer limited by a single frame. A format detector and
format encoder select the chunked path only when the payload exceeds the
frame limit, leaving the existing small-message path unchanged to avoid
added overhead for the common case.

Adds FederatedMaxPayloadTest to exercise the boundary around the former
2GiB cap.
Document the codec on methods and fail fast on an unknown frame type in the
chunk decoder.
Both negative tests go through a helper, since writeInbound rethrows if
the deserializer thread wins the race.
….java): change class and members to visibility public

refactor(test/component/federated/**): use the constants from the federated chunk protocol
	general refactoring

refactor(test/functions/federated/network/FederatedMaxPayloadTest.java): general refactoring
…ove test to io folder instead of network folder and delete the empty network folder
@codecov

codecov Bot commented Aug 18, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.82192% with 42 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.45%. Comparing base (9dccbc3) to head (29b5a98).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
...ontrolprogram/federated/FederatedChunkEncoder.java 79.74% 14 Missing and 2 partials ⚠️
...ontrolprogram/federated/FederatedChunkDecoder.java 81.57% 10 Missing and 4 partials ⚠️
...ntrolprogram/federated/FederatedWorkerHandler.java 54.54% 4 Missing and 1 partial ⚠️
...ntrolprogram/federated/FederatedFormatEncoder.java 85.71% 2 Missing and 1 partial ⚠️
...ntrolprogram/federated/FederatedFormatDecoder.java 81.81% 1 Missing and 1 partial ⚠️
...untime/controlprogram/federated/FederatedData.java 92.85% 0 Missing and 1 partial ⚠️
...me/controlprogram/federated/FederatedResponse.java 0.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##               main    #2591    +/-   ##
==========================================
  Coverage     71.44%   71.45%            
- Complexity    50437    50467    +30     
==========================================
  Files          1629     1634     +5     
  Lines        195513   195705   +192     
  Branches      38118    38136    +18     
==========================================
+ Hits         139686   139834   +148     
- Misses        44867    44900    +33     
- Partials      10960    10971    +11     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

ywcb00 added 3 commits August 18, 2026 14:11
…e federated request encoder again

fix(main/runtime/controlprogram/federated/FederatedFormatEncoder.java): throw an io exception when the message is not serializable instead of writing it to the channel
…dify the predicate if it is reusable by lineage to always be true when the lineage object is not null

chore(test/component/federated/FederatedChunkCodecTest.java): change polling for exceptions etc. to try fewer times and wait longer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

2 participants