aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Xu <peterx@redhat.com>2017-06-26 18:28:55 +0800
committerJuan Quintela <quintela@redhat.com>2017-06-28 11:51:10 +0200
commitc788ada8163127d20505e3ebf9b8735ba313d661 (patch)
tree77ca03e630f79ea4f5de71a07ec4f669c1b3234b
parentd2164ad35c411d97abd2aa5c6f160283d215e214 (diff)
migration: add "return-path" capability
When this capability is enabled, QEMU will use the return path even for precopy migration. This is helpful at least in one case when destination failed to load the image while source quited without confirmation. With return path, source will wait for the last response from destination, and if destination fails, it'll fail the migration on source, then the guest can be run again on the source (rather than assuming to be good, then the guest will be lost after source quits). It needs to be enabled explicitly on source, otherwise disabled. Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <1498472935-14461-1-git-send-email-peterx@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
-rw-r--r--migration/migration.c16
-rw-r--r--migration/migration.h1
-rw-r--r--qapi-schema.json5
3 files changed, 18 insertions, 4 deletions
diff --git a/migration/migration.c b/migration/migration.c
index 2398a9db4f..51ccd1a4c5 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1311,6 +1311,15 @@ bool migrate_use_block(void)
return s->enabled_capabilities[MIGRATION_CAPABILITY_BLOCK];
}
+bool migrate_use_return_path(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->enabled_capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
+}
+
bool migrate_use_block_incremental(void)
{
MigrationState *s;
@@ -1975,10 +1984,11 @@ void migrate_fd_connect(MigrationState *s)
notifier_list_notify(&migration_state_notifiers, s);
/*
- * Open the return path; currently for postcopy but other things might
- * also want it.
+ * Open the return path. For postcopy, it is used exclusively. For
+ * precopy, only if user specified "return-path" capability would
+ * QEMU uses the return path.
*/
- if (migrate_postcopy_ram()) {
+ if (migrate_postcopy_ram() || migrate_use_return_path()) {
if (open_return_path_on_source(s)) {
error_report("Unable to open return-path for postcopy");
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
diff --git a/migration/migration.h b/migration/migration.h
index 994b017015..148c9facbc 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -177,6 +177,7 @@ bool migrate_colo_enabled(void);
bool migrate_use_block(void);
bool migrate_use_block_incremental(void);
+bool migrate_use_return_path(void);
bool migrate_use_compression(void);
int migrate_compress_level(void);
diff --git a/qapi-schema.json b/qapi-schema.json
index 4b50b652d3..9e34cf71f3 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -900,12 +900,15 @@
# offers more flexibility.
# (Since 2.10)
#
+# @return-path: If enabled, migration will use the return path even
+# for precopy. (since 2.10)
+#
# Since: 1.2
##
{ 'enum': 'MigrationCapability',
'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
'compress', 'events', 'postcopy-ram', 'x-colo', 'release-ram',
- 'block' ] }
+ 'block', 'return-path' ] }
##
# @MigrationCapabilityStatus: