[libvirt] [PATCHv2 08/15] blockjob: expose qemu commands for mirrored storage migration

Federico Simoncelli fsimonce at redhat.com
Fri Apr 6 16:04:21 UTC 2012


----- Original Message -----
> From: "Eric Blake" <eblake at redhat.com>
> To: libvir-list at redhat.com
> Cc: pbonzini at redhat.com, fsimonce at redhat.com
> Sent: Friday, April 6, 2012 6:36:54 AM
> Subject: [PATCHv2 08/15] blockjob: expose qemu commands for mirrored storage migration
> 
> The new block copy storage migration sequence requires both the
> 'drive-mirror' action in 'transaction' (present if the 'drive-mirror'
> standalone monitor command also exists) and the 'drive-reopen'
> monitor
> command (it would be nice if that were also part of a 'transaction',
> but the initial qemu implementation has it standalone only).
> 
> As of this[1] qemu email, both commands have been proposed but not
> yet
> incorporated into the tree, so there is a risk that qemu 1.1 will
> not have these commands, or will have something subtly different.
> [1]https://lists.gnu.org/archive/html/qemu-devel/2012-03/msg01524.html
> 
> * src/qemu/qemu_capabilities.h (QEMU_CAPS_DRIVE_MIRROR)
> (QEMU_CAPS_DRIVE_REOPEN): New bits.
> * src/qemu/qemu_capabilities.c (qemuCaps): Name them.
> * src/qemu/qemu_monitor_json.c (qemuMonitorJSONCheckCommands): Set
> them.
> (qemuMonitorJSONDriveMirror, qemuMonitorDriveReopen): New functions.
> * src/qemu/qemu_monitor_json.h (qemuMonitorJSONDriveMirror)
> (qemuMonitorDriveReopen): Declare them.
> * src/qemu/qemu_monitor.c (qemuMonitorDriveMirror)
> (qemuMonitorDriveReopen): New passthroughs.
> * src/qemu/qemu_monitor.h (qemuMonitorDriveMirror)
> (qemuMonitorDriveReopen): Declare them.
> ---
>  src/qemu/qemu_capabilities.c |    3 ++
>  src/qemu/qemu_capabilities.h |    2 +
>  src/qemu/qemu_monitor.c      |   50 ++++++++++++++++++++++++++++
>  src/qemu/qemu_monitor.h      |   23 +++++++++++++
>  src/qemu/qemu_monitor_json.c |   74
>  +++++++++++++++++++++++++++++++++++++++--
>  src/qemu/qemu_monitor_json.h |   21 +++++++++++-
>  6 files changed, 167 insertions(+), 6 deletions(-)
> 
[...]
> diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
> index e1a8d4c..f33bed8 100644
> --- a/src/qemu/qemu_monitor.c
> +++ b/src/qemu/qemu_monitor.c
> @@ -2685,6 +2685,32 @@ qemuMonitorDiskSnapshot(qemuMonitorPtr mon,
> virJSONValuePtr actions,
>      return ret;
>  }
> 
> +/* Add the drive-mirror action to a transaction.  */
> +int
> +qemuMonitorDriveMirror(qemuMonitorPtr mon, virJSONValuePtr actions,
> +                       const char *device, const char *file,
> +                       const char *format, int mode)
> +{
> +    int ret;
> +
> +    VIR_DEBUG("mon=%p, actions=%p, device=%s, file=%s, format=%s,
> mode=%o",
> +              mon, actions, device, file, format, mode);
> +
> +    if (!mon) {
> +        qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> +                        _("monitor must not be NULL"));
> +        return -1;
> +    }
> +
> +    if (mon->json)
> +        ret = qemuMonitorJSONDriveMirror(mon, actions, device, file,
> format,
> +                                         mode);
> +    else
> +        qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> +                        _("drive-mirror requires JSON monitor"));

You should set ret to -1 here (or return -1).

> +    return ret;
> +}
> +
>  /* Use the transaction QMP command to run atomic snapshot commands.
>   */
>  int
>  qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
> @@ -2701,6 +2727,30 @@ qemuMonitorTransaction(qemuMonitorPtr mon,
> virJSONValuePtr actions)
>      return ret;
>  }
> 
> +/* Use the drive-reopen monitor command.  */
> +int
> +qemuMonitorDriveReopen(qemuMonitorPtr mon, const char *device,
> +                       const char *file, const char *format)
> +{
> +    int ret;
> +
> +    VIR_DEBUG("mon=%p, device=%s, file=%s, format=%s",
> +              mon, device, file, format);
> +
> +    if (!mon) {
> +        qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> +                        _("monitor must not be NULL"));
> +        return -1;
> +    }
> +
> +    if (mon->json)
> +        ret = qemuMonitorJSONDriveReopen(mon, device, file, format);
> +    else
> +        qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> +                        _("drive-reopen requires JSON monitor"));

You should set ret to -1 here (or return -1).

> +    return ret;
> +}
> +
>  int qemuMonitorArbitraryCommand(qemuMonitorPtr mon,
>                                  const char *cmd,
>                                  char **reply,

-- 
Federico




More information about the libvir-list mailing list