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

Reply via email to