[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/3] migration: create migration event
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PATCH 2/3] migration: create migration event |
Date: |
Wed, 20 May 2015 17:35:23 +0200 |
We have one argument that tells us what event has happened.
Signed-off-by: Juan Quintela <address@hidden>
---
docs/qmp/qmp-events.txt | 16 ++++++++++++++++
migration/migration.c | 12 ++++++++++++
qapi/event.json | 14 ++++++++++++++
3 files changed, 42 insertions(+)
diff --git a/docs/qmp/qmp-events.txt b/docs/qmp/qmp-events.txt
index 4c13d48..3797709 100644
--- a/docs/qmp/qmp-events.txt
+++ b/docs/qmp/qmp-events.txt
@@ -473,6 +473,22 @@ Example:
{ "timestamp": {"seconds": 1290688046, "microseconds": 417172},
"event": "SPICE_MIGRATE_COMPLETED" }
+MIGRATION
+---------
+
+Emitted when a migration event happens
+
+Data: None.
+
+ - "status": migration status
+ "": error has been ignored
+ "report": error has been reported to the device
+ "stop": the VM is going to stop because of the error
+
+Example:
+
+{"timestamp": {"seconds": 1432121972, "microseconds": 744001},
+ "event": "MIGRATION", "data": {"status": "completed"}}
STOP
----
diff --git a/migration/migration.c b/migration/migration.c
index 2925587..6b1cead 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -25,6 +25,7 @@
#include "qemu/thread.h"
#include "qmp-commands.h"
#include "trace.h"
+#include "qapi-event.h"
#define MAX_THROTTLE (32 << 20) /* Migration speed throttling */
@@ -401,6 +402,7 @@ static void migrate_fd_cleanup(void *opaque)
if (s->state == MIGRATION_STATUS_CANCELLING) {
migrate_set_state(s, MIGRATION_STATUS_CANCELLING,
MIGRATION_STATUS_CANCELLED);
+ qapi_event_send_migration(MIGRATION_STATUS_CANCELLED,
&error_abort);
}
}
@@ -412,6 +414,7 @@ void migrate_fd_error(MigrationState *s)
trace_migrate_fd_error();
assert(s->file == NULL);
s->state = MIGRATION_STATUS_FAILED;
+ qapi_event_send_migration(MIGRATION_STATUS_FAILED, &error_abort);
trace_migrate_set_state(MIGRATION_STATUS_FAILED);
notifier_list_notify(&migration_state_notifiers, s);
}
@@ -430,6 +433,7 @@ static void migrate_fd_cancel(MigrationState *s)
}
migrate_set_state(s, old_state, MIGRATION_STATUS_CANCELLING);
} while (s->state != MIGRATION_STATUS_CANCELLING);
+ qapi_event_send_migration(MIGRATION_STATUS_CANCELLING, &error_abort);
/*
* If we're unlucky the migration code might be stuck somewhere in a
@@ -497,6 +501,7 @@ static MigrationState *migrate_init(const MigrationParams
*params)
decompress_thread_count;
s->bandwidth_limit = bandwidth_limit;
s->state = MIGRATION_STATUS_SETUP;
+ qapi_event_send_migration(MIGRATION_STATUS_SETUP, &error_abort);
trace_migrate_set_state(MIGRATION_STATUS_SETUP);
s->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
@@ -590,6 +595,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
} else {
error_set(errp, QERR_INVALID_PARAMETER_VALUE, "uri", "a valid
migration protocol");
s->state = MIGRATION_STATUS_FAILED;
+ qapi_event_send_migration(MIGRATION_STATUS_FAILED, &error_abort);
return;
}
@@ -751,6 +757,7 @@ static void *migration_thread(void *opaque)
qemu_savevm_state_begin(s->file, &s->params);
s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start;
+ qapi_event_send_migration(MIGRATION_STATUS_ACTIVE, &error_abort);
migrate_set_state(s, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_ACTIVE);
while (s->state == MIGRATION_STATUS_ACTIVE) {
@@ -781,12 +788,16 @@ static void *migration_thread(void *opaque)
if (ret < 0) {
migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_FAILED);
+ qapi_event_send_migration(MIGRATION_STATUS_FAILED,
+ &error_abort);
break;
}
if (!qemu_file_get_error(s->file)) {
migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_COMPLETED);
+ qapi_event_send_migration(MIGRATION_STATUS_COMPLETED,
+ &error_abort);
break;
}
}
@@ -795,6 +806,7 @@ static void *migration_thread(void *opaque)
if (qemu_file_get_error(s->file)) {
migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_FAILED);
+ qapi_event_send_migration(MIGRATION_STATUS_FAILED, &error_abort);
break;
}
current_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
diff --git a/qapi/event.json b/qapi/event.json
index 378dda5..fe5e182 100644
--- a/qapi/event.json
+++ b/qapi/event.json
@@ -243,6 +243,20 @@
{ 'event': 'SPICE_MIGRATE_COMPLETED' }
##
+# @MIGRATION
+#
+# Emitted when a migration event happens
+#
+# @status: @MigrationStatus describing the current migration status.
+# If this field is not returned, no migration process
+# has been initiated
+#
+# Since: 2.4
+##
+{ 'event': 'MIGRATION',
+ 'data': {'status': 'MigrationStatus'}}
+
+##
# @ACPI_DEVICE_OST
#
# Emitted when guest executes ACPI _OST method.
--
2.4.1