Add migrate-set-capabilities
The management can enable/disable a capability for the next migration by using migrate-set-capabilities QMP command. The user can use migrate_set_capability HMP command. Signed-off-by: Orit Wasserman <owasserm@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Luiz Capitulino <lcapitulino@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
bbf6da32b5
commit
0045843324
@ -858,6 +858,20 @@ STEXI
|
||||
@item migrate_set_downtime @var{second}
|
||||
@findex migrate_set_downtime
|
||||
Set maximum tolerated downtime (in seconds) for migration.
|
||||
ETEXI
|
||||
|
||||
{
|
||||
.name = "migrate_set_capability",
|
||||
.args_type = "capability:s,state:b",
|
||||
.params = "capability state",
|
||||
.help = "Enable/Disable the usage of a capability for migration",
|
||||
.mhandler.cmd = hmp_migrate_set_capability,
|
||||
},
|
||||
|
||||
STEXI
|
||||
@item migrate_set_capability @var{capability} @var{state}
|
||||
@findex migrate_set_capability
|
||||
Enable/Disable the usage of a capability @var{capability} for migration.
|
||||
ETEXI
|
||||
|
||||
{
|
||||
|
32
hmp.c
32
hmp.c
@ -770,6 +770,38 @@ void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict)
|
||||
qmp_migrate_set_speed(value, NULL);
|
||||
}
|
||||
|
||||
void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
const char *cap = qdict_get_str(qdict, "capability");
|
||||
bool state = qdict_get_bool(qdict, "state");
|
||||
Error *err = NULL;
|
||||
MigrationCapabilityStatusList *caps = g_malloc0(sizeof(*caps));
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MIGRATION_CAPABILITY_MAX; i++) {
|
||||
if (strcmp(cap, MigrationCapability_lookup[i]) == 0) {
|
||||
caps->value = g_malloc0(sizeof(*caps->value));
|
||||
caps->value->capability = i;
|
||||
caps->value->state = state;
|
||||
caps->next = NULL;
|
||||
qmp_migrate_set_capabilities(caps, &err);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == MIGRATION_CAPABILITY_MAX) {
|
||||
error_set(&err, QERR_INVALID_PARAMETER, cap);
|
||||
}
|
||||
|
||||
qapi_free_MigrationCapabilityStatusList(caps);
|
||||
|
||||
if (err) {
|
||||
monitor_printf(mon, "migrate_set_parameter: %s\n",
|
||||
error_get_pretty(err));
|
||||
error_free(err);
|
||||
}
|
||||
}
|
||||
|
||||
void hmp_set_password(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||
|
1
hmp.h
1
hmp.h
@ -52,6 +52,7 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
|
||||
void hmp_migrate_cancel(Monitor *mon, const QDict *qdict);
|
||||
void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);
|
||||
void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict);
|
||||
void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict);
|
||||
void hmp_set_password(Monitor *mon, const QDict *qdict);
|
||||
void hmp_expire_password(Monitor *mon, const QDict *qdict);
|
||||
void hmp_eject(Monitor *mon, const QDict *qdict);
|
||||
|
16
migration.c
16
migration.c
@ -190,6 +190,22 @@ MigrationInfo *qmp_query_migrate(Error **errp)
|
||||
return info;
|
||||
}
|
||||
|
||||
void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
|
||||
Error **errp)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
MigrationCapabilityStatusList *cap;
|
||||
|
||||
if (s->state == MIG_STATE_ACTIVE) {
|
||||
error_set(errp, QERR_MIGRATION_ACTIVE);
|
||||
return;
|
||||
}
|
||||
|
||||
for (cap = params; cap; cap = cap->next) {
|
||||
s->enabled_capabilities[cap->value->capability] = cap->value->state;
|
||||
}
|
||||
}
|
||||
|
||||
/* shared migration helpers */
|
||||
|
||||
static int migrate_fd_cleanup(MigrationState *s)
|
||||
|
@ -333,6 +333,18 @@
|
||||
{ 'type': 'MigrationCapabilityStatus',
|
||||
'data': { 'capability' : 'MigrationCapability', 'state' : 'bool' } }
|
||||
|
||||
##
|
||||
# @migrate-set-capabilities
|
||||
#
|
||||
# Enable/Disable the following migration capabilities (like xbzrle)
|
||||
#
|
||||
# @capabilities: json array of capability modifications to make
|
||||
#
|
||||
# Since: 1.2
|
||||
##
|
||||
{ 'command': 'migrate-set-capabilities',
|
||||
'data': { 'capabilities': ['MigrationCapabilityStatus'] } }
|
||||
|
||||
##
|
||||
# @query-migrate-capabilities
|
||||
#
|
||||
|
@ -2143,6 +2143,29 @@ EQMP
|
||||
},
|
||||
|
||||
SQMP
|
||||
migrate-set-capabilities
|
||||
-------
|
||||
|
||||
Enable/Disable migration capabilities
|
||||
|
||||
- "xbzrle": xbzrle support
|
||||
|
||||
Arguments:
|
||||
|
||||
Example:
|
||||
|
||||
-> { "execute": "migrate-set-capabilities" , "arguments":
|
||||
{ "capabilities": [ { "capability": "xbzrle", "state": true } ] } }
|
||||
|
||||
EQMP
|
||||
|
||||
{
|
||||
.name = "migrate-set-capabilities",
|
||||
.args_type = "capabilities:O",
|
||||
.params = "capability:s,state:b",
|
||||
.mhandler.cmd_new = qmp_marshal_input_migrate_set_capabilities,
|
||||
},
|
||||
SQMP
|
||||
query-migrate-capabilities
|
||||
-------
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user