[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 35/40] migration/qmp: add command migrate-pause
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PULL 35/40] migration/qmp: add command migrate-pause |
Date: |
Wed, 16 May 2018 01:40:12 +0200 |
From: Peter Xu <address@hidden>
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.
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
---
s/2.12/2.13/
---
migration/migration.c | 29 +++++++++++++++++++++++++++++
qapi/migration.json | 16 ++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/migration/migration.c b/migration/migration.c
index 3deded90e5..05aec2c905 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1507,6 +1507,35 @@ 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 */
+ qemu_mutex_lock(&ms->qemu_file_lock);
+ ret = qemu_file_shutdown(ms->to_dst_file);
+ qemu_mutex_unlock(&ms->qemu_file_lock);
+ 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 da351d7421..23ba85ed3a 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -1211,3 +1211,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.13
+##
+{ 'command': 'migrate-pause', 'allow-oob': true }
--
2.17.0
- [Qemu-devel] [PULL 24/40] migration: new message MIG_RP_MSG_RECV_BITMAP, (continued)
- [Qemu-devel] [PULL 24/40] migration: new message MIG_RP_MSG_RECV_BITMAP, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 26/40] migration: new message MIG_RP_MSG_RESUME_ACK, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 27/40] migration: introduce SaveVMHandlers.resume_prepare, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 30/40] migration: final handshake for the resume, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 31/40] migration: init dst in migration_object_init too, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 28/40] migration: synchronize dirty bitmap for resume, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 29/40] migration: setup ramstate for resume, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 32/40] qmp/migration: new command migrate-recover, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 33/40] hmp/migration: add migrate_recover command, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 34/40] migration: introduce lock for to_dst_file, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 35/40] migration/qmp: add command migrate-pause,
Juan Quintela <=
- [Qemu-devel] [PULL 36/40] migration/hmp: add migrate_pause command, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 38/40] migration: update index field when delete or qsort RDMALocalBlock, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 39/40] migration: Textual fixups for blocktime, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 37/40] migration: update docs, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 40/40] Migration+TLS: Fix crash due to double cleanup, Juan Quintela, 2018/05/15
- Re: [Qemu-devel] [PULL 00/40] Migration PULL requset (take 2), Peter Maydell, 2018/05/17