Jens Geyer created THRIFT-6283:
----------------------------------

             Summary: Erlang: bound the size of a reply the HTTP transport reads
                 Key: THRIFT-6283
                 URL: https://issues.apache.org/jira/browse/THRIFT-6283
             Project: Thrift
          Issue Type: Sub-task
          Components: Erlang - Library
            Reporter: Jens Geyer


Split out of THRIFT-6268 (third point). The first point, a failed request, is 
PR #3866.

{{thrift_http_transport:flush/1}} calls {{httpc:request/4}} in the mode that 
returns the whole reply in memory, with no limit, so the size of a reply is 
whatever the server sends.

h2. What httpc offers

* {{max_body_size}} is a documented request option from OTP 27 on. It refuses a 
reply whose {{Content-Length}} exceeds the limit. OTP 25 and 26, both in the CI 
matrix, have no such option.
* Streaming ({{stream}}) hands over the body in parts, but only for 200 and 206 
replies; any other reply is still read whole.

h2. Suggested

* A limit for the transport, defaulting to 100 MB, the default maximum message 
size the other bindings' TConfiguration uses. It is a new constant next to 
{{DEFAULT_MAX_FRAME_SIZE}} in {{thrift_constants.hrl}}, overridable per 
transport and application-wide the way {{max_frame_size}} is.
* For 200 replies, stream the body and cancel the request once the limit is 
passed, which works on every supported OTP release. On OTP 27 and later, also 
pass {{max_body_size}}, which covers the replies that are not streamed.
* Tests: a reply at the limit is read; one byte more is refused before the 
whole reply has been received, with and without {{Content-Length}}.

_Drafted with AI assistance (Claude Opus 5); reviewed and filed by Jens Geyer._




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

Reply via email to