[libvirt] [PATCH 5/5] virsh: selective block device migration

Michal Privoznik mprivozn at redhat.com
Thu May 14 15:18:29 UTC 2015


On 12.05.2015 14:07, Pavel Boldin wrote:
> Add `virsh migrate' option `--migratedisks' that allows CLI user to
> explicitly specify block devices to migrate.
> 
> Signed-off-by: Pavel Boldin <pboldin at mirantis.com>
> ---
>  tools/virsh-domain.c | 43 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 43 insertions(+)
> 
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index 4b627e1..4f43a25 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -9793,6 +9793,10 @@ static const vshCmdOptDef opts_migrate[] = {
>       .type = VSH_OT_STRING,
>       .help = N_("filename containing updated XML for the target")
>      },
> +    {.name = "migratedisks",
> +     .type = VSH_OT_STRING,
> +     .help = N_("comma separated list of disks to be migrated")
> +    },

This needs to be documented in the manpage too.

>      {.name = NULL}
>  };
>  
> @@ -9852,6 +9856,45 @@ doMigrate(void *opaque)
>                                  VIR_MIGRATE_PARAM_DEST_NAME, opt) < 0)
>          goto save_error;
>  
> +    if (vshCommandOptStringReq(ctl, cmd, "migratedisks", &opt) < 0)
> +        goto out;
> +    if (opt) {
> +        const char **val = NULL;
> +        char *tok, *saveptr = NULL, *opt_copy = NULL, *optp;
> +        size_t max = 0, n = 0;
> +
> +        if (VIR_STRDUP(opt_copy, opt) < 0)
> +            goto save_error;
> +
> +        optp = opt_copy;
> +        do {
> +            tok = strtok_r(optp, ",", &saveptr);
> +            optp = NULL;
> +
> +            if (VIR_RESIZE_N(val, max, n, 1) < 0) {
> +                VIR_FREE(opt_copy);
> +                VIR_FREE(val);
> +                goto save_error;
> +            }
> +
> +            val[n] = tok;
> +            n++;
> +        } while (tok != NULL);

Consider virStringSplit().

> +
> +        if (virTypedParamsPackStrings(&params,
> +                                      &nparams,
> +                                      &maxparams,
> +                                      VIR_MIGRATE_PARAM_MIGRATE_DISKS,
> +                                      val) < 0) {
> +            VIR_FREE(opt_copy);
> +            VIR_FREE(val);
> +            goto save_error;
> +        }
> +
> +        VIR_FREE(opt_copy);
> +        VIR_FREE(val);
> +    }
> +
>      if (vshCommandOptStringReq(ctl, cmd, "xml", &opt) < 0)
>          goto out;
>      if (opt) {
> 

Otherwise looking good.

Michal




More information about the libvir-list mailing list