On Fri, Apr 23, 2010 at 08:48:51AM -0500, Anthony Liguori wrote: > On 04/23/2010 07:48 AM, Avi Kivity wrote: > >On 04/22/2010 09:49 PM, Anthony Liguori wrote: > >>>real API. Say, adding a device libvirt doesn't know about or > >>>stopping the VM > >>>while libvirt thinks it's still running or anything like that. > >> Another problem is issuing Monitor commands that could confuse > >>libvirt's > >> > >>We need to make libvirt and qemu smarter. > >> > >>We already face this problem today with multiple libvirt users. This > >>is why sophisticated management mechanisms (like LDAP) have > >>mechanisms to do transactions or at least a series of atomic operations. > > > >And people said qmp/json was overengineered... > > > >But seriously, transactions won't help anything. qemu maintains > >state, and when you have two updaters touching a shared variable not > >excepting each other to, things break, no matter how much locking > >there is. > > Let's consider some concrete examples. I'm using libvirt and QMP and in > QMP, I want to hot unplug a device. > > Today, I do this by listing the pci devices, and issuing a pci_del that > takes a PCI address. This is intrinsically racy though because in the > worst case scenario, in between when I enumerate pci devices and do the > pci_del in QMP, in libvirt, I've done a pci_del and then a pci_add > within libvirt of a completely different device. This is what already happens with any QEMU >= 0.12, where libvirt uses the new -device syntax with its 'id' parameter for all devices, and then uses 'device_id $ID' for unplug. The app still has to be careful it doesn't try to add a device using the same naming scheme as a device libvirt uses. This is easy enough though if they prepend some random string to all device IDs thy use, that won't clash with libvirt device ID names. 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list