e9392e4 qemu: support nospace reason in io error event

Authored and Committed by ericb 9 years ago
    qemu: support nospace reason in io error event
    
    Aeons ago (commit 34dcbbb4, v0.8.2), we added a new libvirt event
    (VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON) in order to tell the user WHY
    the guest halted.  This is because at least VDSM wants to react
    differently to ENOSPC events (resize the lvm partition to be larger,
    and resume the guest as if nothing had happened) from all other events
    (I/O is hosed, throw up our hands and flag things as broken).  At the
    time this was done, downstream RHEL qemu added a vendor extension
    '__com.redhat_reason', which would be exactly one of these strings:
    "enospc", "eperm", "eio", and "eother".  In our stupidity, we exposed
    those exact strings to clients, rather than an enum, and we also
    return "" if we did not have access to a reason (which was the case
    for upstream qemu).
    
    Fast forward to now: upstream qemu commit c7c2ff0c (will be qemu 2.2)
    FINALLY adds a 'nospace' boolean, after discussion with multiple
    projects determined that VDSM really doesn't care about distinction
    between any other error types.  So this patch converts 'nospace' into
    the string "enospc" for compatibility with RHEL clients that were
    already used to the downstream extension, while leaving the reason
    blank for all other cases (no change from the status quo).
    
    See also https://bugzilla.redhat.com/show_bug.cgi?id=1119784
    
    * src/qemu/qemu_monitor_json.c (qewmuMonitorJSONHandleIOError):
    Parse reason field from modern qemu.
    * include/libvirt/libvirt.h.in
    (virConnectDomainEventIOErrorReasonCallback): Document it.
    
    Signed-off-by: Eric Blake <eblake@redhat.com>
    
        
file modified
+6 -0
file modified
+6 -10