This new API solves several problems:
- calling virDomainGetInfo for just getting domain status is an overkill since
it may result in sending requests to guest OS
- since virDomainGetInfo can hang when guest OS is not responding and it is
used by virsh list, listing domains can hang
- virDomainGetState provides additional info about what action led to domain's
current state, which can be used instead of listening to domain events
I'm undecided whether this API should support flags parameter or not. On one
hand the API seems simple and focused enough not to allow any fine-tuning but
on the other hand we've already had too many issues with APIs that didn't
support flags.
Another thing is that it would be nice to somehow report that a domain is
running but libvirt is currently waiting for reply from hypervisor and is not
able to do anything else with the domain until it gets the reply. In case of
qemu driver, this translates to the driver being stuck in comunication with
qemu monitor. I'm not sure if we should somehow integrate this into
virDomainGetState API. Probably not.
Jiri Denemark (8):
virDomainGetState public API
Internal driver API for virDomainGetState
virDomainGetState public API implementation
Wire protocol format and dispatcher for virDomainGetState
virsh: Prefer virDomainGetState over virDomainGetInfo
remote: Implement virDomainGetState
Implement basic virDomainGetState in all drivers
Implement domain state reason
daemon/remote.c | 33 ++++++
daemon/remote_dispatch_prototypes.h | 8 ++
daemon/remote_dispatch_table.h | 5 +
include/libvirt/libvirt.h.in | 55 ++++++++++
python/generator.py | 1 +
python/libvirt-override-api.xml | 5 +
python/libvirt-override.c | 26 +++++
src/conf/domain_conf.c | 163 ++++++++++++++++++++++++++++-
src/conf/domain_conf.h | 26 +++++-
src/driver.h | 5 +
src/esx/esx_driver.c | 53 ++++++++++
src/libvirt.c | 47 +++++++++
src/libvirt_private.syms | 4 +
src/libvirt_public.syms | 5 +
src/libxl/libxl_driver.c | 75 ++++++++++---
src/lxc/lxc_driver.c | 76 ++++++++++----
src/openvz/openvz_conf.c | 16 ++-
src/openvz/openvz_driver.c | 52 ++++++++--
src/phyp/phyp_driver.c | 11 ++
src/qemu/qemu_driver.c | 90 ++++++++++++-----
src/qemu/qemu_migration.c | 24 +++--
src/qemu/qemu_process.c | 61 +++++++-----
src/qemu/qemu_process.h | 12 ++-
src/remote/remote_driver.c | 30 ++++++
src/remote/remote_protocol.c | 20 ++++
src/remote/remote_protocol.h | 16 +++
src/remote/remote_protocol.x | 12 ++-
src/remote_protocol-structs | 7 ++
src/test/test_driver.c | 102 +++++++++++++------
src/uml/uml_driver.c | 53 ++++++++--
src/vbox/vbox_tmpl.c | 55 ++++++++++
src/vmware/vmware_conf.c | 3 +-
src/vmware/vmware_driver.c | 55 ++++++++---
src/xen/xen_driver.c | 17 +++
src/xen/xen_driver.h | 1 +
src/xen/xen_hypervisor.c | 33 ++++++
src/xen/xen_hypervisor.h | 4 +
src/xen/xen_inotify.c | 1 +
src/xen/xend_internal.c | 96 +++++++++++++-----
src/xen/xend_internal.h | 1 +
src/xen/xm_internal.c | 18 +++
src/xen/xm_internal.h | 1 +
src/xen/xs_internal.c | 31 ++++++
src/xen/xs_internal.h | 3 +
src/xenapi/xenapi_driver.c | 44 ++++++++
tools/virsh.c | 195 +++++++++++++++++++++++++++++------
46 files changed, 1415 insertions(+), 236 deletions(-)
--
1.7.5.rc3