[virt-tools-list] [virt-manager] Reset Guest.domain to None on domain creation error

Xiaodai Wang xiaodwan at redhat.com
Fri Apr 14 05:45:39 UTC 2017


> 
> ----- Original Message -----
> > From: "Cole Robinson" <crobinso at redhat.com>
> > To: "Xiaodai Wang" <xiaodwan at redhat.com>, "Christophe Fergeau"
> > <cfergeau at redhat.com>
> > Cc: virt-tools-list at redhat.com
> > Sent: Friday, April 14, 2017 2:23:55 AM
> > Subject: Re: [virt-tools-list] [virt-manager] Reset Guest.domain to None on
> > domain creation error
> > 
> > On 04/13/2017 07:04 AM, Xiaodai Wang wrote:
> > > 
> > > 
> > > 
> > > 
> > > ----- Original Message -----
> > >> From: "Christophe Fergeau" <cfergeau at redhat.com>
> > >> To: virt-tools-list at redhat.com
> > >> Sent: Thursday, April 13, 2017 5:18:46 PM
> > >> Subject: [virt-tools-list] [virt-manager] Reset Guest.domain to None on
> > >> 	domain creation error
> > >>
> > >> When an error occurs when the VM creation wizard tries to start the VM,
> > >> it's then not possible to press again the "Finish" button to try again
> > >> to start it, as this errors out with:
> > >>
> > >> Traceback (most recent call last):
> > >>   File "/home/teuf/redhat/virt/virt-manager/virtManager/asyncjob.py",
> > >>   line
> > >>   88, in cb_wrapper
> > >>     callback(asyncjob, *args, **kwargs)
> > >>   File "/home/teuf/redhat/virt/virt-manager/virtManager/create.py", line
> > >>   2341, in _do_async_install
> > >>     guest.start_install(meter=meter)
> > >>   File "/home/teuf/redhat/virt/virt-manager/virtinst/guest.py", line
> > >>   457,
> > >>   in
> > >>   start_install
> > >>     raise RuntimeError(_("Domain has already been started!"))
> > >> RuntimeError: Domain has already been started!
> > >>
> > >> This is caused by code introduced in commit fc6778 which does not reset
> > >> self.domain to None when an exception is caught.
> > >>
> > >> Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
> > >> ---
> > >>  virtinst/guest.py | 1 +
> > >>  1 file changed, 1 insertion(+)
> > >>
> > >> diff --git a/virtinst/guest.py b/virtinst/guest.py
> > >> index c8c3d14..3997519 100644
> > >> --- a/virtinst/guest.py
> > >> +++ b/virtinst/guest.py
> > >> @@ -408,6 +408,7 @@ class Guest(XMLBuilder):
> > >>                      exc_info = sys.exc_info()
> > >>                      try:
> > >>                          self.domain.undefine()
> > >> +                        self.domain = None
> > > 
> > > 
> > > This will still have other problems. Since the guest has already been
> > > created, if you begin installation again,
> > > some conflict like "The Mac address 'xxx' is in use by another virtual
> > > machine" will occur.
> > 
> > This isn't correct, the case Christophe is talking about leaves the guest
> > 'undefined' afterwards, so there won't be any MAC collision
> 
> In my testing (did as bz 1441902), undefine() always fail at here (don't know
> why) and the guest will not be removed.
> So the self.domain=None will not be ran and the problem is still there.

undefine() fail because "libvirtError: Requested operation is not valid: cannot
delete inactive domain with nvram".

> when move self.domain = None before line "raise exc_info[0]". The problem
> disappear but has new problem like Mac conflict
> since the same guest has already existed.
> 
> 
> > - Cole
> > 
> > 
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
> 




More information about the virt-tools-list mailing list