migration: Deprecate block migration

It is obsolete.  It is better to use driver-mirror with NBD instead.

CC: Kevin Wolf <kwolf@redhat.com>
CC: Eric Blake <eblake@redhat.com>
CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Hanna Czenczek <hreitz@redhat.com>

Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Message-ID: <20231018115513.2163-5-quintela@redhat.com>
This commit is contained in:
Juan Quintela 2023-10-18 13:55:12 +02:00
parent 8846b5bfca
commit 66db46ca83
4 changed files with 45 additions and 6 deletions

View File

@ -486,3 +486,13 @@ Use blockdev-mirror with NBD instead.
As an intermediate step the ``blk`` functionality can be achieved by As an intermediate step the ``blk`` functionality can be achieved by
setting the ``block`` migration capability to ``true``. But this setting the ``block`` migration capability to ``true``. But this
capability is also deprecated. capability is also deprecated.
block migration (since 8.2)
'''''''''''''''''''''''''''
Block migration is too inflexible. It needs to migrate all block
devices or none.
Please see "QMP invocation for live storage migration with
``blockdev-mirror`` + NBD" in docs/interop/live-block-operations.rst
for a detailed explanation.

View File

@ -731,6 +731,9 @@ static int block_save_setup(QEMUFile *f, void *opaque)
trace_migration_block_save("setup", block_mig_state.submitted, trace_migration_block_save("setup", block_mig_state.submitted,
block_mig_state.transferred); block_mig_state.transferred);
warn_report("block migration is deprecated;"
" use blockdev-mirror with NBD instead");
ret = init_blk_migration(f); ret = init_blk_migration(f);
if (ret < 0) { if (ret < 0) {
return ret; return ret;

View File

@ -12,6 +12,7 @@
*/ */
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "qemu/error-report.h"
#include "exec/target_page.h" #include "exec/target_page.h"
#include "qapi/clone-visitor.h" #include "qapi/clone-visitor.h"
#include "qapi/error.h" #include "qapi/error.h"
@ -473,10 +474,14 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
if (new_caps[MIGRATION_CAPABILITY_BLOCK]) { if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) " error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) "
"block migration"); "block migration");
error_append_hint(errp, "Use drive_mirror+NBD instead.\n"); error_append_hint(errp, "Use blockdev-mirror with NBD instead.\n");
return false; return false;
} }
#endif #endif
if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
warn_report("block migration is deprecated;"
" use blockdev-mirror with NBD instead");
}
#ifndef CONFIG_REPLICATION #ifndef CONFIG_REPLICATION
if (new_caps[MIGRATION_CAPABILITY_X_COLO]) { if (new_caps[MIGRATION_CAPABILITY_X_COLO]) {
@ -1400,6 +1405,8 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
} }
if (params->has_block_incremental) { if (params->has_block_incremental) {
warn_report("block migration is deprecated;"
" use blockdev-mirror with NBD instead");
s->parameters.block_incremental = params->block_incremental; s->parameters.block_incremental = params->block_incremental;
} }
if (params->has_multifd_channels) { if (params->has_multifd_channels) {

View File

@ -269,11 +269,15 @@
# average memory load of the virtual CPU indirectly. Note that # average memory load of the virtual CPU indirectly. Note that
# zero means guest doesn't dirty memory. (Since 8.1) # zero means guest doesn't dirty memory. (Since 8.1)
# #
# Features:
#
# @deprecated: Member @disk is deprecated because block migration is.
#
# Since: 0.14 # Since: 0.14
## ##
{ 'struct': 'MigrationInfo', { 'struct': 'MigrationInfo',
'data': {'*status': 'MigrationStatus', '*ram': 'MigrationStats', 'data': {'*status': 'MigrationStatus', '*ram': 'MigrationStats',
'*disk': 'MigrationStats', '*disk': { 'type': 'MigrationStats', 'features': [ 'deprecated' ] },
'*vfio': 'VfioStats', '*vfio': 'VfioStats',
'*xbzrle-cache': 'XBZRLECacheStats', '*xbzrle-cache': 'XBZRLECacheStats',
'*total-time': 'int', '*total-time': 'int',
@ -525,6 +529,9 @@
# #
# Features: # Features:
# #
# @deprecated: Member @block is deprecated. Use blockdev-mirror with
# NBD instead.
#
# @unstable: Members @x-colo and @x-ignore-shared are experimental. # @unstable: Members @x-colo and @x-ignore-shared are experimental.
# #
# Since: 1.2 # Since: 1.2
@ -534,7 +541,8 @@
'compress', 'events', 'postcopy-ram', 'compress', 'events', 'postcopy-ram',
{ 'name': 'x-colo', 'features': [ 'unstable' ] }, { 'name': 'x-colo', 'features': [ 'unstable' ] },
'release-ram', 'release-ram',
'block', 'return-path', 'pause-before-switchover', 'multifd', { 'name': 'block', 'features': [ 'deprecated' ] },
'return-path', 'pause-before-switchover', 'multifd',
'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate', 'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate',
{ 'name': 'x-ignore-shared', 'features': [ 'unstable' ] }, { 'name': 'x-ignore-shared', 'features': [ 'unstable' ] },
'validate-uuid', 'background-snapshot', 'validate-uuid', 'background-snapshot',
@ -835,6 +843,9 @@
# #
# Features: # Features:
# #
# @deprecated: Member @block-incremental is deprecated. Use
# blockdev-mirror with NBD instead.
#
# @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period # @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period
# are experimental. # are experimental.
# #
@ -850,7 +861,7 @@
'tls-creds', 'tls-hostname', 'tls-authz', 'max-bandwidth', 'tls-creds', 'tls-hostname', 'tls-authz', 'max-bandwidth',
'avail-switchover-bandwidth', 'downtime-limit', 'avail-switchover-bandwidth', 'downtime-limit',
{ 'name': 'x-checkpoint-delay', 'features': [ 'unstable' ] }, { 'name': 'x-checkpoint-delay', 'features': [ 'unstable' ] },
'block-incremental', { 'name': 'block-incremental', 'features': [ 'deprecated' ] },
'multifd-channels', 'multifd-channels',
'xbzrle-cache-size', 'max-postcopy-bandwidth', 'xbzrle-cache-size', 'max-postcopy-bandwidth',
'max-cpu-throttle', 'multifd-compression', 'max-cpu-throttle', 'multifd-compression',
@ -1011,6 +1022,9 @@
# #
# Features: # Features:
# #
# @deprecated: Member @block-incremental is deprecated. Use
# blockdev-mirror with NBD instead.
#
# @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period # @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period
# are experimental. # are experimental.
# #
@ -1040,7 +1054,8 @@
'*downtime-limit': 'uint64', '*downtime-limit': 'uint64',
'*x-checkpoint-delay': { 'type': 'uint32', '*x-checkpoint-delay': { 'type': 'uint32',
'features': [ 'unstable' ] }, 'features': [ 'unstable' ] },
'*block-incremental': 'bool', '*block-incremental': { 'type': 'bool',
'features': [ 'deprecated' ] },
'*multifd-channels': 'uint8', '*multifd-channels': 'uint8',
'*xbzrle-cache-size': 'size', '*xbzrle-cache-size': 'size',
'*max-postcopy-bandwidth': 'size', '*max-postcopy-bandwidth': 'size',
@ -1225,6 +1240,9 @@
# #
# Features: # Features:
# #
# @deprecated: Member @block-incremental is deprecated. Use
# blockdev-mirror with NBD instead.
#
# @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period # @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period
# are experimental. # are experimental.
# #
@ -1251,7 +1269,8 @@
'*downtime-limit': 'uint64', '*downtime-limit': 'uint64',
'*x-checkpoint-delay': { 'type': 'uint32', '*x-checkpoint-delay': { 'type': 'uint32',
'features': [ 'unstable' ] }, 'features': [ 'unstable' ] },
'*block-incremental': 'bool', '*block-incremental': { 'type': 'bool',
'features': [ 'deprecated' ] },
'*multifd-channels': 'uint8', '*multifd-channels': 'uint8',
'*xbzrle-cache-size': 'size', '*xbzrle-cache-size': 'size',
'*max-postcopy-bandwidth': 'size', '*max-postcopy-bandwidth': 'size',