[
https://issues.apache.org/jira/browse/THRIFT-6267?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer resolved THRIFT-6267.
--------------------------------
Fix Version/s: 0.25.0
Assignee: Jens Geyer
Resolution: Fixed
> Python: TNonblockingServer rebuilds its whole read buffer on every socket read
> ------------------------------------------------------------------------------
>
> Key: THRIFT-6267
> URL: https://issues.apache.org/jira/browse/THRIFT-6267
> Project: Thrift
> Issue Type: Improvement
> Components: Python - Library
> Reporter: Jens Geyer
> Assignee: Jens Geyer
> Priority: Minor
> Fix For: 0.25.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> {{lib/py/src/server/TNonblockingServer.py:145}}, in {{Connection.read()}}:
> {code:python}
> self._rbuf += read
> {code}
> {{bytes}} is immutable, so each append copies everything received so far.
> Reading a message in n chunks costs O(n^2) bytes copied; for a message that
> arrives in many small segments, most of the work is recopying.
> The frame maximum added for this server bounds how far it can run, so this is
> a cost question rather than a correctness one.
> h2. Suggested
> Accumulate into a {{list}} of chunks and {{b"".join()}} once the frame is
> complete, or read into a {{bytearray}} and slice it.
> _Drafted with AI assistance (Claude Opus 5); reviewed and filed by Jens
> Geyer._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)