Integrate MigrateChannelList with all transport backends
(socket, exec and rdma) for both src and dest migration
endpoints for hmp migration.
Suggested-by: Aravind Retnakaran <aravind.retnakaran@nutanix.com>
Signed-off-by: Het Gala <het.gala@nutanix.com>
---
migration/migration-hmp-cmds.c | 16 +++++++++++++---
migration/migration.c | 5 ++---
migration/migration.h | 3 ++-
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
index 49b150f33f..25f51ec99c 100644
--- a/migration/migration-hmp-cmds.c
+++ b/migration/migration-hmp-cmds.c
@@ -423,10 +423,14 @@ void hmp_migrate_incoming(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;
const char *uri = qdict_get_str(qdict, "uri");
+ MigrationChannelList *caps = NULL;
+ g_autoptr(MigrationChannel) channel = g_new0(MigrationChannel, 1);
- qmp_migrate_incoming(uri, false, NULL, &err);
+ migrate_uri_parse(uri, &channel, &err);
+ QAPI_LIST_PREPEND(caps, channel);
- hmp_handle_error(mon, err);
+ qmp_migrate_incoming(NULL, true, caps, &err);
+ qapi_free_MigrationChannelList(caps);
}
void hmp_migrate_recover(Monitor *mon, const QDict *qdict)
@@ -704,9 +708,15 @@ void hmp_migrate(Monitor *mon, const QDict *qdict)
bool resume = qdict_get_try_bool(qdict, "resume", false);
const char *uri = qdict_get_str(qdict, "uri");
Error *err = NULL;
+ MigrationChannelList *caps = NULL;
+ g_autoptr(MigrationChannel) channel = g_new0(MigrationChannel, 1);
+
+ migrate_uri_parse(uri, &channel, &err);
+ QAPI_LIST_PREPEND(caps, channel);
- qmp_migrate(uri, false, NULL, !!blk, blk, !!inc, inc,
+ qmp_migrate(NULL, true, caps, !!blk, blk, !!inc, inc,
false, false, true, resume, &err);
+ qapi_free_MigrationChannelList(caps);
if (hmp_handle_error(mon, err)) {
return;
}
diff --git a/migration/migration.c b/migration/migration.c
index acf80b3590..cf063a76df 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -425,9 +425,8 @@ void migrate_add_address(SocketAddress *address)
QAPI_CLONE(SocketAddress, address));
}
-static bool migrate_uri_parse(const char *uri,
- MigrationChannel **channel,
- Error **errp)
+bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
+ Error **errp)
{
g_autoptr(MigrationChannel) val = g_new0(MigrationChannel, 1);
g_autoptr(MigrationAddress) addr = g_new0(MigrationAddress, 1);
diff --git a/migration/migration.h b/migration/migration.h
index b7c8b67542..a8268394ca 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -501,7 +501,8 @@ bool check_dirty_bitmap_mig_alias_map(const BitmapMigrationNodeAliasList *bbm,
Error **errp);
void migrate_add_address(SocketAddress *address);
-
+bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
+ Error **errp);
int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque);
#define qemu_ram_foreach_block \
--
2.22.3
On Fri, Jul 21, 2023 at 02:49:35PM +0000, Het Gala wrote:
> Integrate MigrateChannelList with all transport backends
> (socket, exec and rdma) for both src and dest migration
> endpoints for hmp migration.
>
> Suggested-by: Aravind Retnakaran <aravind.retnakaran@nutanix.com>
> Signed-off-by: Het Gala <het.gala@nutanix.com>
> ---
> migration/migration-hmp-cmds.c | 16 +++++++++++++---
> migration/migration.c | 5 ++---
> migration/migration.h | 3 ++-
> 3 files changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
> index 49b150f33f..25f51ec99c 100644
> --- a/migration/migration-hmp-cmds.c
> +++ b/migration/migration-hmp-cmds.c
> @@ -423,10 +423,14 @@ void hmp_migrate_incoming(Monitor *mon, const QDict *qdict)
> {
> Error *err = NULL;
> const char *uri = qdict_get_str(qdict, "uri");
> + MigrationChannelList *caps = NULL;
> + g_autoptr(MigrationChannel) channel = g_new0(MigrationChannel, 1);
>
> - qmp_migrate_incoming(uri, false, NULL, &err);
> + migrate_uri_parse(uri, &channel, &err);
> + QAPI_LIST_PREPEND(caps, channel);
>
> - hmp_handle_error(mon, err);
> + qmp_migrate_incoming(NULL, true, caps, &err);
> + qapi_free_MigrationChannelList(caps);
IIRC, you still need the hmp_handle_error call to print any
error message.
> }
>
> void hmp_migrate_recover(Monitor *mon, const QDict *qdict)
> @@ -704,9 +708,15 @@ void hmp_migrate(Monitor *mon, const QDict *qdict)
> bool resume = qdict_get_try_bool(qdict, "resume", false);
> const char *uri = qdict_get_str(qdict, "uri");
> Error *err = NULL;
> + MigrationChannelList *caps = NULL;
> + g_autoptr(MigrationChannel) channel = g_new0(MigrationChannel, 1);
> +
> + migrate_uri_parse(uri, &channel, &err);
> + QAPI_LIST_PREPEND(caps, channel);
>
> - qmp_migrate(uri, false, NULL, !!blk, blk, !!inc, inc,
> + qmp_migrate(NULL, true, caps, !!blk, blk, !!inc, inc,
> false, false, true, resume, &err);
> + qapi_free_MigrationChannelList(caps);
> if (hmp_handle_error(mon, err)) {
> return;
> }
> diff --git a/migration/migration.c b/migration/migration.c
> index acf80b3590..cf063a76df 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -425,9 +425,8 @@ void migrate_add_address(SocketAddress *address)
> QAPI_CLONE(SocketAddress, address));
> }
>
> -static bool migrate_uri_parse(const char *uri,
> - MigrationChannel **channel,
> - Error **errp)
> +bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
> + Error **errp)
> {
> g_autoptr(MigrationChannel) val = g_new0(MigrationChannel, 1);
> g_autoptr(MigrationAddress) addr = g_new0(MigrationAddress, 1);
> diff --git a/migration/migration.h b/migration/migration.h
> index b7c8b67542..a8268394ca 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -501,7 +501,8 @@ bool check_dirty_bitmap_mig_alias_map(const BitmapMigrationNodeAliasList *bbm,
> Error **errp);
>
> void migrate_add_address(SocketAddress *address);
> -
> +bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
> + Error **errp);
> int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque);
>
> #define qemu_ram_foreach_block \
> --
> 2.22.3
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
On 26/07/23 12:45 am, Daniel P. Berrangé wrote:
> On Fri, Jul 21, 2023 at 02:49:35PM +0000, Het Gala wrote:
>> Integrate MigrateChannelList with all transport backends
>> (socket, exec and rdma) for both src and dest migration
>> endpoints for hmp migration.
>>
>> Suggested-by: Aravind Retnakaran <aravind.retnakaran@nutanix.com>
>> Signed-off-by: Het Gala <het.gala@nutanix.com>
>> ---
>> migration/migration-hmp-cmds.c | 16 +++++++++++++---
>> migration/migration.c | 5 ++---
>> migration/migration.h | 3 ++-
>> 3 files changed, 17 insertions(+), 7 deletions(-)
>>
>> diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
>> index 49b150f33f..25f51ec99c 100644
>> --- a/migration/migration-hmp-cmds.c
>> +++ b/migration/migration-hmp-cmds.c
>> @@ -423,10 +423,14 @@ void hmp_migrate_incoming(Monitor *mon, const QDict *qdict)
>> {
>> Error *err = NULL;
>> const char *uri = qdict_get_str(qdict, "uri");
>> + MigrationChannelList *caps = NULL;
>> + g_autoptr(MigrationChannel) channel = g_new0(MigrationChannel, 1);
>>
>> - qmp_migrate_incoming(uri, false, NULL, &err);
>> + migrate_uri_parse(uri, &channel, &err);
>> + QAPI_LIST_PREPEND(caps, channel);
>>
>> - hmp_handle_error(mon, err);
>> + qmp_migrate_incoming(NULL, true, caps, &err);
>> + qapi_free_MigrationChannelList(caps);
> IIRC, you still need the hmp_handle_error call to print any
> error message.
Yes, sorry, I missed that out while adding the statements. Will add
hmp_handle_error call here.
>> }
>>
>> void hmp_migrate_recover(Monitor *mon, const QDict *qdict)
>> @@ -704,9 +708,15 @@ void hmp_migrate(Monitor *mon, const QDict *qdict)
>> bool resume = qdict_get_try_bool(qdict, "resume", false);
>> const char *uri = qdict_get_str(qdict, "uri");
>> Error *err = NULL;
>> + MigrationChannelList *caps = NULL;
>> + g_autoptr(MigrationChannel) channel = g_new0(MigrationChannel, 1);
>> +
>> + migrate_uri_parse(uri, &channel, &err);
>> + QAPI_LIST_PREPEND(caps, channel);
>>
>> - qmp_migrate(uri, false, NULL, !!blk, blk, !!inc, inc,
>> + qmp_migrate(NULL, true, caps, !!blk, blk, !!inc, inc,
>> false, false, true, resume, &err);
>> + qapi_free_MigrationChannelList(caps);
>> if (hmp_handle_error(mon, err)) {
>> return;
>> }
>> diff --git a/migration/migration.c b/migration/migration.c
>> index acf80b3590..cf063a76df 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -425,9 +425,8 @@ void migrate_add_address(SocketAddress *address)
>> QAPI_CLONE(SocketAddress, address));
>> }
>>
>> -static bool migrate_uri_parse(const char *uri,
>> - MigrationChannel **channel,
>> - Error **errp)
>> +bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
>> + Error **errp)
>> {
>> g_autoptr(MigrationChannel) val = g_new0(MigrationChannel, 1);
>> g_autoptr(MigrationAddress) addr = g_new0(MigrationAddress, 1);
>> diff --git a/migration/migration.h b/migration/migration.h
>> index b7c8b67542..a8268394ca 100644
>> --- a/migration/migration.h
>> +++ b/migration/migration.h
>> @@ -501,7 +501,8 @@ bool check_dirty_bitmap_mig_alias_map(const BitmapMigrationNodeAliasList *bbm,
>> Error **errp);
>>
>> void migrate_add_address(SocketAddress *address);
>> -
>> +bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
>> + Error **errp);
>> int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque);
>>
>> #define qemu_ram_foreach_block \
>> --
>> 2.22.3
>>
> With regards,
> Daniel
Regards,
Het Gala
© 2016 - 2026 Red Hat, Inc.