[Libvirt-cim] [PATCH 2 of 4] [TEST] Adding functions to common_util.py to support the verifications of EAFP fields

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Fri Jul 11 21:57:50 UTC 2008


> 
> +def get_value(server, cmd, log_msg, fieldname):

I wouldn't make a separate function out of this.  it probably won't be 
used except by the eafp_dpool_cap_reserve_val() function.

> +    msg = log_msg % fieldname
> +    ret, value = run_remote(server, cmd)
> +    if ret != 0:
> +        logger.error("%s", log_msg, fieldname)
> +        return FAIL, value
> +    return PASS, value
> +
> +def eafp_dpool_cap_reserve_val(server, virt, poolname):

The capabilities and reserved values are properties of the ResourcePools 
- I'd drop eafp from the name since these values aren't related to the 
EAFP association.

Also, I'd move these functions to the logicaldevices.py file.  Or, you 
could create a resourcepool.py file and add the 
verify_common_pool_values() function to it.

The common_util.py is becoming quite large - so, it might be a good idea 
to try to place more specific functions like these (that deal with a 
specific provider's values) into a file specific for that provider.

> +    libvirt_version = virsh_version(server, virt)
> +    capacity = reserved = None
> +    if libvirt_version >= '0.4.1':
> +        # get the value from pool-info
> +        log_msg= "Failed to get the '%s' info from pool-info"
> +        dp_name, pname = poolname.split("/")
> +
> +        cmd = "virsh pool-info %s | awk '/Capacity/ { print \$2}'" \
> +              % pname
> +        status, cap_val = get_value(server, cmd, log_msg, 'Capacity')
> +        if status != PASS:
> +           return FAIL, capacity, reserved 
> +        cap_val  = float(cap_val)
> +        capacity = int(cap_val * 1024 * 1024 * 1024) >> 20

This calculation is odd.  You're converting GB into bytes and then from 
bytes into megabytes.  You can instead convert straight to megabytes:

capacity = int(cap_val * 1024)

> + 
> +        cmd = "virsh pool-info %s | awk '/Allocation/ { print \$2}'" \
> +              % pname
> +        status, alloc_val = get_value(server, cmd, log_msg, 'Allocation')
> +        if status != PASS:
> +           return FAIL, capacity, reserved 
> +        alloc_val = float(alloc_val)
> +        reserved  = int(alloc_val * 1024 * 1024 *1024) >> 20

Same here - convert straight to megabytes

> +
> +    else:
> +        # get info from stat -filesystem
> +        log_msg = "Stat on the '%s' file failed"
> +
> +        cmd = "stat -f %s | awk '/size/  {print   \$7}'" % disk_file  
> +        status, f_bsize = get_value(server, cmd, log_msg, disk_file)
> +        if status != PASS:
> +           return FAIL, capacity, reserved 
> +         
> +        cmd = " stat -f %s | awk '/Blocks/  {print   \$3}'" % disk_file
> +        status, b_total = get_value(server, cmd, log_msg, disk_file)
> +        if status != PASS:
> +           return FAIL, capacity, reserved 
> +        cap_val = (int(f_bsize) * int(b_total)) 
> +        capacity = (int(f_bsize) * int(b_total)) >> 20
> +
> +        cmd = "stat -f %s | awk '/Blocks/  {print \$5}'" % disk_file
> +        status, b_free = get_value(server, cmd, log_msg, disk_file)
> +        if status != PASS:
> +           return FAIL, capacity, reserved 
> +        reserved = (cap_val - (int(f_bsize) * int(b_free))) >> 20
> +
> +    return PASS, capacity, reserved

If you want to break up the size of this function some, you could do 
something like:

dpool_cap_reserve_val():

     libvirt_version = virsh_version(server, virt)
     capacity = reserved = None
     if libvirt_version >= '0.4.1':
         libvirt_dpool_cap_res()
     else:
         fs_dpool_cap_res()

Having sub functions for each of these breaks up the work nicely, and 
it's possible (although unlikely) that a test would need to call one of 
these functions explicitly.

-- 
Kaitlin Rupert
IBM Linux Technology Center
kaitlin at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list