Migration/colo.c: Add new COLOExitReason to handle all failover state
In this patch we add the processing state for COLOExitReason, because we have to identify COLO in the failover processing state or failover error state. In the way, we can handle all the failover state. We have improved the description of the COLOExitReason by the way. Signed-off-by: Zhang Chen <chen.zhang@intel.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
1fe6ab267f
commit
3a43ac4757
@ -267,7 +267,11 @@ COLOStatus *qmp_query_colo_status(Error **errp)
|
||||
s->reason = COLO_EXIT_REASON_REQUEST;
|
||||
break;
|
||||
default:
|
||||
s->reason = COLO_EXIT_REASON_ERROR;
|
||||
if (migration_in_colo_state()) {
|
||||
s->reason = COLO_EXIT_REASON_PROCESSING;
|
||||
} else {
|
||||
s->reason = COLO_EXIT_REASON_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return s;
|
||||
@ -579,16 +583,13 @@ out:
|
||||
* or the user triggered failover.
|
||||
*/
|
||||
switch (failover_get_state()) {
|
||||
case FAILOVER_STATUS_NONE:
|
||||
qapi_event_send_colo_exit(COLO_MODE_PRIMARY,
|
||||
COLO_EXIT_REASON_ERROR);
|
||||
break;
|
||||
case FAILOVER_STATUS_COMPLETED:
|
||||
qapi_event_send_colo_exit(COLO_MODE_PRIMARY,
|
||||
COLO_EXIT_REASON_REQUEST);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
qapi_event_send_colo_exit(COLO_MODE_PRIMARY,
|
||||
COLO_EXIT_REASON_ERROR);
|
||||
}
|
||||
|
||||
/* Hope this not to be too long to wait here */
|
||||
@ -850,17 +851,18 @@ out:
|
||||
error_report_err(local_err);
|
||||
}
|
||||
|
||||
/*
|
||||
* There are only two reasons we can get here, some error happened
|
||||
* or the user triggered failover.
|
||||
*/
|
||||
switch (failover_get_state()) {
|
||||
case FAILOVER_STATUS_NONE:
|
||||
qapi_event_send_colo_exit(COLO_MODE_SECONDARY,
|
||||
COLO_EXIT_REASON_ERROR);
|
||||
break;
|
||||
case FAILOVER_STATUS_COMPLETED:
|
||||
qapi_event_send_colo_exit(COLO_MODE_SECONDARY,
|
||||
COLO_EXIT_REASON_REQUEST);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
qapi_event_send_colo_exit(COLO_MODE_SECONDARY,
|
||||
COLO_EXIT_REASON_ERROR);
|
||||
}
|
||||
|
||||
if (fb) {
|
||||
|
@ -1038,19 +1038,22 @@
|
||||
##
|
||||
# @COLOExitReason:
|
||||
#
|
||||
# The reason for a COLO exit
|
||||
# The reason for a COLO exit.
|
||||
#
|
||||
# @none: no failover has ever happened. This can't occur in the
|
||||
# COLO_EXIT event, only in the result of query-colo-status.
|
||||
# @none: failover has never happened. This state does not occur
|
||||
# in the COLO_EXIT event, and is only visible in the result of
|
||||
# query-colo-status.
|
||||
#
|
||||
# @request: COLO exit is due to an external request
|
||||
# @request: COLO exit is due to an external request.
|
||||
#
|
||||
# @error: COLO exit is due to an internal error
|
||||
# @error: COLO exit is due to an internal error.
|
||||
#
|
||||
# @processing: COLO is currently handling a failover (since 4.0).
|
||||
#
|
||||
# Since: 3.1
|
||||
##
|
||||
{ 'enum': 'COLOExitReason',
|
||||
'data': [ 'none', 'request', 'error' ] }
|
||||
'data': [ 'none', 'request', 'error' , 'processing' ] }
|
||||
|
||||
##
|
||||
# @x-colo-lost-heartbeat:
|
||||
|
Loading…
Reference in New Issue
Block a user