python/aqmp: add configurable read buffer limit

QMP can transmit some pretty big messages, and the default limit of 64KB
isn't sufficient. Make sure that we can configure it.

Reported-by: G S Niteesh Babu <niteesh.gs@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-11-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2021-09-15 12:29:38 -04:00
parent 774c64a58d
commit 2686ac1316
1 changed files with 16 additions and 2 deletions

View File

@ -189,6 +189,9 @@ class AsyncProtocol(Generic[T]):
#: Logger object for debugging messages from this connection.
logger = logging.getLogger(__name__)
# Maximum allowable size of read buffer
_limit = (64 * 1024)
# -------------------------
# Section: Public interface
# -------------------------
@ -452,6 +455,7 @@ async def _client_connected_cb(reader: asyncio.StreamReader,
port=address[1],
ssl=ssl,
backlog=1,
limit=self._limit,
)
else:
coro = asyncio.start_unix_server(
@ -459,6 +463,7 @@ async def _client_connected_cb(reader: asyncio.StreamReader,
path=address,
ssl=ssl,
backlog=1,
limit=self._limit,
)
server = await coro # Starts listening
@ -482,9 +487,18 @@ async def _do_connect(self, address: Union[str, Tuple[str, int]],
self.logger.debug("Connecting to %s ...", address)
if isinstance(address, tuple):
connect = asyncio.open_connection(address[0], address[1], ssl=ssl)
connect = asyncio.open_connection(
address[0],
address[1],
ssl=ssl,
limit=self._limit,
)
else:
connect = asyncio.open_unix_connection(path=address, ssl=ssl)
connect = asyncio.open_unix_connection(
path=address,
ssl=ssl,
limit=self._limit,
)
self._reader, self._writer = await connect
self.logger.debug("Connected.")