qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]