diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-07-27 14:03:58 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-07-27 23:29:14 +0100 |
commit | 4855ec380fb210d9c13f5caa8fc539e1664b9253 (patch) | |
tree | e8886cfa7126da905f8ef6627cf19e99d6d2e764 /meta/lib/oeqa/utils/qemurunner.py | |
parent | 69bae0651e393cd5fe4fd196c4d60f4609aef05f (diff) | |
download | poky-4855ec380fb210d9c13f5caa8fc539e1664b9253.tar.gz |
oeqa/utils/qemurunner: fix logging
OE-Core commit 519e381278d40bdac79add340e4c0460a9f97e17 unfortunately
broke logging in two different ways:
1) it prevented logging to the task log from working within bitbake
-c testimage. This is due to the logger object being set up too early
which interferes with BitBake's own logging. If we prefix the name
with "BitBake." everything works (and we don't need to set the
logging level).
2) Additionally because it called the log functions on the logging
module and not the logger object it set up, this caused the
oe-selftest logging to start printing everything from that point
forward.
Fix these two issues and return us to the desired behaviour for
do_testimage.
(From OE-Core rev: 429b1971be06d5146bb1c14f4697966cddab3b33)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/utils/qemurunner.py')
-rw-r--r-- | meta/lib/oeqa/utils/qemurunner.py | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 59c9934377..4de3c64d7d 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py | |||
@@ -14,8 +14,7 @@ import socket | |||
14 | import select | 14 | import select |
15 | 15 | ||
16 | import logging | 16 | import logging |
17 | logger = logging.getLogger("QemuRunner") | 17 | logger = logging.getLogger("BitBake.QemuRunner") |
18 | logger.setLevel(logging.DEBUG - 2) | ||
19 | 18 | ||
20 | class QemuRunner: | 19 | class QemuRunner: |
21 | 20 | ||
@@ -51,11 +50,11 @@ class QemuRunner: | |||
51 | self.server_socket.bind(("127.0.0.1",0)) | 50 | self.server_socket.bind(("127.0.0.1",0)) |
52 | self.server_socket.listen(2) | 51 | self.server_socket.listen(2) |
53 | self.serverport = self.server_socket.getsockname()[1] | 52 | self.serverport = self.server_socket.getsockname()[1] |
54 | logging.info("Created listening socket for qemu serial console on: 127.0.0.1:%s" % self.serverport) | 53 | logger.info("Created listening socket for qemu serial console on: 127.0.0.1:%s" % self.serverport) |
55 | return True | 54 | return True |
56 | except socket.error, msg: | 55 | except socket.error, msg: |
57 | self.server_socket.close() | 56 | self.server_socket.close() |
58 | logging.error("Failed to create listening socket: %s" % msg[1]) | 57 | logger.error("Failed to create listening socket: %s" % msg[1]) |
59 | return False | 58 | return False |
60 | 59 | ||
61 | 60 | ||
@@ -68,18 +67,18 @@ class QemuRunner: | |||
68 | if self.display: | 67 | if self.display: |
69 | os.environ["DISPLAY"] = self.display | 68 | os.environ["DISPLAY"] = self.display |
70 | else: | 69 | else: |
71 | logging.error("To start qemu I need a X desktop, please set DISPLAY correctly (e.g. DISPLAY=:1)") | 70 | logger.error("To start qemu I need a X desktop, please set DISPLAY correctly (e.g. DISPLAY=:1)") |
72 | return False | 71 | return False |
73 | if not os.path.exists(self.rootfs): | 72 | if not os.path.exists(self.rootfs): |
74 | logging.error("Invalid rootfs %s" % self.rootfs) | 73 | logger.error("Invalid rootfs %s" % self.rootfs) |
75 | return False | 74 | return False |
76 | if not os.path.exists(self.tmpdir): | 75 | if not os.path.exists(self.tmpdir): |
77 | logging.error("Invalid TMPDIR path %s" % self.tmpdir) | 76 | logger.error("Invalid TMPDIR path %s" % self.tmpdir) |
78 | return False | 77 | return False |
79 | else: | 78 | else: |
80 | os.environ["OE_TMPDIR"] = self.tmpdir | 79 | os.environ["OE_TMPDIR"] = self.tmpdir |
81 | if not os.path.exists(self.deploy_dir_image): | 80 | if not os.path.exists(self.deploy_dir_image): |
82 | logging.error("Invalid DEPLOY_DIR_IMAGE path %s" % self.deploy_dir_image) | 81 | logger.error("Invalid DEPLOY_DIR_IMAGE path %s" % self.deploy_dir_image) |
83 | return False | 82 | return False |
84 | else: | 83 | else: |
85 | os.environ["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image | 84 | os.environ["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image |
@@ -97,28 +96,28 @@ class QemuRunner: | |||
97 | launch_cmd = 'runqemu %s %s %s' % (self.machine, self.rootfs, self.qemuparams) | 96 | launch_cmd = 'runqemu %s %s %s' % (self.machine, self.rootfs, self.qemuparams) |
98 | self.runqemu = subprocess.Popen(launch_cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,preexec_fn=os.setpgrp) | 97 | self.runqemu = subprocess.Popen(launch_cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,preexec_fn=os.setpgrp) |
99 | 98 | ||
100 | logging.info("runqemu started, pid is %s" % self.runqemu.pid) | 99 | logger.info("runqemu started, pid is %s" % self.runqemu.pid) |
101 | logging.info("waiting at most %s seconds for qemu pid" % self.runqemutime) | 100 | logger.info("waiting at most %s seconds for qemu pid" % self.runqemutime) |
102 | endtime = time.time() + self.runqemutime | 101 | endtime = time.time() + self.runqemutime |
103 | while not self.is_alive() and time.time() < endtime: | 102 | while not self.is_alive() and time.time() < endtime: |
104 | time.sleep(1) | 103 | time.sleep(1) |
105 | 104 | ||
106 | if self.is_alive(): | 105 | if self.is_alive(): |
107 | logging.info("qemu started - qemu procces pid is %s" % self.qemupid) | 106 | logger.info("qemu started - qemu procces pid is %s" % self.qemupid) |
108 | cmdline = '' | 107 | cmdline = '' |
109 | with open('/proc/%s/cmdline' % self.qemupid) as p: | 108 | with open('/proc/%s/cmdline' % self.qemupid) as p: |
110 | cmdline = p.read() | 109 | cmdline = p.read() |
111 | ips = re.findall("((?:[0-9]{1,3}\.){3}[0-9]{1,3})", cmdline.split("ip=")[1]) | 110 | ips = re.findall("((?:[0-9]{1,3}\.){3}[0-9]{1,3})", cmdline.split("ip=")[1]) |
112 | if not ips or len(ips) != 3: | 111 | if not ips or len(ips) != 3: |
113 | logging.info("Couldn't get ip from qemu process arguments! Here is the qemu command line used: %s" % cmdline) | 112 | logger.info("Couldn't get ip from qemu process arguments! Here is the qemu command line used: %s" % cmdline) |
114 | self.stop() | 113 | self.stop() |
115 | return False | 114 | return False |
116 | else: | 115 | else: |
117 | self.ip = ips[0] | 116 | self.ip = ips[0] |
118 | self.server_ip = ips[1] | 117 | self.server_ip = ips[1] |
119 | logging.info("Target IP: %s" % self.ip) | 118 | logger.info("Target IP: %s" % self.ip) |
120 | logging.info("Server IP: %s" % self.server_ip) | 119 | logger.info("Server IP: %s" % self.server_ip) |
121 | logging.info("Waiting at most %d seconds for login banner" % self.boottime) | 120 | logger.info("Waiting at most %d seconds for login banner" % self.boottime) |
122 | endtime = time.time() + self.boottime | 121 | endtime = time.time() + self.boottime |
123 | socklist = [self.server_socket] | 122 | socklist = [self.server_socket] |
124 | reachedlogin = False | 123 | reachedlogin = False |
@@ -131,7 +130,7 @@ class QemuRunner: | |||
131 | self.qemusock.setblocking(0) | 130 | self.qemusock.setblocking(0) |
132 | socklist.append(self.qemusock) | 131 | socklist.append(self.qemusock) |
133 | socklist.remove(self.server_socket) | 132 | socklist.remove(self.server_socket) |
134 | logging.info("Connection from %s:%s" % addr) | 133 | logger.info("Connection from %s:%s" % addr) |
135 | else: | 134 | else: |
136 | data = sock.recv(1024) | 135 | data = sock.recv(1024) |
137 | if data: | 136 | if data: |
@@ -140,24 +139,24 @@ class QemuRunner: | |||
140 | if re.search(".* login:", self.bootlog): | 139 | if re.search(".* login:", self.bootlog): |
141 | stopread = True | 140 | stopread = True |
142 | reachedlogin = True | 141 | reachedlogin = True |
143 | logging.info("Reached login banner") | 142 | logger.info("Reached login banner") |
144 | else: | 143 | else: |
145 | socklist.remove(sock) | 144 | socklist.remove(sock) |
146 | sock.close() | 145 | sock.close() |
147 | stopread = True | 146 | stopread = True |
148 | 147 | ||
149 | if not reachedlogin: | 148 | if not reachedlogin: |
150 | logging.info("Target didn't reached login boot in %d seconds" % self.boottime) | 149 | logger.info("Target didn't reached login boot in %d seconds" % self.boottime) |
151 | lines = "\n".join(self.bootlog.splitlines()[-5:]) | 150 | lines = "\n".join(self.bootlog.splitlines()[-5:]) |
152 | logging.info("Last 5 lines of text:\n%s" % lines) | 151 | logger.info("Last 5 lines of text:\n%s" % lines) |
153 | logging.info("Check full boot log: %s" % self.logfile) | 152 | logger.info("Check full boot log: %s" % self.logfile) |
154 | self.stop() | 153 | self.stop() |
155 | return False | 154 | return False |
156 | else: | 155 | else: |
157 | logging.info("Qemu pid didn't appeared in %s seconds" % self.runqemutime) | 156 | logger.info("Qemu pid didn't appeared in %s seconds" % self.runqemutime) |
158 | output = self.runqemu.stdout | 157 | output = self.runqemu.stdout |
159 | self.stop() | 158 | self.stop() |
160 | logging.info("Output from runqemu:\n%s" % output.read()) | 159 | logger.info("Output from runqemu:\n%s" % output.read()) |
161 | return False | 160 | return False |
162 | 161 | ||
163 | return self.is_alive() | 162 | return self.is_alive() |
@@ -165,13 +164,13 @@ class QemuRunner: | |||
165 | def stop(self): | 164 | def stop(self): |
166 | 165 | ||
167 | if self.runqemu: | 166 | if self.runqemu: |
168 | logging.info("Sending SIGTERM to runqemu") | 167 | logger.info("Sending SIGTERM to runqemu") |
169 | os.killpg(self.runqemu.pid, signal.SIGTERM) | 168 | os.killpg(self.runqemu.pid, signal.SIGTERM) |
170 | endtime = time.time() + self.runqemutime | 169 | endtime = time.time() + self.runqemutime |
171 | while self.runqemu.poll() is None and time.time() < endtime: | 170 | while self.runqemu.poll() is None and time.time() < endtime: |
172 | time.sleep(1) | 171 | time.sleep(1) |
173 | if self.runqemu.poll() is None: | 172 | if self.runqemu.poll() is None: |
174 | logging.info("Sending SIGKILL to runqemu") | 173 | logger.info("Sending SIGKILL to runqemu") |
175 | os.killpg(self.runqemu.pid, signal.SIGKILL) | 174 | os.killpg(self.runqemu.pid, signal.SIGKILL) |
176 | self.runqemu = None | 175 | self.runqemu = None |
177 | if self.server_socket: | 176 | if self.server_socket: |
@@ -181,7 +180,7 @@ class QemuRunner: | |||
181 | self.ip = None | 180 | self.ip = None |
182 | 181 | ||
183 | def restart(self, qemuparams = None): | 182 | def restart(self, qemuparams = None): |
184 | logging.info("Restarting qemu process") | 183 | logger.info("Restarting qemu process") |
185 | if self.runqemu.poll() is None: | 184 | if self.runqemu.poll() is None: |
186 | self.stop() | 185 | self.stop() |
187 | if self.start(qemuparams): | 186 | if self.start(qemuparams): |