summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/server
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2017-07-28 15:40:02 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-07-30 08:43:36 +0100
commitb2c39835bb61687220abbef72e4f69a272cf8afb (patch)
tree991e25807b5baee65a54386bfcfadcc6c09d69cb /bitbake/lib/bb/server
parentdd3a59d3546b900dae92ab3b3eccca5a215ddf61 (diff)
downloadpoky-b2c39835bb61687220abbef72e4f69a272cf8afb.tar.gz
bitbake: process/cooker: Allow UI process to know if the cooker was started successfully
Currently if the server fails to start, the user sees no error message and the server will be repeatedly attempted to be started until some longer timeouts expire. There are error messages in the cookerdeamon log but nobody thinks to look there. Add in a pipe which can be used to tell the starting process whether the cooker did actually start or not. If it fails to start, no further attempts can be made and if present, the log file can be shown to the user. [YOCTO #11834] (Bitbake rev: 57000d44beb1aeba37dfc70782b0d6418943acc5) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/server')
-rw-r--r--bitbake/lib/bb/server/process.py20
1 files changed, 18 insertions, 2 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index fb96804e68..6106c07380 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -355,6 +355,7 @@ class BitBakeServer(object):
355 self.featureset = featureset 355 self.featureset = featureset
356 self.sockname = sockname 356 self.sockname = sockname
357 self.bitbake_lock = lock 357 self.bitbake_lock = lock
358 self.readypipe, self.readypipein = os.pipe()
358 359
359 # Create server control socket 360 # Create server control socket
360 if os.path.exists(sockname): 361 if os.path.exists(sockname):
@@ -363,6 +364,8 @@ class BitBakeServer(object):
363 self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) 364 self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
364 # AF_UNIX has path length issues so chdir here to workaround 365 # AF_UNIX has path length issues so chdir here to workaround
365 cwd = os.getcwd() 366 cwd = os.getcwd()
367 logfile = os.path.join(cwd, "bitbake-cookerdaemon.log")
368
366 try: 369 try:
367 os.chdir(os.path.dirname(sockname)) 370 os.chdir(os.path.dirname(sockname))
368 self.sock.bind(os.path.basename(sockname)) 371 self.sock.bind(os.path.basename(sockname))
@@ -371,10 +374,23 @@ class BitBakeServer(object):
371 self.sock.listen(1) 374 self.sock.listen(1)
372 375
373 os.set_inheritable(self.sock.fileno(), True) 376 os.set_inheritable(self.sock.fileno(), True)
374 bb.daemonize.createDaemon(self._startServer, "bitbake-cookerdaemon.log") 377 bb.daemonize.createDaemon(self._startServer, logfile)
375 self.sock.close() 378 self.sock.close()
376 self.bitbake_lock.close() 379 self.bitbake_lock.close()
377 380
381 ready = ConnectionReader(self.readypipe)
382 r = ready.wait(8)
383 if not r:
384 ready.close()
385 bb.error("Unable to start bitbake server")
386 if os.path.exists(logfile):
387 with open(logfile, "r") as f:
388 logs=f.readlines()
389 bb.error("Last 10 lines of server log %s:\n%s" % (logfile, "".join(logs[-10:])))
390 raise SystemExit(1)
391 ready.close()
392 os.close(self.readypipein)
393
378 def _startServer(self): 394 def _startServer(self):
379 server = ProcessServer(self.bitbake_lock, self.sock, self.sockname) 395 server = ProcessServer(self.bitbake_lock, self.sock, self.sockname)
380 self.configuration.setServerRegIdleCallback(server.register_idle_function) 396 self.configuration.setServerRegIdleCallback(server.register_idle_function)
@@ -385,7 +401,7 @@ class BitBakeServer(object):
385 if value: 401 if value:
386 setattr(self.configuration, "%s_server" % param, value) 402 setattr(self.configuration, "%s_server" % param, value)
387 403
388 self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset) 404 self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset, self.readypipein)
389 server.cooker = self.cooker 405 server.cooker = self.cooker
390 server.server_timeout = self.configuration.server_timeout 406 server.server_timeout = self.configuration.server_timeout
391 server.xmlrpcinterface = self.configuration.xmlrpcinterface 407 server.xmlrpcinterface = self.configuration.xmlrpcinterface