From 97250c2a7eeb1506e0a1517b416046dd02720025 Mon Sep 17 00:00:00 2001 From: Dmitry Konishchev Date: Wed, 16 Mar 2011 12:31:52 +0300 Subject: [PATCH 2/2] Added a way for user to determine, whether incoming migration is finished or not --- migration.c | 1 + monitor.c | 24 ++++++++++++++++++++++++ monitor.h | 1 + qemu-monitor.hx | 19 +++++++++++++++++++ 4 files changed, 45 insertions(+), 0 deletions(-) diff --git a/migration.c b/migration.c index 468d517..1898bcc 100644 --- a/migration.c +++ b/migration.c @@ -68,6 +68,7 @@ void process_incoming_migration(QEMUFile *f) DPRINTF("successfully loaded vm state\n"); incoming_expected = false; + monitor_protocol_event(QEVENT_INCOMING_FINISHED, NULL); if (autostart) vm_start(); diff --git a/monitor.c b/monitor.c index dd5469f..6338827 100644 --- a/monitor.c +++ b/monitor.c @@ -454,6 +454,9 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) case QEVENT_WATCHDOG: event_name = "WATCHDOG"; break; + case QEVENT_INCOMING_FINISHED: + event_name = "INCOMING_FINISHED"; + break; default: abort(); break; @@ -2104,6 +2107,14 @@ static void do_inject_nmi(Monitor *mon, const QDict *qdict) } #endif +static void do_info_incoming_print(Monitor *mon, const QObject *data) +{ + QDict *qdict = qobject_to_qdict(data); + monitor_printf(mon, "Incoming migration status: "); + monitor_printf(mon, qdict_get_bool(qdict, "active") ? "active" : "not active"); + monitor_printf(mon, "\n"); +} + static void do_info_status_print(Monitor *mon, const QObject *data) { QDict *qdict; @@ -2123,6 +2134,11 @@ static void do_info_status_print(Monitor *mon, const QObject *data) monitor_printf(mon, "\n"); } +static void do_info_incoming(Monitor *mon, QObject **ret_data) +{ + *ret_data = qobject_from_jsonf("{ 'active': %i }", incoming_expected); +} + static void do_info_status(Monitor *mon, QObject **ret_data) { *ret_data = qobject_from_jsonf("{ 'running': %i, 'singlestep': %i }", @@ -2520,6 +2536,14 @@ static const mon_cmd_t info_cmds[] = { .mhandler.info = do_info_snapshots, }, { + .name = "incoming", + .args_type = "", + .params = "", + .help = "show current incoming migration status (active|not active)", + .user_print = do_info_incoming_print, + .mhandler.info_new = do_info_incoming, + }, + { .name = "status", .args_type = "", .params = "", diff --git a/monitor.h b/monitor.h index 38b22a4..4e6ec04 100644 --- a/monitor.h +++ b/monitor.h @@ -32,6 +32,7 @@ typedef enum MonitorEvent { QEVENT_BLOCK_IO_ERROR, QEVENT_RTC_CHANGE, QEVENT_WATCHDOG, + QEVENT_INCOMING_FINISHED, QEVENT_MAX, } MonitorEvent; diff --git a/qemu-monitor.hx b/qemu-monitor.hx index 8b1415d..b0e2dea 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -2237,6 +2237,25 @@ show list of VM snapshots ETEXI STEXI address@hidden info incoming +show current incoming migration status (active|not active) +ETEXI +SQMP +query-incoming +------------ + +Return a json-object with the following information: + +- "active": true if an incoming migration is active now, or false if it's already finished or hasn't been started (json-bool) + +Example: + +-> { "execute": "query-incoming" } +<- { "return": { "active": true } } + +EQMP + +STEXI @item info status show the current VM status (running|paused) ETEXI -- 1.7.1