[poky] [PATCH] buildstats: tolerate absence of /proc/diskstats

Saul Wold sgw at linux.intel.com
Tue Jan 17 12:58:02 PST 2012


On 01/15/2012 05:11 PM, Jean-François Dagenais wrote:
> From: Jean-François Dagenais<dagenaisj at sonatest.com>
>
> In OpenVZ containers (and probably lx containers as well),
> the diskstats entry is not even present. Use the "NoLogicalDrive"
> introduced by Elizabeth Flanagan in such case.
>
> This allows the bitbaking to occure within such containers.
>
> Signed-off-by: Jean-François Dagenais<jeff.dagenais at gmail.com>
> ---
>   meta/classes/buildstats.bbclass |   25 +++++++++++++++----------
>   1 files changed, 15 insertions(+), 10 deletions(-)
>
> diff --git a/meta/classes/buildstats.bbclass b/meta/classes/buildstats.bbclass
> index 4cd8fe6..9690a04 100644
> --- a/meta/classes/buildstats.bbclass
> +++ b/meta/classes/buildstats.bbclass
> @@ -61,11 +61,13 @@ def set_device(e):
>       # we do not collect diskstats as the method to collect meaningful statistics
>       # for these fs types requires a bit more research.
>       ############################################################################
> -    for line in open("/proc/diskstats", "r"):
> -        if majordev == int(line.split()[0]) and minordev == int(line.split()[1]):
> -           rdev=line.split()[2]
> -        else:
> -           rdev="NoLogicalDevice"
> +    rdev="NoLogicalDevice"
> +    try:
> +        for line in open("/proc/diskstats", "r"):
> +            if majordev == int(line.split()[0]) and minordev == int(line.split()[1]):
> +               rdev=line.split()[2]
> +    except:
> +        pass
>       file = open(e.data.getVar('DEVFILE', True), "w")
>       file.write(rdev)
>       file.close()
> @@ -82,12 +84,15 @@ def get_diskstats(dev):
>       # For info on what these are, see kernel doc file iostats.txt
>       ############################################################################
>       DSTAT_KEYS = ['ReadsComp', 'ReadsMerged', 'SectRead', 'TimeReads', 'WritesComp', 'SectWrite', 'TimeWrite', 'IOinProgress', 'TimeIO', 'WTimeIO']
> -    for x in open("/proc/diskstats", "r"):
> -        if dev in x:
> -            diskstats_val = x.rstrip().split()[4:]
> -    diskstats = dict(itertools.izip(DSTAT_KEYS, diskstats_val))
> +    try:
> +        for x in open("/proc/diskstats", "r"):
> +            if dev in x:
> +                diskstats_val = x.rstrip().split()[4:]
> +    except IOError as e:
> +        return
> +    diskstats = dict(itertools.izip(DSTAT_KEYS, diskstats_val))
>       return diskstats
> -
> +
>   def set_diskdata(var, dev, data):
>       data.setVar(var, get_diskstats(dev))
>

Merged into OE-Core

For future reference, please send patches for the meta layer to 
openembedded-core at lists.openembedded.org, as the meta layer is really 
OE-Core

Thanks
	Sau!



More information about the poky mailing list