[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 27/28] migration/qmp: add command migrate-pause
From: |
Peter Xu |
Subject: |
[Qemu-devel] [PATCH v6 27/28] migration/qmp: add command migrate-pause |
Date: |
Thu, 8 Feb 2018 18:31:31 +0800 |
It pauses an ongoing migration. Currently it only supports postcopy.
Note that this command will work on either side of the migration.
Basically when we trigger this on one side, it'll interrupt the other
side as well since the other side will get notified on the disconnect
event.
However, it's still possible that the other side is not notified, for
example, when the network is totally broken, or due to some firewall
configuration changes. In that case, we will also need to run the same
command on the other side so both sides will go into the paused state.
Signed-off-by: Peter Xu <address@hidden>
---
migration/migration.c | 27 +++++++++++++++++++++++++++
qapi/migration.json | 16 ++++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/migration/migration.c b/migration/migration.c
index bb57ed9ade..139abec0c3 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1448,6 +1448,33 @@ void qmp_migrate_recover(const char *uri, Error **errp)
qemu_start_incoming_migration(uri, errp);
}
+void qmp_migrate_pause(Error **errp)
+{
+ MigrationState *ms = migrate_get_current();
+ MigrationIncomingState *mis = migration_incoming_get_current();
+ int ret;
+
+ if (ms->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
+ /* Source side, during postcopy */
+ ret = qemu_file_shutdown(ms->to_dst_file);
+ if (ret) {
+ error_setg(errp, "Failed to pause source migration");
+ }
+ return;
+ }
+
+ if (mis->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
+ ret = qemu_file_shutdown(mis->from_src_file);
+ if (ret) {
+ error_setg(errp, "Failed to pause destination migration");
+ }
+ return;
+ }
+
+ error_setg(errp, "migrate-pause is currently only supported "
+ "during postcopy-active state");
+}
+
bool migration_is_blocked(Error **errp)
{
if (qemu_savevm_state_blocked(errp)) {
diff --git a/qapi/migration.json b/qapi/migration.json
index dfbcb02d4c..3d9cfeb8f1 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -1192,3 +1192,19 @@
##
{ 'command': 'migrate-recover', 'data': { 'uri': 'str' },
'allow-oob': true }
+
+##
+# @migrate-pause:
+#
+# Pause a migration. Currently it only supports postcopy.
+#
+# Returns: nothing.
+#
+# Example:
+#
+# -> { "execute": "migrate-pause" }
+# <- { "return": {} }
+#
+# Since: 2.12
+##
+{ 'command': 'migrate-pause', 'allow-oob': true }
--
2.14.3
- Re: [Qemu-devel] [PATCH v6 21/28] migration: setup ramstate for resume, (continued)
- [Qemu-devel] [PATCH v6 23/28] migration: init dst in migration_object_init too, Peter Xu, 2018/02/08
- [Qemu-devel] [PATCH v6 22/28] migration: final handshake for the resume, Peter Xu, 2018/02/08
- [Qemu-devel] [PATCH v6 25/28] qmp/migration: new command migrate-recover, Peter Xu, 2018/02/08
- [Qemu-devel] [PATCH v6 24/28] io: let watcher of the channel run in same ctx, Peter Xu, 2018/02/08
- [Qemu-devel] [PATCH v6 26/28] hmp/migration: add migrate_recover command, Peter Xu, 2018/02/08
- [Qemu-devel] [PATCH v6 27/28] migration/qmp: add command migrate-pause,
Peter Xu <=
[Qemu-devel] [PATCH v6 28/28] migration/hmp: add migrate_pause command, Peter Xu, 2018/02/08
Re: [Qemu-devel] [PATCH v6 00/28] Migration: postcopy failure recovery, Peter Xu, 2018/02/08
Re: [Qemu-devel] [PATCH v6 00/28] Migration: postcopy failure recovery, no-reply, 2018/02/08
Re: [Qemu-devel] [PATCH v6 00/28] Migration: postcopy failure recovery, no-reply, 2018/02/08