[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Fix xm create command for wrong scheduler parameters



On Tue, Feb 06, 2007 at 03:10:48PM +0900, Masaki Kanno wrote:

Content-Description: Mail message body
> Hi,
> 
> When I tested the xm create command with wrong scheduler parameters, 
> a domain existed with the paused state. Usually, if an error occurred 
> by the xm create command, the domain isn't created. 
> The xm start command also has same issue. 
> 
> # xm create /xen/vm1.conf cpu_weight=99999
> Using config file "/xen/vm1.conf".
> Error: weight is out of range
> # xm create /xen/vm2.conf cpu_cap=999
> Using config file "/xen/vm2.conf".
> Error: cap is out of range
> # xm list
> Name                                      ID   Mem VCPUs      State   Time(s)
> Domain-0                                   0   491     2     r-----    594.5
> vm1                                        6   256     1     --p---      0.0
> vm2                                        7   256     1     --p---      0.0
> 
> 
> This patch fixes the issue. If the xm create command fails with 
> wrong scheduler parameters, it destroys the domain in the proceeding 
> of xm create command. 
> 
> 
> Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
> 
> Best regards,
>  Kan
> 

> diff -r 8bc64a3a5054 tools/python/xen/xend/XendDomain.py
> --- a/tools/python/xen/xend/XendDomain.py     Mon Feb 05 16:40:19 2007 +0000
> +++ b/tools/python/xen/xend/XendDomain.py     Tue Feb 06 13:43:15 2007 +0900
> @@ -868,11 +868,15 @@ class XendDomain:
>              self._refresh()
>  
>              dominfo = XendDomainInfo.create(config)
> -            if XendNode.instance().xenschedinfo() == 'credit':
> -                self.domain_sched_credit_set(dominfo.getDomid(),
> -                                             dominfo.getWeight(),
> -                                             dominfo.getCap())
> -            return dominfo
> +            try:
> +                if XendNode.instance().xenschedinfo() == 'credit':
> +                    self.domain_sched_credit_set(dominfo.getDomid(),
> +                                                 dominfo.getWeight(),
> +                                                 dominfo.getCap())
> +                return dominfo
> +            except Exception, ex:
> +                self.domain_destroy(dominfo.getDomid())
> +                raise XendError(str(ex))
>          finally:
>              self.domains_lock.release()
>  
> @@ -945,10 +949,14 @@ class XendDomain:
>                                   POWER_STATE_NAMES[dominfo.state])
>              
>              dominfo.start(is_managed = True)
> -            if XendNode.instance().xenschedinfo() == 'credit':
> -                self.domain_sched_credit_set(dominfo.getDomid(),
> -                                             dominfo.getWeight(),
> -                                             dominfo.getCap())
> +            try:
> +                if XendNode.instance().xenschedinfo() == 'credit':
> +                    self.domain_sched_credit_set(dominfo.getDomid(),
> +                                                 dominfo.getWeight(),
> +                                                 dominfo.getCap())
> +            except Exception, ex:
> +                self.domain_destroy(dominfo.getDomid())
> +                raise XendError(str(ex))
>          finally:
>              self.domains_lock.release()
>          dominfo.waitForDevices()

I think that you should move this call to the end of XendDomainInfo.start(),
which already handles exceptions and destroys the domain if necessary.  That
would save duplicating the error handling here.

Ewan.



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.