[libvirt] PATCH: Add domain event "detail" information

Daniel Veillard veillard at redhat.com
Mon Nov 17 12:03:29 UTC 2008


On Fri, Nov 14, 2008 at 05:44:29PM +0000, Daniel P. Berrange wrote:
> As per our earlier discussion today, this patch expands the callback for
> domain events so that it also gets a event type specific 'detail' field.
> This is also kept as an int, and we define enumerations for the possible
> values associated with each type.
[...]

  Okay, that made the overall callbacks set clearer, ACK

> If a event type has no detail, 0 is passed.

  Actually I would define a detail enum for all event type just to
make clear what the value will be and expose how it's intended to be
extended if needed.

> I don't make use of 'CRASHED' in QEMU driver yet. It might be useful in
> Xen though - when a PV guest crashes, Xen stops the domain running, but
> leaves it there in a shutoff state, but marked as crashed.
> 
> Now using the C event-test program you can see the effects:
> 
>   myDomainEventCallback1 EVENT: Domain F9x86_64(2) Started Booted
>   myDomainEventCallback2 EVENT: Domain F9x86_64(2) Started Booted
>   myDomainEventCallback1 EVENT: Domain F9x86_64(-1) Stopped Destroyed
>   myDomainEventCallback2 EVENT: Domain F9x86_64(-1) Stopped Destroyed
>   myDomainEventCallback1 EVENT: Domain F9x86_64(3) Started Booted
>   myDomainEventCallback2 EVENT: Domain F9x86_64(3) Started Booted
>   myDomainEventCallback1 EVENT: Domain F9x86_64(3) Suspended 
>   myDomainEventCallback2 EVENT: Domain F9x86_64(3) Suspended 
>   myDomainEventCallback1 EVENT: Domain F9x86_64(3) Resumed 
>   myDomainEventCallback2 EVENT: Domain F9x86_64(3) Resumed 
>   myDomainEventCallback1 EVENT: Domain F9x86_64(-1) Stopped Shutdown
>   myDomainEventCallback2 EVENT: Domain F9x86_64(-1) Stopped Shutdown
> 
> Of the following sequence of actions
> 
>   virsh start F9x86_64
>   virsh destroy F9x86_64
>   virsh start F9x86_64
>   virsh suspend F9x86_64
>   virsh resume F9x86_64
>   virsh shutdown F9x86_64
> 
> For the last 'shutdown' operation, you'll see the same if you just run
> a graceful shutdown inside the guest itself.

  okay

> NB, I've not tested saved/restored because my install of KVM is not new
> enough to support that correctly, but I expect it to work without trouble.
> Likewise for migration.
> 
> A word about migration...
> 
>  - The destination host first gets a STARTED event, with detail MIGRATED
>    when it starts running
>  - The source host then gets a STOPPED event with detail MIGRATED when
>    it completes

  What about 'live' migration, i.e. events sent when the migration flows
begin but the domain is stil running. I don't know if KVM has this but
on Xen I would expect to be able to notice this. On the target host that
could be indicated by SUSPENDED + VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED
because it will consume the memory resource like a suspended domain but
no actual CPU cycle (well except for migration itself). On the source
host this is a bit harder to indicate, maybe this isn't needed as the
resource usage doesn't really change at that point.
  
>  - The destination host then gets a RESUMED event, on success, and
>    a STOPPED event with detail FAILED if migration aborts.

  okay

> +static const char *eventDetailToString(int event, int detail) {
> +    const char *ret = "";
> +    switch(event) {
> +        case VIR_DOMAIN_EVENT_DEFINED:
> +            if (detail == VIR_DOMAIN_EVENT_DEFINED_ADDED)
> +                ret = "Added";
> +            else if (detail == VIR_DOMAIN_EVENT_DEFINED_UPDATED)
> +                ret = "Updated";
> +            break;
> +        case VIR_DOMAIN_EVENT_STARTED:
> +            switch (detail) {
> +            case VIR_DOMAIN_EVENT_STARTED_BOOTED:
> +                ret = "Booted";
> +                break;
> +            case VIR_DOMAIN_EVENT_STARTED_MIGRATED:
> +                ret = "Migrated";
> +                break;
> +            case VIR_DOMAIN_EVENT_STARTED_RESTORED:
> +                ret = "Restored";
> +                break;
> +            }
> +            break;
> +        case VIR_DOMAIN_EVENT_STOPPED:
> +            switch (detail) {
> +            case VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN:
> +                ret = "Shutdown";
> +                break;
> +            case VIR_DOMAIN_EVENT_STOPPED_DESTROYED:
> +                ret = "Destroyed";
> +                break;
> +            case VIR_DOMAIN_EVENT_STOPPED_CRASHED:
> +                ret = "Crashed";
> +                break;
> +            case VIR_DOMAIN_EVENT_STOPPED_MIGRATED:
> +                ret = "Migrated";
> +                break;
> +            case VIR_DOMAIN_EVENT_STOPPED_SAVED:
> +                ret = "Failed";
> +                break;
> +            case VIR_DOMAIN_EVENT_STOPPED_FAILED:
> +                ret = "Failed";
> +                break;
> +            }
> +            break;
>      }
>      return ret;

  One more reason to add enums for all cases would be to catch here
with a warning missing addition to the enums.

[...]

  Patch looks fine to me, I would just add enums for all type but I
think this is still okay as-is too as this doesn't change the API/ABI
in an incompatible way.

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list