[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH COLO-Frame v10 23/38] qmp event: Add event notificat
From: |
zhanghailiang |
Subject: |
[Qemu-devel] [PATCH COLO-Frame v10 23/38] qmp event: Add event notification for COLO error |
Date: |
Tue, 3 Nov 2015 19:56:41 +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-events.txt | 17 +++++++++++++++++
migration/colo.c | 13 +++++++++++++
qapi-schema.json | 16 ++++++++++++++++
qapi/event.json | 17 +++++++++++++++++
4 files changed, 63 insertions(+)
diff --git a/docs/qmp-events.txt b/docs/qmp-events.txt
index d2f1ce4..165dd76 100644
--- a/docs/qmp-events.txt
+++ b/docs/qmp-events.txt
@@ -184,6 +184,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 de6265e..247b40f 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
@@ -343,6 +344,9 @@ out:
current_time = error_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
if (ret < 0) {
error_report("%s: %s", __func__, 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()) {
@@ -359,6 +363,9 @@ 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);
@@ -530,6 +537,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()) {
@@ -548,6 +558,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 ff0e941..8cc1f60 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -751,6 +751,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'] }
+
+##
# @x-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
- Re: [Qemu-devel] [PATCH COLO-Frame v10 19/38] COLO failover: Introduce state to record failover process, (continued)
- [Qemu-devel] [PATCH COLO-Frame v10 15/38] ram/COLO: Record pages received from PVM by re-using migration dirty bitmap, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 28/38] COLO: Update the global runstate after going into colo state, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 25/38] COLO failover: Don't do failover during loading VM's state, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 22/38] COLO: implement default failover treatment, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 02/38] migration: Introduce capability 'x-colo' to migration, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 23/38] qmp event: Add event notification for COLO error,
zhanghailiang <=
- [Qemu-devel] [PATCH COLO-Frame v10 03/38] COLO: migrate colo related info to secondary node, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 30/38] COLO: Separate the process of saving/loading ram and device state, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 27/38] COLO: Process shutdown command for VM in COLO state, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 38/38] COLO: Add block replication into colo process, zhanghailiang, 2015/11/03
- [Qemu-devel] [PATCH COLO-Frame v10 34/38] filter-buffer: Accept zero interval, zhanghailiang, 2015/11/03