aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-09-12 10:49:54 +1200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-12 00:02:56 +0100
commit567f2cf1bc455b4f3cfb1cbd7f25145360b05a62 (patch)
tree93b1f0aaca5b3679d535dab52a87aa0c73ec2718
parent7b1e79c352ca6eef1693d8abfacf7505544f1caa (diff)
downloadbitbake-567f2cf1bc455b4f3cfb1cbd7f25145360b05a62.tar.gz
server/process: ensure server failure log is limited to current session
Printing the last 10 lines of bitbake-cookerdaemon.log when the server fails to start can sometimes result in printing the output from a previous run, which could lead the user completely down the wrong path in terms of the cause of the failure. Use a known start text containing the time which we can then look for when scanning through the log, and then grab the last 10 lines of that part instead. Fixes [YOCTO #11903]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/server/process.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py
index 6a12f0105..29f87cd2f 100644
--- a/lib/bb/server/process.py
+++ b/lib/bb/server/process.py
@@ -33,6 +33,8 @@ import select
import socket
import subprocess
import errno
+import re
+import datetime
import bb.server.xmlrpcserver
from bb import daemonize
from multiprocessing import queues
@@ -358,6 +360,9 @@ class BitBakeProcessServerConnection(object):
return
class BitBakeServer(object):
+ start_log_format = '--- Starting bitbake server pid %s at %s ---'
+ start_log_datetime_format = '%Y-%m-%d %H:%M:%S.%f'
+
def __init__(self, lock, sockname, configuration, featureset):
self.configuration = configuration
@@ -383,6 +388,7 @@ class BitBakeServer(object):
self.sock.listen(1)
os.set_inheritable(self.sock.fileno(), True)
+ startdatetime = datetime.datetime.now()
bb.daemonize.createDaemon(self._startServer, logfile)
self.sock.close()
self.bitbake_lock.close()
@@ -395,15 +401,31 @@ class BitBakeServer(object):
ready.close()
bb.error("Unable to start bitbake server")
if os.path.exists(logfile):
+ logstart_re = re.compile(self.start_log_format % ('([0-9]+)', '([0-9-]+ [0-9:.]+)'))
+ started = False
+ lines = []
with open(logfile, "r") as f:
- logs=f.readlines()
- bb.error("Last 10 lines of server log %s:\n%s" % (logfile, "".join(logs[-10:])))
+ for line in f:
+ if started:
+ lines.append(line)
+ else:
+ res = logstart_re.match(line.rstrip())
+ if res:
+ ldatetime = datetime.datetime.strptime(res.group(2), self.start_log_datetime_format)
+ if ldatetime >= startdatetime:
+ started = True
+ lines.append(line)
+ if lines:
+ if len(lines) > 10:
+ bb.error("Last 10 lines of server log for this session (%s):\n%s" % (logfile, "".join(lines[-10:])))
+ else:
+ bb.error("Server log for this session (%s):\n%s" % (logfile, "".join(lines)))
raise SystemExit(1)
ready.close()
os.close(self.readypipein)
def _startServer(self):
- print("Starting bitbake server pid %d" % os.getpid())
+ print(self.start_log_format % (os.getpid(), datetime.datetime.now().strftime(self.start_log_datetime_format)))
server = ProcessServer(self.bitbake_lock, self.sock, self.sockname)
self.configuration.setServerRegIdleCallback(server.register_idle_function)
writer = ConnectionWriter(self.readypipein)