Libvirt unified job control

Libvirt is an API, daemon and tool for managing virtual machines. It also prepares host environment whenever virtual machine configuration requires so. Therefore, Libvirt has subsystems for managing storage, (virtual) network interfaces, host devices and so on. Moreover, Libvirt exposes APIs so that entities from these subsystems can be managed directly too. For instance, storage units for virtual machines can be allocated directly via an API call, host network interfaces can be managed with simple Libvirt function call, and PCI device assignment is made easy with Libvirt. Following this logic, virtual machines are then just yet another class of objects for libvirt to manage. However, some operations on these objects can take a long time to finish (e.g. storage allocation, virtual machine migration, etc.). Therefore Libvirt has developed jobs – an approach that allows concurrent access to an object from different functions requiring exclusive access. However, due to historical reasons, this approach is re-implemented in each subsystem and what’s even worse the implementation is sometimes just copied around.
The aim of this topic is to create an unified implementation of job control for all Libvirt objects.

You must be logged in to perform this action!

Michal Prívozník

Location: Brno