From 2b453483d4610945c6156cc7f472ffae803cb28a Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 23 Aug 2017 15:46:00 +0100 Subject: bitbake: process: Clean up connection retry logic Its possible for a connection to connect to the server as its shutting down but before its removed the socket file. This patch: a) Removes the socket file earlier to avoid connections. b) Handles EOFError in initial connections gracefully. These occur if the socket is closed during the server shutdown. c) Ensure duplicate events aren't shown on the console. This makes debugging these issues very very confusing. With these changes the backtrace that was concerning users is hidden and the server works as expected with a reconnect when it catches it in a bad state. (Bitbake rev: f45196cf84669723382730944dddc7eaf50826f2) Signed-off-by: Richard Purdie --- bitbake/lib/bb/main.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'bitbake/lib/bb/main.py') diff --git a/bitbake/lib/bb/main.py b/bitbake/lib/bb/main.py index 0418d52b84..07972f69e5 100755 --- a/bitbake/lib/bb/main.py +++ b/bitbake/lib/bb/main.py @@ -438,9 +438,10 @@ def setup_bitbake(configParams, configuration, extrafeatures=None): return None, None # we start a server with a given configuration logger.info("Starting bitbake server...") - server = bb.server.process.BitBakeServer(lock, sockname, configuration, featureset) - # The server will handle any events already in the queue + # Clear the event queue since we already displayed messages bb.event.ui_queue = [] + server = bb.server.process.BitBakeServer(lock, sockname, configuration, featureset) + else: logger.info("Reconnecting to bitbake server...") if not os.path.exists(sockname): @@ -448,7 +449,13 @@ def setup_bitbake(configParams, configuration, extrafeatures=None): time.sleep(5) raise bb.server.process.ProcessTimeout("Bitbake still shutting down as socket exists but no lock?") if not configParams.server_only: - server_connection = bb.server.process.connectProcessServer(sockname, featureset) + try: + server_connection = bb.server.process.connectProcessServer(sockname, featureset) + except EOFError: + # The server may have been shutting down but not closed the socket yet. If that happened, + # ignore it. + pass + if server_connection or configParams.server_only: break except (Exception, bb.server.process.ProcessTimeout) as e: -- cgit v1.2.3-54-g00ecf