[libvirt] [PATCH] kill vm if saving config failed in v3 protocol

Daniel P. Berrange berrange at redhat.com
Mon Jul 11 09:25:20 UTC 2011


On Mon, Jul 11, 2011 at 09:25:40AM +0800, Wen Congyang wrote:
> At 07/01/2011 06:05 PM, Wen Congyang Write:
> > If virDomainSaveConfig() failed, we will return NULL to source,
> > and the vm is still available to restart during confirm() step in
> > v3 protocol. So we should kill it off in qemuMigrationFinish().
> > 
> > In v2 protocol, we should not set vm to NULL, because we hold
> > a reference of vm and should unrefernce it.
> > 
> > ---
> >  src/qemu/qemu_migration.c |   21 +++++++++++++++++++--
> >  1 files changed, 19 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> > index 800b714..fa98cba 100644
> > --- a/src/qemu/qemu_migration.c
> > +++ b/src/qemu/qemu_migration.c
> > @@ -2471,7 +2471,7 @@ qemuMigrationFinish(struct qemud_driver *driver,
> >          if (!virDomainObjIsActive(vm)) {
> >              qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> >                              _("guest unexpectedly quit"));
> > -            goto cleanup;
> > +            goto endjob;
> >          }
> >  
> >          qemuMigrationVPAssociatePortProfiles(vm->def);
> > @@ -2491,7 +2491,24 @@ qemuMigrationFinish(struct qemud_driver *driver,
> >                   * Return a NULL dom pointer, and hope that this is a rare
> >                   * situation and management tools are smart.
> >                   */
> > -                vm = NULL;
> > +
> > +                /*
> > +                 * In v3 protocol, the source VM is still available to
> > +                 * restart during confirm() step, so we kill it off
> > +                 * now.
> > +                 * In v2 protocol, the source is dead, so we leave
> > +                 * target in paused state, in case admin can fix
> > +                 * things up
> > +                 */
> > +                if (v3proto) {
> > +                    qemuProcessStop(driver, vm, 1, VIR_DOMAIN_SHUTOFF_FAILED);
> > +                    qemuAuditDomainStop(vm, "failed");
> > +                    if (newVM) {
> > +                        if (qemuDomainObjEndJob(vm) > 0)
> > +                            virDomainRemoveInactive(&driver->domains, vm);
> > +                        vm = NULL;
> > +                    }
> > +                }
> >                  goto endjob;
> >              }
> >  

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list