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:
		
							parent
							
								
									e49f35bdb4
								
							
						
					
					
						commit
						24b8c39b5c
					
				
							
								
								
									
										7
									
								
								hmp.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								hmp.c
									
									
									
									
									
								
							@ -162,7 +162,8 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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",
 | 
			
		||||
                       info->total_time);
 | 
			
		||||
        if (info->has_expected_downtime) {
 | 
			
		||||
@ -1354,8 +1355,8 @@ static void hmp_migrate_status_cb(void *opaque)
 | 
			
		||||
    MigrationInfo *info;
 | 
			
		||||
 | 
			
		||||
    info = qmp_query_migrate(NULL);
 | 
			
		||||
    if (!info->has_status || strcmp(info->status, "active") == 0 ||
 | 
			
		||||
        strcmp(info->status, "setup") == 0) {
 | 
			
		||||
    if (!info->has_status || info->status == MIGRATION_STATUS_ACTIVE ||
 | 
			
		||||
        info->status == MIGRATION_STATUS_SETUP) {
 | 
			
		||||
        if (info->has_disk) {
 | 
			
		||||
            int progress;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -26,16 +26,6 @@
 | 
			
		||||
#include "qmp-commands.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 */
 | 
			
		||||
 | 
			
		||||
/* Amount of time to allocate to each "chunk" of bandwidth-throttled
 | 
			
		||||
@ -205,13 +195,13 @@ MigrationInfo *qmp_query_migrate(Error **errp)
 | 
			
		||||
        break;
 | 
			
		||||
    case MIGRATION_STATUS_SETUP:
 | 
			
		||||
        info->has_status = true;
 | 
			
		||||
        info->status = g_strdup("setup");
 | 
			
		||||
        info->status = MIGRATION_STATUS_SETUP;
 | 
			
		||||
        info->has_total_time = false;
 | 
			
		||||
        break;
 | 
			
		||||
    case MIGRATION_STATUS_ACTIVE:
 | 
			
		||||
    case MIGRATION_STATUS_CANCELLING:
 | 
			
		||||
        info->has_status = true;
 | 
			
		||||
        info->status = g_strdup("active");
 | 
			
		||||
        info->status = MIGRATION_STATUS_ACTIVE;
 | 
			
		||||
        info->has_total_time = true;
 | 
			
		||||
        info->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME)
 | 
			
		||||
            - s->total_time;
 | 
			
		||||
@ -247,7 +237,7 @@ MigrationInfo *qmp_query_migrate(Error **errp)
 | 
			
		||||
        get_xbzrle_cache_stats(info);
 | 
			
		||||
 | 
			
		||||
        info->has_status = true;
 | 
			
		||||
        info->status = g_strdup("completed");
 | 
			
		||||
        info->status = MIGRATION_STATUS_COMPLETED;
 | 
			
		||||
        info->has_total_time = true;
 | 
			
		||||
        info->total_time = s->total_time;
 | 
			
		||||
        info->has_downtime = true;
 | 
			
		||||
@ -269,11 +259,11 @@ MigrationInfo *qmp_query_migrate(Error **errp)
 | 
			
		||||
        break;
 | 
			
		||||
    case MIGRATION_STATUS_FAILED:
 | 
			
		||||
        info->has_status = true;
 | 
			
		||||
        info->status = g_strdup("failed");
 | 
			
		||||
        info->status = MIGRATION_STATUS_FAILED;
 | 
			
		||||
        break;
 | 
			
		||||
    case MIGRATION_STATUS_CANCELLED:
 | 
			
		||||
        info->has_status = true;
 | 
			
		||||
        info->status = g_strdup("cancelled");
 | 
			
		||||
        info->status = MIGRATION_STATUS_CANCELLED;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -410,19 +410,43 @@
 | 
			
		||||
           'cache-miss': 'int', 'cache-miss-rate': 'number',
 | 
			
		||||
           '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
 | 
			
		||||
#
 | 
			
		||||
# Information about current migration process.
 | 
			
		||||
#
 | 
			
		||||
# @status: #optional string describing the current migration status.
 | 
			
		||||
#          As of 0.14.0 this can be 'setup', 'active', 'completed', 'failed' or
 | 
			
		||||
#          'cancelled'. If this field is not returned, no migration process
 | 
			
		||||
# @status: #optional @MigrationStatus describing the current migration status.
 | 
			
		||||
#          If this field is not returned, no migration process
 | 
			
		||||
#          has been initiated
 | 
			
		||||
#
 | 
			
		||||
# @ram: #optional @MigrationStats containing detailed migration
 | 
			
		||||
#       status, only returned if status is 'active' or
 | 
			
		||||
#       'completed'. 'comppleted' (since 1.2)
 | 
			
		||||
#       'completed'(since 1.2)
 | 
			
		||||
#
 | 
			
		||||
# @disk: #optional @MigrationStats containing detailed disk migration
 | 
			
		||||
#        status, only returned if status is 'active' and it is a block
 | 
			
		||||
@ -453,7 +477,7 @@
 | 
			
		||||
# Since: 0.14.0
 | 
			
		||||
##
 | 
			
		||||
{ 'type': 'MigrationInfo',
 | 
			
		||||
  'data': {'*status': 'str', '*ram': 'MigrationStats',
 | 
			
		||||
  'data': {'*status': 'MigrationStatus', '*ram': 'MigrationStats',
 | 
			
		||||
           '*disk': 'MigrationStats',
 | 
			
		||||
           '*xbzrle-cache': 'XBZRLECacheStats',
 | 
			
		||||
           '*total-time': 'int',
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user