
What git changeset does this queue apply against? I'm having a heck of a time getting it to apply cleanly with git-am. alternately: I know you work on occasion with mercurial. Is this an mq tree somewhere? Daniel P. Berrange wrote on 11/30/2008 06:14 PM:
The following huge series of patches adds thread safety for the libvirtd daemon and drivers, and makes the daemon multi-threaded in processing RPC calls. This enables multiple clients to be processed in parallel, without blocking each other. It does not change the thread rules for the virConnectPtr object though, so each individual client is still serialized.
There are two core places where we have to have synchronization in the threading model this patch series introduces
- The libvirt daemon code - A single global server lock (aka struct qemud_server) - One lock per client connection (aka struct qemud_client)
- The driver implementations - One lock per driver (aka QEMU, LXC, Test, UML, OpenVZ, Network, Storage, Node Devices) - One lock per primary object in a driver (virDomainObjPtr, virNetworkObjPtr, virStoragePoolObjPtr, virNodeDeviceObjptr instances)
For most cases, the big global server / driver locks are only held while obtaining one of the finer grained locks. This gives a fairly good level of concurrency for operations touching different objects. Once this core infrastructure is merged, it will be possible to iterate on impl of drivers to reduce the time locks are held - eg avoid holding a lock while talking to the QEMU monitor interface.
To try and make it easier to spot thread locking problems this series refactors alot of methods so that there is only a single return point where the unlock call can be placed, rather than multiple return point which increases the chances of missing an unlock call.
This touches a huge amount of code, so I'd like to get this all merged ASAP as it'll be really hard to keep it synced with ongoing changes.
Daniel