[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH COLO-Frame v9 22/32] qmp event: Add event notificati
From: |
zhanghailiang |
Subject: |
[Qemu-devel] [PATCH COLO-Frame v9 22/32] qmp event: Add event notification for COLO error |
Date: |
Wed, 2 Sep 2015 16:23:09 +0800 |
If some errors happen during VM's COLO FT stage, it's important to notify the
users
of this event. Together with 'colo_lost_heartbeat', users can intervene in
COLO's
failover work immediately.
If users don't want to get involved in COLO's failover verdict,
it is still necessary to notify users that we exit COLO mode.
Cc: Markus Armbruster <address@hidden>
Cc: Michael Roth <address@hidden>
Signed-off-by: zhanghailiang <address@hidden>
Signed-off-by: Li Zhijian <address@hidden>
---
docs/qmp/qmp-events.txt | 17 +++++++++++++++++
migration/colo.c | 17 +++++++++++++----
qapi-schema.json | 16 ++++++++++++++++
qapi/event.json | 17 +++++++++++++++++
4 files changed, 63 insertions(+), 4 deletions(-)
diff --git a/docs/qmp/qmp-events.txt b/docs/qmp/qmp-events.txt
index d92cc48..0bd7c41 100644
--- a/docs/qmp/qmp-events.txt
+++ b/docs/qmp/qmp-events.txt
@@ -182,6 +182,23 @@ Example:
Note: The "ready to complete" status is always reset by a BLOCK_JOB_ERROR
event.
+COLO_EXIT
+---------
+
+Emitted when VM finishes COLO mode due to some errors happening or
+the request of users.
+
+Data:
+
+ - "mode": COLO mode, primary or secondary side (json-string)
+ - "reason": the exit reason, internal error or external request.
(json-string)
+ - "error": error message (json-string, operation)
+
+Example:
+
+{"timestamp": {"seconds": 2032141960, "microseconds": 417172},
+ "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } }
+
DEVICE_DELETED
--------------
diff --git a/migration/colo.c b/migration/colo.c
index 9ad285c..29b5334 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -18,6 +18,7 @@
#include "qemu/error-report.h"
#include "qemu/sockets.h"
#include "migration/failover.h"
+#include "qapi-event.h"
/*
* checkpoint interval: unit ms
@@ -347,6 +348,9 @@ out:
current_time = error_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
if (ret < 0) {
error_report("Detect some error: %s", strerror(-ret));
+ qapi_event_send_colo_exit(COLO_MODE_PRIMARY, COLO_EXIT_REASON_ERROR,
+ true, strerror(-ret), NULL);
+
/* Give users time to get involved in this verdict */
while (current_time - error_time <= DEFAULT_FAILOVER_DELAY) {
if (failover_request_is_active()) {
@@ -363,15 +367,14 @@ out:
failover_request_active(NULL);
}
qemu_mutex_unlock_iothread();
+ } else {
+ qapi_event_send_colo_exit(COLO_MODE_PRIMARY, COLO_EXIT_REASON_REQUEST,
+ false, NULL, NULL);
}
qsb_free(buffer);
buffer = NULL;
- if (s->from_dst_file) {
- qemu_fclose(s->from_dst_file);
- }
-
return NULL;
}
@@ -552,6 +555,9 @@ out:
if (ret < 0) {
error_report("colo incoming thread will exit, detect error: %s",
strerror(-ret));
+ qapi_event_send_colo_exit(COLO_MODE_SECONDARY, COLO_EXIT_REASON_ERROR,
+ true, strerror(-ret), NULL);
+
/* Give users time to get involved in this verdict */
while (current_time - error_time <= DEFAULT_FAILOVER_DELAY) {
if (failover_request_is_active()) {
@@ -570,6 +576,9 @@ out:
error_report("SVM is going to exit in default!");
exit(1);
}
+ } else {
+ qapi_event_send_colo_exit(COLO_MODE_SECONDARY,
COLO_EXIT_REASON_REQUEST,
+ false, NULL, NULL);
}
if (fb) {
diff --git a/qapi-schema.json b/qapi-schema.json
index 8468552..f75e96b 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -712,6 +712,22 @@
'data': [ 'unknown', 'primary', 'secondary'] }
##
+# @COLOExitReason
+#
+# The reason of COLO exit
+#
+# @unknow: unknown reason
+#
+# @request: COLO exit is due to an external request
+#
+# @error: COLO exit is due to an internal error
+#
+# Since: 2.5
+##
+{ 'enum': 'COLOExitReason',
+ 'data': [ 'unknown', 'request', 'error'] }
+
+##
# @colo-lost-heartbeat
#
# Tell qemu that heartbeat is lost, request it to do takeover procedures.
diff --git a/qapi/event.json b/qapi/event.json
index f0cef01..6158ab5 100644
--- a/qapi/event.json
+++ b/qapi/event.json
@@ -255,6 +255,23 @@
'data': {'status': 'MigrationStatus'}}
##
+# @COLO_EXIT
+#
+# Emitted when VM finishes COLO mode due to some errors happening or
+# the request of users.
+#
+# @mode: @COLOMode describing which side of VM is exit.
+#
+# @reason: @COLOExitReason describing the reason of colo exit.
+#
+# @error: #optional, error message. Only present on error happening.
+#
+# Since: 2.5
+##
+{ 'event': 'COLO_EXIT',
+ 'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason', '*error': 'str' } }
+
+##
# @ACPI_DEVICE_OST
#
# Emitted when guest executes ACPI _OST method.
--
1.8.3.1
- [Qemu-devel] [PATCH COLO-Frame v9 07/32] migration: Rename the'file' member of MigrationState and MigrationIncomingState, (continued)
- [Qemu-devel] [PATCH COLO-Frame v9 07/32] migration: Rename the'file' member of MigrationState and MigrationIncomingState, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 13/32] COLO: Load PVM's dirty pages into SVM's RAM cache temporarily, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 19/32] COLO: Implement failover work for Primary VM, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 20/32] COLO: Implement failover work for Secondary VM, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 17/32] COLO failover: Introduce a new command to trigger a failover, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 21/32] COLO: implement default failover treatment, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 10/32] COLO: Add a new RunState RUN_STATE_COLO, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 23/32] COLO failover: Shutdown related socket fd when do failover, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 18/32] COLO failover: Introduce state to record failover process, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 24/32] COLO failover: Don't do failover during loading VM's state, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 22/32] qmp event: Add event notification for COLO error,
zhanghailiang <=
- [Qemu-devel] [PATCH COLO-Frame v9 26/32] COLO: Implement shutdown checkpoint, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 30/32] COLO: Split qemu_savevm_state_begin out of checkpoint process, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 25/32] COLO: Control the checkpoint delay time by migrate-set-parameters command, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 29/32] COLO: Separate the process of saving/loading ram and device state, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 28/32] savevm: Split load vm state function qemu_loadvm_state, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 32/32] COLO: Add net packets treatment into COLO, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 31/32] COLO: Add block replication into colo process, zhanghailiang, 2015/09/02
- [Qemu-devel] [PATCH COLO-Frame v9 27/32] COLO: Update the global runstate after going into colo state, zhanghailiang, 2015/09/02
- Re: [Qemu-devel] [PATCH COLO-Frame v9 00/32] COarse-grain LOck-stepping(COLO) Virtual Machines for Non-stop Service (FT), Yang Hongyang, 2015/09/02