[libvirt] RFC [1/3]: The internal lock manager API
Daniel P. Berrange
berrange at redhat.com
Mon Sep 13 12:24:57 UTC 2010
On Sun, Sep 12, 2010 at 02:22:04PM +0200, Saggi Mizrahi wrote:
> On Fri, 2010-09-10 at 17:00 +0100, Daniel P. Berrange wrote:
> >
> > enum {
> > VIR_LOCK_MANAGER_NEW_MIGRATE = (1 << 0),
> > VIR_LOCK_MANAGER_NEW_ATTACH = (1 << 1),
> > } virLockManagerNewFlags;
> >
> > enum {
> > VIR_LOCK_MANAGER_MIGRATE_CANCEL = (1 << 0);
> > } virLockManagerCompleteMigrateFlags;
> >
> >
> > /**
> > * virLockManagerNew:
> > * @driver: the driver implementation to use
> > * @type: the type of process to be supervised
> > * @flags: one of virLockManagerNewFlags
> > *
> > * Create a new context to supervise a process, usually
> > * a virtual machine. For a normal startup, flags can
> > * be 0. For incoming migration, use VIR_LOCK_MANAGER_NEW_MIGRATE
> > *
> > * Returns a new lock manager context
> > */
> > virLockManagerPtr virLockManagerNew(virLockManagerDriverPtr driver,
> > unsigned int type,
> > unsigned int flags);
> >
> > /**
> > * virLockManagerPrepareMigrate:
> > * @manager: the lock manager context
> > * @targetURI: destination of the migration
> > *
> > * Notify the supevisor that the process is about to be migrated
> > * to another host at @targetURI
> > */
> [SM] I don't think migration is a topic that should be managed in the
> lock level. Further more in sync_manager's case there are situation
> where you cannot perform a clean handover (like when the source host
> looses connection to the storage and we are migrating to another host to
> solve this).
> As I stated in my previous e-mail you think that lock handover is a
> needlessly complex use case to have a special algorithm for in
> sync_manager. Just releasing in the source side and reacquiring on the
> target (and making sure no one got in the middle) before starting the
> migration is simpler.
> You could put it in a special verb for handovers that implements this
> logic but I don't think it should be in the lock API but rather in a
> higher API level
You still have to know at which point to release the lock on the
source side & which point to re-acquire it on the destination. There
are two choices there
a. Release before migration starts + acquire when QEMU -incoming process
starts
b. Release after migration completes + acquire when QEMU resumes CPUs
I could rename the driver APIs here so they didn't include the
word 'migrate', but I don't see how we can remove any of these
APIs - there are potential actions that a lock/lease manger may
want to perform at each of these points in migration. The goal
with the driver API is to try not to restrict the possible
implementation strategies that a lock manager can use. Encoding
a special verb for handover seems overly restrictive to me, since
it is forcing a particular implementation strategy.
Regards,
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list