[virt-tools-list] [PATCH] python-virtinst: type inconsistencies in 'vcpus'
Cole Robinson
crobinso at redhat.com
Mon Mar 21 15:50:31 UTC 2011
On 03/19/2011 08:50 PM, Satoru SATOH wrote:
> Hi,
>
> On Wed, Feb 09, 2011 at 12:40:18PM -0500, Cole Robinson wrote:
> (snip)
>> Thanks for the detailed report. FYI in the future, running virt-install with
>> the --debug flag should print the full backtrace, rather than needing to use gdb.
>
> It's nice!
>
>> As you say, in latest virt-install, --vcpus is now a string rather than a
>> plain int. This is deliberate to facilitate new functionality like specifying
>> maxvcpus and socket/core/thread topology. So the correct fix is to juss tweak
>> --check-cpu string format.
>>
>> I've fixed this upstream now:
>>
>> http://hg.fedorahosted.org/hg/python-virtinst/rev/cdfd4ebd2233
>
> Thanks for the explanation.
>
>
> I looked into this further and guess one more fix is needed because the
> variable 'vcpus' in parse_vcpu_option() and get_vcpus() looks set to
> None sometimes.
>
>
> Signed-off-by: Satoru SATOH <satoru.satoh at gmail.com>
>
> ---
> virtinst/cli.py | 36 ++++++++++++++++++++++++------------
> 1 files changed, 24 insertions(+), 12 deletions(-)
>
> diff --git a/virtinst/cli.py b/virtinst/cli.py
> index 6fd8e38..9f9e0b8 100644
> --- a/virtinst/cli.py
> +++ b/virtinst/cli.py
> @@ -695,13 +695,17 @@ def _build_set_param(inst, opts):
> def parse_vcpu_option(guest, optstring, default_vcpus):
> """
> Helper to parse --vcpu string
> +
> + @param guest: virtinst.Guest instance (object)
> + @param optstring: value of the option '--vcpus' (str)
> + @param default_vcpus: ? (it should be None at present.)
> """
> vcpus, opts = parse_optstr(optstring, remove_first=True)
> vcpus = vcpus or default_vcpus
>
> set_param = _build_set_param(guest, opts)
> set_cpu_param = _build_set_param(guest.cpu, opts)
> - has_vcpus = ("vcpus" in opts or vcpus)
> + has_vcpus = ("vcpus" in opts or (vcpus is not None))
>
> set_param("vcpus", "vcpus", vcpus)
> set_param("maxvcpus", "maxvcpus")
> @@ -718,21 +722,29 @@ def parse_vcpu_option(guest, optstring, default_vcpus):
>
>
> def get_vcpus(vcpus, check_cpu, guest, image_vcpus=None):
> - if vcpus is None and image_vcpus is not None:
> - vcpus = int(image_vcpus)
> + """
> + @param vcpus: value of the option '--vcpus' (str or None)
> + @param check_cpu: Whether to check that the number virtual cpus requested
> + does not exceed physical CPUs (bool)
> + @param guest: virtinst.Guest instance (object)
> + @param image_vcpus: ? (It's not used currently and should be None.)
> + """
> + if vcpus is None:
> + if image_vcpus is not None:
> + vcpus = image_vcpus
> + else:
> + vcpus = ""
>
> parse_vcpu_option(guest, vcpus, image_vcpus)
>
> - conn = guest.conn
> if check_cpu:
> - vcpucount = str(guest.vcpus)
> -
> - hostinfo = conn.getInfo()
> - cpu_num = hostinfo[4] * hostinfo[5] * hostinfo[6] * hostinfo[7]
> - if not vcpus <= cpu_num:
> - msg = _("You have asked for more virtual CPUs (%s) than there "
> - "are physical CPUs (%s) on the host. This will work, "
> - "but performance will be poor. ") % (vcpucount, cpu_num)
> + hostinfo = guest.conn.getInfo()
> + pcpus = hostinfo[4] * hostinfo[5] * hostinfo[6] * hostinfo[7]
> +
> + if guest.vcpus > pcpus:
> + msg = _("You have asked for more virtual CPUs (%d) than there "
> + "are physical CPUs (%d) on the host. This will work, "
> + "but performance will be poor. ") % (guest.vcpus, pcpus)
> askmsg = _("Are you sure? (yes or no)")
>
> if not prompt_for_yes_or_no(msg, askmsg):
Yes, just was informed on friday that --check-cpu was still broken. Thanks for
the patch, applied now:
http://git.fedorahosted.org/git?p=python-virtinst.git;a=commit;h=42fef47ef31f5daf230ed63f22b185da696bc35d
And a test case:
http://git.fedorahosted.org/git?p=python-virtinst.git;a=commit;h=1e214b7ba07cf1285ee5627d1cd3179c368a967d
Thanks,
Cole
More information about the virt-tools-list
mailing list