Handle ConnectionResetError.
authorBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 14 Jul 2021 12:48:40 +0000 (14:48 +0200)
committerBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 14 Jul 2021 12:48:40 +0000 (14:48 +0200)
controlpi_plugins/graph.py

index 9bb9e472ee8accdfd709980ea1a42d464d8c3aa5..c4fbb0a8f4bc6d2d3da1ab57560875e725f572fc 100644 (file)
@@ -45,11 +45,7 @@ class Graph(BasePlugin):
         banner_size = await self._reader.readexactly(4)
         banner_size = struct.unpack('<i', banner_size)[0]
         banner_message = await self._reader.readexactly(banner_size)
-        # Get node instance:
         self._call_id = 0
-        self._coroot_guid = await self._call('attributsknoten',
-                                             ['coroot_name',
-                                              self.conf['name']])
 
     async def _call(self, method, params):
         await self._lock.acquire()
@@ -60,9 +56,15 @@ class Graph(BasePlugin):
                    'params': params, 'id': self._call_id}
         message = msgpack.packb(request)
         size = struct.pack('<i', len(message))
-        self._writer.write(size)
-        self._writer.write(message)
-        await self._writer.drain()
+        success = False
+        while not success:
+            self._writer.write(size)
+            self._writer.write(message)
+            try:
+                await self._writer.drain()
+                success = True
+            except ConnectionResetError:
+                await self._open_connection()
         size = await self._reader.readexactly(4)
         size = struct.unpack('<i', size)[0]
         message = await self._reader.readexactly(size)
@@ -105,3 +107,7 @@ class Graph(BasePlugin):
         """Open connection and get coroot instance for name."""
         self._lock = asyncio.Lock()
         await self._open_connection()
+        # Get coroot instance:
+        self._coroot_guid = await self._call('attributsknoten',
+                                             ['coroot_name',
+                                              self.conf['name']])