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}
|
@item migrate_set_downtime @var{second}
|
||||||
@findex migrate_set_downtime
|
@findex migrate_set_downtime
|
||||||
Set maximum tolerated downtime (in seconds) for migration.
|
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
|
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);
|
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)
|
void hmp_set_password(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
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_cancel(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_migrate_set_downtime(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_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_set_password(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_expire_password(Monitor *mon, const QDict *qdict);
|
void hmp_expire_password(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_eject(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;
|
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 */
|
/* shared migration helpers */
|
||||||
|
|
||||||
static int migrate_fd_cleanup(MigrationState *s)
|
static int migrate_fd_cleanup(MigrationState *s)
|
||||||
|
|
|
@ -333,6 +333,18 @@
|
||||||
{ 'type': 'MigrationCapabilityStatus',
|
{ 'type': 'MigrationCapabilityStatus',
|
||||||
'data': { 'capability' : 'MigrationCapability', 'state' : 'bool' } }
|
'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
|
# @query-migrate-capabilities
|
||||||
#
|
#
|
||||||
|
|
|
@ -2143,6 +2143,29 @@ EQMP
|
||||||
},
|
},
|
||||||
|
|
||||||
SQMP
|
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
|
query-migrate-capabilities
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue