[libvirt] [perl-Sys-Virt][PATCH] Virt.xs: fix flag issue on set_scheduler_parameters

Guannan Ren gren at redhat.com
Wed Aug 29 06:12:15 UTC 2012


On 08/28/2012 11:38 AM, Alex Jia wrote:
> From: Alex Jia <Alex Jia ajia at redhat.com>
>
> The default flags are inconsistent on both qemuSetSchedulerParameters()
> and qemuGetSchedulerParameters() in libvirt, the qemuGetSchedulerParameters()
> always passes 'VIR_DOMAIN_AFFECT_CURRENT' flag to the qemuGetSchedulerParametersFlags(),
> it should be a expected behavior, but the qemuSetSchedulerParameters() always passes
> 'VIR_DOMAIN_AFFECT_LIVE' flag to the qemuSetSchedulerParametersFlags(), if users use
> default flag=0 or explicitly give a 'VIR_DOMAIN_AFFECT_CURRENT' flag to the
> set_scheduler_parameters() in perl-Sys-Virt, because the flag value is 0, the result is
> the virDomainSetSchedulerParameters() is called incorrectly.

       Yes, it is a bug.


>
> How to reproduce?
>
> # cat test.pl
>
> #!/usr/bin/env perl
> use warnings;
> use strict;
> use Sys::Virt;
>
> my $uri = "qemu:///system";
> my $domname = "foo";              # change your guest name
> my $con = Sys::Virt->new(address => $uri, readonly => 0);
> my $dom = $con->get_domain_by_name($domname);
> my %sched_param = (Sys::Virt::Domain::SCHEDULER_CPU_SHARES=>1);
> $dom->set_scheduler_parameters(\%sched_param, Sys::Virt::Domain::AFFECT_CURRENT);
>
> # perl test.pl
> libvirt error code: 55, message: Requested operation is not valid: domain is not running
>
>
> Signed-off-by: Alex Jia <Alex Jia ajia at redhat.com>
> ---
>   Virt.xs |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/Virt.xs b/Virt.xs
> index 2b8d74c..0ebf95d 100644
> --- a/Virt.xs
> +++ b/Virt.xs
> @@ -2833,7 +2833,7 @@ set_scheduler_parameters(dom, newparams, flags=0)

            How about setting flags = -1 as default value.
            set_scheduler_parameters(dom, newparams, flags=-1)
            int flags;

>             }
>         }
>         vir_typed_param_from_hv(newparams, params, nparams);
> -      if (flags) {
> +      if (flags != 1) {


            if (flags < 0) {
                virDomainSetSchedulerParameters()
            } else {
                virDomainSetSchedulerParametersFlags();
            }

>             if (virDomainSetSchedulerParametersFlags(dom, params, nparams, flags) < 0)
>                 _croak_error();
>         } else {

       Your code can work but a little weird in semantics.

       Guannan




More information about the libvir-list mailing list