summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/main.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2017-08-23 15:46:00 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-08-24 13:48:40 +0100
commit2b453483d4610945c6156cc7f472ffae803cb28a (patch)
tree668542757ac62186938dd697eb920514b440413c /bitbake/lib/bb/main.py
parent95b99811bb51fba6a03dfa60a5b85e821550193e (diff)
downloadpoky-2b453483d4610945c6156cc7f472ffae803cb28a.tar.gz
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 <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/main.py')
-rwxr-xr-xbitbake/lib/bb/main.py13
1 files changed, 10 insertions, 3 deletions
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):
438 return None, None 438 return None, None
439 # we start a server with a given configuration 439 # we start a server with a given configuration
440 logger.info("Starting bitbake server...") 440 logger.info("Starting bitbake server...")
441 server = bb.server.process.BitBakeServer(lock, sockname, configuration, featureset) 441 # Clear the event queue since we already displayed messages
442 # The server will handle any events already in the queue
443 bb.event.ui_queue = [] 442 bb.event.ui_queue = []
443 server = bb.server.process.BitBakeServer(lock, sockname, configuration, featureset)
444
444 else: 445 else:
445 logger.info("Reconnecting to bitbake server...") 446 logger.info("Reconnecting to bitbake server...")
446 if not os.path.exists(sockname): 447 if not os.path.exists(sockname):
@@ -448,7 +449,13 @@ def setup_bitbake(configParams, configuration, extrafeatures=None):
448 time.sleep(5) 449 time.sleep(5)
449 raise bb.server.process.ProcessTimeout("Bitbake still shutting down as socket exists but no lock?") 450 raise bb.server.process.ProcessTimeout("Bitbake still shutting down as socket exists but no lock?")
450 if not configParams.server_only: 451 if not configParams.server_only:
451 server_connection = bb.server.process.connectProcessServer(sockname, featureset) 452 try:
453 server_connection = bb.server.process.connectProcessServer(sockname, featureset)
454 except EOFError:
455 # The server may have been shutting down but not closed the socket yet. If that happened,
456 # ignore it.
457 pass
458
452 if server_connection or configParams.server_only: 459 if server_connection or configParams.server_only:
453 break 460 break
454 except (Exception, bb.server.process.ProcessTimeout) as e: 461 except (Exception, bb.server.process.ProcessTimeout) as e: