On 04/11/2013 04:00 PM, Eric Blake wrote: > On 04/11/2013 11:47 AM, arvind viswanathan wrote: >> Hi, >> I was wondering if multiple remote agents can access the same libvirtd. How >> do we prevent conflicting commands from the different agents. Can different >> access permission be set for the agents? (The documentation usually goes >> over the case where one agent can access multiple libvirtd and not this >> case) > > Yes, multiple connections can access the same libvirtd (up to > max_clients in /etc/libvirt/libvirtd.conf), whether local or remote. In > fact, for some APIs, such as migration, you HAVE to have two connections > if you want to track progress of a long-running command (the second > connection can issue non-blocking queries while the first connection is > still blocked). Conflict between connection is prevented by using > proper mutex locking around critical sections within libvirtd. If you are asking what happens if two competing connections attempt to make to contradictory changes to a domain, the result is the same as what happens when two processes try to modify the same file in the file system. One of them will get there first. But while the end result may not be predictable (it's hard to say which thread the OS scheduler will wake up first), it is at least consistent (libvirtd should never crash due to parallel API requests; and if the two requests are both to modify the domain, the final state will match one of the requests, and either both requests succeeded or the second one gracefully failed). You already have to be prepared for errors, because any running guest can decide that it is ready to shutdown, even without you asking it to. No matter how careful you are, even if you have just a single connection, you can hit races where one API says a domain is running, and the next API fails because the domain is not running. [In fact, races like these is why we added the virConnectListAllDomains API, so that you can get more information with fewer API calls, and at least minimize the number of points where you have to deal with such races]. Your code should always check for errors, no matter how many connections are attempting to do things in parallel. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
_______________________________________________ libvirt-users mailing list libvirt-users@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvirt-users