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

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to