[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 4/8] migration: Create socket-address paramet
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [PATCH v7 4/8] migration: Create socket-address parameter |
Date: |
Thu, 12 Apr 2018 14:09:33 +0100 |
User-agent: |
Mutt/1.9.4 (2018-02-28) |
* Juan Quintela (address@hidden) wrote:
> It will be used to store the uri parameters. We want this only for
> tcp, so we don't set it for other uris. We need it to know what port
> is migration running.
>
> Signed-off-by: Juan Quintela <address@hidden>
>
> --
>
> This used to be uri parameter, but it has so many troubles to
> reproduce that it don't just make sense.
>
> This used to be a port parameter. I was asked to move to
> SocketAddress, done.
> I also merged the setting of the migration tcp port in this one
> because now I need to free the address, and this makes it easier.
> This used to be x-socket-address with a single direction, now it is a
> list of addresses.
Is there a reason it's a parameter rather than just an entry in
MigrationInfo?
Dave
> ---
> hmp.c | 14 ++++++++++++++
> migration/migration.c | 25 +++++++++++++++++++++++++
> migration/migration.h | 1 +
> migration/socket.c | 11 +++++++++++
> qapi/migration.json | 13 +++++++++++--
> qapi/sockets.json | 13 +++++++++++++
> 6 files changed, 75 insertions(+), 2 deletions(-)
>
> diff --git a/hmp.c b/hmp.c
> index a25c7bd9a8..caf94345c9 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -355,6 +355,20 @@ void hmp_info_migrate_parameters(Monitor *mon, const
> QDict *qdict)
> monitor_printf(mon, "%s: %" PRIu64 "\n",
> MigrationParameter_str(MIGRATION_PARAMETER_XBZRLE_CACHE_SIZE),
> params->xbzrle_cache_size);
> + if (params->has_socket_address) {
> + SocketAddressList *addr;
> +
> + monitor_printf(mon, "%s: [\n",
> + MigrationParameter_str(MIGRATION_PARAMETER_SOCKET_ADDRESS));
> +
> + for (addr = params->socket_address; addr; addr = addr->next) {
> + char *s = SocketAddress_to_str("", addr->value,
> + false, false);
> + monitor_printf(mon, "\t%s\n", s);
> + }
> +
> + monitor_printf(mon, "]\n");
> + }
> }
>
> qapi_free_MigrationParameters(params);
> diff --git a/migration/migration.c b/migration/migration.c
> index 58bd382730..71fa4c8176 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -31,6 +31,8 @@
> #include "migration/vmstate.h"
> #include "block/block.h"
> #include "qapi/error.h"
> +#include "qapi/clone-visitor.h"
> +#include "qapi/qapi-visit-sockets.h"
> #include "qapi/qapi-commands-migration.h"
> #include "qapi/qapi-events-migration.h"
> #include "qapi/qmp/qerror.h"
> @@ -277,6 +279,21 @@ int migrate_send_rp_req_pages(MigrationIncomingState
> *mis, const char *rbname,
> return migrate_send_rp_message(mis, msg_type, msglen, bufc);
> }
>
> +void migrate_set_address(SocketAddress *address)
> +{
> + MigrationState *s = migrate_get_current();
> + SocketAddressList *addrs;
> +
> + addrs = g_new0(SocketAddressList, 1);
> + addrs->next = s->parameters.socket_address;
> + s->parameters.socket_address = addrs;
> +
> + if (!s->parameters.has_socket_address) {
> + s->parameters.has_socket_address = true;
> + }
> + addrs->value = QAPI_CLONE(SocketAddress, address);
> +}
> +
> void qemu_start_incoming_migration(const char *uri, Error **errp)
> {
> const char *p;
> @@ -564,6 +581,11 @@ MigrationParameters *qmp_query_migrate_parameters(Error
> **errp)
> params->x_multifd_page_count = s->parameters.x_multifd_page_count;
> params->has_xbzrle_cache_size = true;
> params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
> + if (s->parameters.socket_address) {
> + params->has_socket_address = true;
> + params->socket_address =
> + QAPI_CLONE(SocketAddressList, s->parameters.socket_address);
> + }
>
> return params;
> }
> @@ -2571,6 +2593,9 @@ static void migration_instance_finalize(Object *obj)
> qemu_mutex_destroy(&ms->error_mutex);
> g_free(params->tls_hostname);
> g_free(params->tls_creds);
> + if (params->socket_address) {
> + qapi_free_SocketAddressList(params->socket_address);
> + }
> qemu_sem_destroy(&ms->pause_sem);
> error_free(ms->error);
> }
> diff --git a/migration/migration.h b/migration/migration.h
> index 8d2f320c48..4774ee305f 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -241,5 +241,6 @@ int migrate_send_rp_req_pages(MigrationIncomingState
> *mis, const char* rbname,
>
> void dirty_bitmap_mig_before_vm_start(void);
> void init_dirty_bitmap_incoming_migration(void);
> +void migrate_set_address(SocketAddress *address);
>
> #endif
> diff --git a/migration/socket.c b/migration/socket.c
> index 122d8ccfbe..5195fd57c5 100644
> --- a/migration/socket.c
> +++ b/migration/socket.c
> @@ -15,6 +15,7 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qemu/cutils.h"
>
> #include "qemu-common.h"
> #include "qemu/error-report.h"
> @@ -152,6 +153,7 @@ static void socket_start_incoming_migration(SocketAddress
> *saddr,
> Error **errp)
> {
> QIONetListener *listener = qio_net_listener_new();
> + int i;
>
> qio_net_listener_set_name(listener, "migration-socket-listener");
>
> @@ -163,6 +165,15 @@ static void
> socket_start_incoming_migration(SocketAddress *saddr,
> qio_net_listener_set_client_func(listener,
> socket_accept_incoming_migration,
> NULL, NULL);
> +
> + for (i = 0; i < listener->nsioc; i++) {
> + SocketAddress *address =
> + qio_channel_socket_get_local_address(listener->sioc[i], errp);
> + if (address < 0) {
> + return;
> + }
> + migrate_set_address(address);
> + }
> }
>
> void tcp_start_incoming_migration(const char *host_port, Error **errp)
> diff --git a/qapi/migration.json b/qapi/migration.json
> index 9d0bf82cf4..c3aafaf8fe 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.json
> @@ -6,6 +6,7 @@
> ##
>
> { 'include': 'common.json' }
> +{ 'include': 'sockets.json' }
>
> ##
> # @MigrationStats:
> @@ -494,6 +495,9 @@
> # and a power of 2
> # (Since 2.11)
> #
> +# @socket-address: Only used for tcp, to know what the real port is
> +# (Since 2.13)
> +#
> # Since: 2.4
> ##
> { 'enum': 'MigrationParameter',
> @@ -502,7 +506,7 @@
> 'tls-creds', 'tls-hostname', 'max-bandwidth',
> 'downtime-limit', 'x-checkpoint-delay', 'block-incremental',
> 'x-multifd-channels', 'x-multifd-page-count',
> - 'xbzrle-cache-size' ] }
> + 'xbzrle-cache-size', 'socket-address' ] }
>
> ##
> # @MigrateSetParameters:
> @@ -671,6 +675,10 @@
> # needs to be a multiple of the target page size
> # and a power of 2
> # (Since 2.11)
> +#
> +# @socket-address: Only used for tcp, to know what the real port is
> +# (Since 2.13)
> +#
> # Since: 2.4
> ##
> { 'struct': 'MigrationParameters',
> @@ -687,7 +695,8 @@
> '*block-incremental': 'bool' ,
> '*x-multifd-channels': 'uint8',
> '*x-multifd-page-count': 'uint32',
> - '*xbzrle-cache-size': 'size' } }
> + '*xbzrle-cache-size': 'size',
> + '*socket-address': ['SocketAddress'] } }
>
> ##
> # @query-migrate-parameters:
> diff --git a/qapi/sockets.json b/qapi/sockets.json
> index fc81d8d5e8..f1ca09a927 100644
> --- a/qapi/sockets.json
> +++ b/qapi/sockets.json
> @@ -152,3 +152,16 @@
> 'unix': 'UnixSocketAddress',
> 'vsock': 'VsockSocketAddress',
> 'fd': 'String' } }
> +
> +##
> +# @DummyStruct:
> +#
> +# Both block-core and migration needs SocketAddressList
> +# I am open to comments about how to share it
> +#
> +# @dummy-list: A dummy list
> +#
> +# Since: 2.13
> +##
> +{ 'struct': 'DummyStruct',
> + 'data': { 'dummy-list': ['SocketAddress'] } }
> --
> 2.14.3
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
- [Qemu-devel] [PATCH v7 0/8] Add make check tests for Migration, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 1/8] qemu-sockets: Export SocketAddress_to_str, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 3/8] tests: Add migration xbzrle test, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 2/8] tests: Add migration precopy test, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 4/8] migration: Create socket-address parameter, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 5/8] tests: Migration ppc now inlines its program, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 6/8] tests: Add basic migration precopy tcp test, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 7/8] migration: Add multifd test, Juan Quintela, 2018/04/04
- [Qemu-devel] [PATCH v7 8/8] [RFH] tests: Add migration compress threads tests, Juan Quintela, 2018/04/04