[libvirt] [PATCH 03/16] Introduce migration cookies to QEMU driver

Daniel P. Berrange berrange at redhat.com
Mon May 16 14:00:26 UTC 2011


On Mon, May 16, 2011 at 02:05:13PM +0100, Daniel P. Berrange wrote:
> On Thu, May 12, 2011 at 01:17:21PM -0600, Eric Blake wrote:
> > On 05/12/2011 10:04 AM, Daniel P. Berrange wrote:
> > > The migration protocol has support for a 'cookie' parameter which
> > > is an opaque array of bytes as far as libvirt is concerned. Drivers
> > > may use this for passing around arbitrary extra data they might
> > > need during migration. The QEMU driver needs to do a few things:
> > > 
> > > +static int
> > > +qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig,
> > > +                            xmlXPathContextPtr ctxt,
> > > +                            int flags ATTRIBUTE_UNUSED)
> > > +{
> > > +    char uuidstr[VIR_UUID_STRING_BUFLEN];
> > > +    char *tmp;
> > > +
> > > +    /* We don't store the uuid, name, hostname, or hostuuid
> > > +     * values. We just compare them to local data to do some
> > > +     * sanity checking on migration operation
> > > +     */
> > 
> > Should we do sanity checking that no unknown XML elements appear in the
> > cookie?  And/or validate that flags contains no unexpected bits?  That
> > is, should you insert virCheckFlags(0, -1) here, or in
> > qemuMigrationEatCookie?  And rather than just using virXPathString to
> > probe whether a particular XML element is present, shouldn't you instead
> > do an iteration over all XML elements in order to detect unrecognized
> > elements?
> > 
> > Otherwise, what I'm afraid of is that the cookie eater (whether the
> > destination eating the cookie from Begin, or the source eating the
> > cookie from Prepare) will be running an earlier libvirt version than the
> > baker; if the baker added a mandatory flag to the cookie, but the eater
> > is unaware to look for that element and silently ignores it, then we
> > risk silent botching of migration.
> > 
> > Do we have enough infrastructure in place for source and destination to
> > agree on what features are mandatory vs. optional in the cookie, to
> > allow for omission of optional elements that would make migration nicer
> > but aren't fatal if left out?  That is, a baker can always try a flag,
> > then retry without the flag, but retries can get expensive if there were
> > an alternative to first do a capability query to determine the common
> > subset of flags to use in the first place.
> 
> Well, the migration cookies were intended to be optional data,
> which if omitted, don't result in bad stuff.
> 
> eg, if the graphics relocation data doesn't exist, the end user
> will simply need to manually reconnect.
> 
> I think we do need some stricter checking on the lock state
> data though, to validate that the same lock manager is
> present on both sides.
> 
> > > @@ -342,6 +612,15 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver,
> > >      event = virDomainEventNewFromObj(vm,
> > >                                       VIR_DOMAIN_EVENT_STARTED,
> > >                                       VIR_DOMAIN_EVENT_STARTED_MIGRATED);
> > > +
> > > +    if (qemuMigrationBakeCookie(mig, driver, vm, cookieout, cookieoutlen, 0) < 0) {
> > > +        /* We could tear down the whole guest here, but
> > > +         * cookie data is (so far) non-critical, so that
> > > +         * seems a little harsh. We'll just warn for now.
> > > +         */
> > > +        VIR_WARN("Unable to encode migration cookie");
> > > +    }
> > > +
> > >      ret = 0;
> > >  
> > >  endjob:
> > > @@ -369,7 +648,7 @@ cleanup:
> > >          virDomainObjUnlock(vm);
> > >      if (event)
> > >          qemuDomainEventQueue(driver, event);
> > > -    qemuDriverUnlock(driver);
> > > +    qemuMigrationCookieFree(mig);
> > 
> > Umm, did you really intend to drop the qemuDriverUnlock line?
> 
> No, that's a merge rebase error

Actually no it wasn't. This is a bug that's being fixed. The caller of
this method, already unlocks the driver on completion, so we had a
double unlock.

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