migration: Convert 'status' of MigrationInfo to use an enum type

The original 'status' is an open-coded 'str' type, convert it to use an
enum type.
This conversion is backwards compatible, better documented and
more convenient for future extensibility.

In addition, Fix a typo for qapi-schema.json (just remove the typo) :
s/'completed'. 'comppleted' (since 1.2)/'completed' (since 1.2)

Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
zhanghailiang 2015-03-13 16:08:40 +08:00 committed by Juan Quintela
parent e49f35bdb4
commit 24b8c39b5c
3 changed files with 38 additions and 23 deletions

7
hmp.c
View File

@ -162,7 +162,8 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
} }
if (info->has_status) { if (info->has_status) {
monitor_printf(mon, "Migration status: %s\n", info->status); monitor_printf(mon, "Migration status: %s\n",
MigrationStatus_lookup[info->status]);
monitor_printf(mon, "total time: %" PRIu64 " milliseconds\n", monitor_printf(mon, "total time: %" PRIu64 " milliseconds\n",
info->total_time); info->total_time);
if (info->has_expected_downtime) { if (info->has_expected_downtime) {
@ -1354,8 +1355,8 @@ static void hmp_migrate_status_cb(void *opaque)
MigrationInfo *info; MigrationInfo *info;
info = qmp_query_migrate(NULL); info = qmp_query_migrate(NULL);
if (!info->has_status || strcmp(info->status, "active") == 0 || if (!info->has_status || info->status == MIGRATION_STATUS_ACTIVE ||
strcmp(info->status, "setup") == 0) { info->status == MIGRATION_STATUS_SETUP) {
if (info->has_disk) { if (info->has_disk) {
int progress; int progress;

View File

@ -26,16 +26,6 @@
#include "qmp-commands.h" #include "qmp-commands.h"
#include "trace.h" #include "trace.h"
enum {
MIGRATION_STATUS_FAILED = -1,
MIGRATION_STATUS_NONE,
MIGRATION_STATUS_SETUP,
MIGRATION_STATUS_CANCELLING,
MIGRATION_STATUS_CANCELLED,
MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_COMPLETED,
};
#define MAX_THROTTLE (32 << 20) /* Migration speed throttling */ #define MAX_THROTTLE (32 << 20) /* Migration speed throttling */
/* Amount of time to allocate to each "chunk" of bandwidth-throttled /* Amount of time to allocate to each "chunk" of bandwidth-throttled
@ -205,13 +195,13 @@ MigrationInfo *qmp_query_migrate(Error **errp)
break; break;
case MIGRATION_STATUS_SETUP: case MIGRATION_STATUS_SETUP:
info->has_status = true; info->has_status = true;
info->status = g_strdup("setup"); info->status = MIGRATION_STATUS_SETUP;
info->has_total_time = false; info->has_total_time = false;
break; break;
case MIGRATION_STATUS_ACTIVE: case MIGRATION_STATUS_ACTIVE:
case MIGRATION_STATUS_CANCELLING: case MIGRATION_STATUS_CANCELLING:
info->has_status = true; info->has_status = true;
info->status = g_strdup("active"); info->status = MIGRATION_STATUS_ACTIVE;
info->has_total_time = true; info->has_total_time = true;
info->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) info->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME)
- s->total_time; - s->total_time;
@ -247,7 +237,7 @@ MigrationInfo *qmp_query_migrate(Error **errp)
get_xbzrle_cache_stats(info); get_xbzrle_cache_stats(info);
info->has_status = true; info->has_status = true;
info->status = g_strdup("completed"); info->status = MIGRATION_STATUS_COMPLETED;
info->has_total_time = true; info->has_total_time = true;
info->total_time = s->total_time; info->total_time = s->total_time;
info->has_downtime = true; info->has_downtime = true;
@ -269,11 +259,11 @@ MigrationInfo *qmp_query_migrate(Error **errp)
break; break;
case MIGRATION_STATUS_FAILED: case MIGRATION_STATUS_FAILED:
info->has_status = true; info->has_status = true;
info->status = g_strdup("failed"); info->status = MIGRATION_STATUS_FAILED;
break; break;
case MIGRATION_STATUS_CANCELLED: case MIGRATION_STATUS_CANCELLED:
info->has_status = true; info->has_status = true;
info->status = g_strdup("cancelled"); info->status = MIGRATION_STATUS_CANCELLED;
break; break;
} }

View File

@ -410,19 +410,43 @@
'cache-miss': 'int', 'cache-miss-rate': 'number', 'cache-miss': 'int', 'cache-miss-rate': 'number',
'overflow': 'int' } } 'overflow': 'int' } }
# @MigrationStatus:
#
# An enumeration of migration status.
#
# @none: no migration has ever happened.
#
# @setup: migration process has been initiated.
#
# @cancelling: in the process of cancelling migration.
#
# @cancelled: cancelling migration is finished.
#
# @active: in the process of doing migration.
#
# @completed: migration is finished.
#
# @failed: some error occurred during migration process.
#
# Since: 2.3
#
##
{ 'enum': 'MigrationStatus',
'data': [ 'none', 'setup', 'cancelling', 'cancelled',
'active', 'completed', 'failed' ] }
## ##
# @MigrationInfo # @MigrationInfo
# #
# Information about current migration process. # Information about current migration process.
# #
# @status: #optional string describing the current migration status. # @status: #optional @MigrationStatus describing the current migration status.
# As of 0.14.0 this can be 'setup', 'active', 'completed', 'failed' or # If this field is not returned, no migration process
# 'cancelled'. If this field is not returned, no migration process
# has been initiated # has been initiated
# #
# @ram: #optional @MigrationStats containing detailed migration # @ram: #optional @MigrationStats containing detailed migration
# status, only returned if status is 'active' or # status, only returned if status is 'active' or
# 'completed'. 'comppleted' (since 1.2) # 'completed'(since 1.2)
# #
# @disk: #optional @MigrationStats containing detailed disk migration # @disk: #optional @MigrationStats containing detailed disk migration
# status, only returned if status is 'active' and it is a block # status, only returned if status is 'active' and it is a block
@ -453,7 +477,7 @@
# Since: 0.14.0 # Since: 0.14.0
## ##
{ 'type': 'MigrationInfo', { 'type': 'MigrationInfo',
'data': {'*status': 'str', '*ram': 'MigrationStats', 'data': {'*status': 'MigrationStatus', '*ram': 'MigrationStats',
'*disk': 'MigrationStats', '*disk': 'MigrationStats',
'*xbzrle-cache': 'XBZRLECacheStats', '*xbzrle-cache': 'XBZRLECacheStats',
'*total-time': 'int', '*total-time': 'int',