daniel has submitted this change and it was merged. ( https://gerrit.osmocom.org/c/python/osmo-python-tests/+/14545 )
Change subject: osmo_trap2cgi.py: Don't recurse in ctrl_client() ...................................................................... osmo_trap2cgi.py: Don't recurse in ctrl_client() Use a loop instead. Without it the script will eventually crash with a RecursionError. File "/usr/bin/osmo_trap2cgi.py", line 211, in conn_client await ctrl_client(proxy, reader, writer) File "/usr/bin/osmo_trap2cgi.py", line 202, in ctrl_client proxy.dispatch(wr, data) [...] File "/usr/bin/osmo_trap2cgi.py", line 202, in ctrl_client proxy.dispatch(wr, data) File "/usr/bin/osmo_trap2cgi.py", line 201, in ctrl_client [...] RecursionError: maximum recursion depth exceeded in comparison Change-Id: Ic909e371771f3056cb87e18793fd4225ffb90a2c Related: SYS#4399 --- M scripts/osmo_trap2cgi.py 1 file changed, 18 insertions(+), 15 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/scripts/osmo_trap2cgi.py b/scripts/osmo_trap2cgi.py index ad66e7b..ca73fa8 100755 --- a/scripts/osmo_trap2cgi.py +++ b/scripts/osmo_trap2cgi.py @@ -22,7 +22,7 @@ */ """ -__version__ = "0.0.1" # bump this on every non-trivial change +__version__ = "0.0.2" # bump this on every non-trivial change from functools import partial import configparser, argparse, time, os, asyncio, aiohttp @@ -190,29 +190,32 @@ return await reader.readexactly(num_bytes) except asyncio.IncompleteReadError: proxy.log.info('Failed to read %d bytes reconnecting to %s:%d...', num_bytes, proxy.ctrl_addr, proxy.ctrl_port) - await conn_client(proxy) + raise async def ctrl_client(proxy, rd, wr): """ - Recursively read CTRL stream and handle selected messages. + Read CTRL stream and handle selected messages. """ - header = await recon_reader(proxy, rd, 4) - data = await recon_reader(proxy, rd, get_ctrl_len(proxy, header)) - proxy.dispatch(wr, data) - await ctrl_client(proxy, rd, wr) + while True: + header = await recon_reader(proxy, rd, 4) + data = await recon_reader(proxy, rd, get_ctrl_len(proxy, header)) + proxy.dispatch(wr, data) async def conn_client(proxy): """ (Re)establish connection with CTRL server and pass Reader/Writer to CTRL handler. """ - try: - reader, writer = await asyncio.open_connection(proxy.ctrl_addr, proxy.ctrl_port) - proxy.log.info('Connected to %s:%d', proxy.ctrl_addr, proxy.ctrl_port) - await ctrl_client(proxy, reader, writer) - except OSError as e: - proxy.log.info('%s: %d seconds delayed retrying...', e, proxy.timeout) - await asyncio.sleep(proxy.timeout) - await conn_client(proxy) + while True: + try: + reader, writer = await asyncio.open_connection(proxy.ctrl_addr, proxy.ctrl_port) + proxy.log.info('Connected to %s:%d', proxy.ctrl_addr, proxy.ctrl_port) + await ctrl_client(proxy, reader, writer) + except OSError as e: + proxy.log.info('%s: %d seconds delayed retrying...', e, proxy.timeout) + await asyncio.sleep(proxy.timeout) + except asyncio.IncompleteReadError: + pass + proxy.log.info('Reconnecting...') if __name__ == '__main__': -- To view, visit https://gerrit.osmocom.org/c/python/osmo-python-tests/+/14545 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: python/osmo-python-tests Gerrit-Branch: master Gerrit-Change-Id: Ic909e371771f3056cb87e18793fd4225ffb90a2c Gerrit-Change-Number: 14545 Gerrit-PatchSet: 3 Gerrit-Owner: daniel <dwillm...@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: daniel <dwillm...@sysmocom.de> Gerrit-Reviewer: msuraev <sur...@alumni.ntnu.no> Gerrit-Reviewer: pespin <pes...@sysmocom.de> Gerrit-MessageType: merged