From 4c35df723966225e3c66b74a59a51255311aa543 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sun, 26 Jun 2022 12:37:44 +0000 Subject: [PATCH] Be a bit more persistent when connecting to VPP - retry 30 times before giving up --- vpp/vppapi.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/vpp/vppapi.py b/vpp/vppapi.py index a4caf94..53c32fb 100644 --- a/vpp/vppapi.py +++ b/vpp/vppapi.py @@ -22,6 +22,7 @@ import os import fnmatch import logging import socket +import time from vpp_papi import VPPApiClient @@ -51,7 +52,7 @@ class VPPApi: self.cache_read = False self.lcp_enabled = False - def connect(self): + def connect(self, retries=30): """Connect to the VPP Dataplane, if we're not already connected""" if self.connected: return True @@ -67,17 +68,26 @@ class VPPApi: return False self.vpp = VPPApiClient(apifiles=jsonfiles, server_address=self.vpp_api_socket) - try: - self.logger.debug("Connecting to VPP") - self.vpp.connect(self.clientname) - except: + self.logger.debug("Connecting to VPP") + for i in range(retries): + try: + self.vpp.connect(self.clientname) + self.connected = True + break + except Exception as e: + self.logger.warning( + f"Could not connect to VPP (attempt {i+1}/{retries}): {e}" + ) + time.sleep(1) + self.connected = False + if not self.connected: + self.logger.error(f"Could not connect to VPP (tried {retries} times)") return False # pylint: disable=no-member api_response = self.vpp.api.show_version() self.logger.info(f"VPP version is {api_response.version}") - self.connected = True return True def disconnect(self):