[
https://issues.apache.org/jira/browse/THRIFT-6241?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer reassigned THRIFT-6241:
----------------------------------
Assignee: Jens Geyer
> Use the library-wide default frame size in TNonblockingServer in the D library
> ------------------------------------------------------------------------------
>
> Key: THRIFT-6241
> URL: https://issues.apache.org/jira/browse/THRIFT-6241
> Project: Thrift
> Issue Type: Bug
> Components: D - Library
> Reporter: Jens Geyer
> Assignee: Jens Geyer
> Priority: Major
> Labels: Breaking-Change
> Time Spent: 20m
> Remaining Estimate: 0h
>
> {{thrift.server.nonblocking.TNonblockingServer}} caps the frame it accepts
> from a connection at {{maxFrameSize}}, which defaults to
> {{DEFAULT_MAX_FRAME_SIZE = 256 * 1024 * 1024}}
> (lib/d/src/thrift/server/nonblocking.d:351). The rest of lib/d uses 16384000,
> the frame size limit shared across the Thrift libraries:
> {{DEFAULT_FRAME_SIZE_LIMIT}} in {{thrift.transport.framed}}, and the
> container and string size limits of the binary, compact and JSON protocols.
> So the D servers disagree with each other. {{TSimpleServer}},
> {{TThreadedServer}} and {{TTaskPoolServer}} with a
> {{TFramedTransportFactory}} refuse a request frame over 16,384,000 bytes,
> while {{TNonblockingServer}} accepts one of up to 268,435,456 bytes. A D
> client refuses a response frame over 16,384,000 bytes as well.
> The limit is also what bounds the read buffer: {{Connection.transition()}}
> reallocates the buffer to the frame length the peer declared before any
> payload byte has arrived.
> THRIFT-6183 made the same change to the C++ {{TNonblockingServer}}.
> The change sets {{DEFAULT_MAX_FRAME_SIZE}} to 16384000. A {{maxFrameSize}}
> assigned by the caller still takes precedence.
> Compatibility: this lowers a shipped default, and {{DEFAULT_MAX_FRAME_SIZE}}
> is public. A deployment that exchanges frames between 16,384,001 and
> 268,435,456 bytes with {{TNonblockingServer}} and does not set
> {{maxFrameSize}} will start having those connections closed; setting
> {{maxFrameSize}} to {{256 * 1024 * 1024}} restores the previous behaviour.
> Unlike {{frameSizeLimit}} on {{TFramedTransport}}, a {{maxFrameSize}} of zero
> does not switch the check off. Needs a release note (added to
> lib/d/README.md).
> _Drafted with AI assistance (Claude Opus 5)._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)