Enable migration without shared storage from the monitor

This patch adds the option to activate non-shared storage migration from the
monitor.
The migration command is as follows:
(qemu) migrate -d tcp:0:4444 # for ordinary live migration
(qemu) migrate -d -b tcp:0:4444 # for live migration with complete storage copy
(qemu) migrate -d -i tcp:0:4444 # for live migration with incremental storage copy, storage is cow based.

Changes from v4:
- Minor coding style issues.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
lirans@il.ibm.com 2009-11-02 15:41:13 +02:00 committed by Anthony Liguori
parent c163b5cae9
commit fbc3d96cc4
2 changed files with 42 additions and 13 deletions

View file

@ -2908,6 +2908,18 @@ static int default_fmt_size = 4;
#define MAX_ARGS 16
static int is_valid_option(const char *c, const char *typestr)
{
char option[3];
option[0] = '-';
option[1] = *c;
option[2] = '\0';
typestr = strstr(typestr, option);
return (typestr != NULL);
}
static const mon_cmd_t *monitor_parse_command(Monitor *mon,
const char *cmdline,
QDict *qdict)
@ -3100,7 +3112,8 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
break;
case '-':
{
int has_option;
const char *tmp = p;
int has_option, skip_key = 0;
/* option */
c = *typestr++;
@ -3111,13 +3124,22 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
has_option = 0;
if (*p == '-') {
p++;
if (*p != c) {
monitor_printf(mon, "%s: unsupported option -%c\n",
cmdname, *p);
goto fail;
if(c != *p) {
if(!is_valid_option(p, typestr)) {
monitor_printf(mon, "%s: unsupported option -%c\n",
cmdname, *p);
goto fail;
} else {
skip_key = 1;
}
}
if(skip_key) {
p = tmp;
} else {
p++;
has_option = 1;
}
p++;
has_option = 1;
}
qdict_put(qdict, key, qint_from_int(has_option));
}

View file

@ -724,16 +724,23 @@ ETEXI
{
.name = "migrate",
.args_type = "detach:-d,uri:s",
.params = "[-d] uri",
.help = "migrate to URI (using -d to not wait for completion)",
.user_print = monitor_user_noop,
.mhandler.cmd_new = do_migrate,
.args_type = "detach:-d,blk:-b,inc:-i,uri:s",
.params = "[-d] [-b] [-i] uri",
.help = "migrate to URI (using -d to not wait for completion)"
"\n\t\t\t -b for migration without shared storage with"
" full copy of disk\n\t\t\t -i for migration without "
"shared storage with incremental copy of disk "
"(base image shared between src and destination)",
.user_print = monitor_user_noop,
.mhandler.cmd_new = do_migrate,
},
STEXI
@item migrate [-d] @var{uri}
@item migrate [-d] [-b] [-i] @var{uri}
Migrate to @var{uri} (using -d to not wait for completion).
-b for migration with full copy of disk
-i for migration with incremental copy of disk (base image is shared)
ETEXI
{