]> code.ossystems Code Review - openembedded-core.git/commitdiff
buildstats.py: skip collecting unavailable /proc data
authorPatrick Ohly <patrick.ohly@intel.com>
Fri, 9 Dec 2016 08:40:20 +0000 (09:40 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 13 Dec 2016 22:47:30 +0000 (22:47 +0000)
Some virtualized environments like Linux-VServer do not have the
entries under /proc that the new system usage sampling expected,
leading to an exception when trying to open the files.

Now the presence of these files is checked once before enabling the
corresponding data collection. When a file is missing, the
corresponding log file is not written either and pybootchart will not
draw the chart that normally displays the data.

Errors while reading or writing of data samples is intentionally still
a fatal error, because that points towards a bigger problem that
should not be ignored.

Reported-by: Andreas Oberritter <obi@opendreambox.org>
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
meta/lib/buildstats.py

index 9e5b6be02026030c1dc7cc9a133e1ff03dcb1b8a..854c38721f9f5bddc576a1d9b229806961400e57 100644 (file)
@@ -18,13 +18,18 @@ class SystemStats:
                 ('meminfo', self._reduce_meminfo),
                 ('stat', self._reduce_stat),
         ):
-            # In practice, this class gets instantiated only once in
-            # the bitbake cooker process.  Therefore 'append' mode is
-            # not strictly necessary, but using it makes the class
-            # more robust should two processes ever write
-            # concurrently.
-            destfile = os.path.join(bsdir, '%sproc_%s.log' % ('reduced_' if handler else '', filename))
-            self.proc_files.append((filename, open(destfile, 'ab'), handler))
+            # The corresponding /proc files might not exist on the host.
+            # For example, /proc/diskstats is not available in virtualized
+            # environments like Linux-VServer. Silently skip collecting
+            # the data.
+            if os.path.exists(os.path.join('/proc', filename)):
+                # In practice, this class gets instantiated only once in
+                # the bitbake cooker process.  Therefore 'append' mode is
+                # not strictly necessary, but using it makes the class
+                # more robust should two processes ever write
+                # concurrently.
+                destfile = os.path.join(bsdir, '%sproc_%s.log' % ('reduced_' if handler else '', filename))
+                self.proc_files.append((filename, open(destfile, 'ab'), handler))
         self.monitor_disk = open(os.path.join(bsdir, 'monitor_disk.log'), 'ab')
         # Last time that we sampled /proc data resp. recorded disk monitoring data.
         self.last_proc = 0