All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: Fabiano Rosas <farosas@suse.de>
Cc: qemu-devel@nongnu.org, berrange@redhat.com, armbru@redhat.com,
	Laurent Vivier <lvivier@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v3 28/51] tests/qtest/migration: Stop invoking migrate_incoming from hooks
Date: Wed, 17 Dec 2025 15:26:19 -0500	[thread overview]
Message-ID: <aUMR699ZHbiF7_lh@x1.local> (raw)
In-Reply-To: <20251215220041.12657-29-farosas@suse.de>

On Mon, Dec 15, 2025 at 07:00:14PM -0300, Fabiano Rosas wrote:
> Now that the listen_uri is being properly used, tests can stop calling
> migrate_incoming from their hooks. The _common functions and
> migrate_start should take care of that.
> 
> Signed-off-by: Fabiano Rosas <farosas@suse.de>

IMHO this patch is almost fine,

Reviewed-by: Peter Xu <peterx@redhat.com>

still, some thoughts inline.

> ---
>  tests/qtest/migration/compression-tests.c |  6 ++++++
>  tests/qtest/migration/framework.c         | 14 +++++++++++---
>  tests/qtest/migration/precopy-tests.c     |  7 ++++---
>  tests/qtest/migration/tls-tests.c         |  8 ++++++++
>  4 files changed, 29 insertions(+), 6 deletions(-)
> 
> diff --git a/tests/qtest/migration/compression-tests.c b/tests/qtest/migration/compression-tests.c
> index eb0b7d6b4b..bed39dece0 100644
> --- a/tests/qtest/migration/compression-tests.c
> +++ b/tests/qtest/migration/compression-tests.c
> @@ -33,6 +33,7 @@ migrate_hook_start_precopy_tcp_multifd_zstd(QTestState *from,
>  
>  static void test_multifd_tcp_zstd(char *name, MigrateCommon *args)
>  {
> +    args->listen_uri = "tcp:127.0.0.1:0";

Definitely a step forward to unify migrate_incoming into the precopy
framework, however lots duplication of this "tcp:*" string..

Shall we provide some migrate_common_set_listen_uri_default()?

>      args->start_hook = migrate_hook_start_precopy_tcp_multifd_zstd;
>  
>      args->start.incoming_defer = true;
> @@ -43,6 +44,7 @@ static void test_multifd_tcp_zstd(char *name, MigrateCommon *args)
>  
>  static void test_multifd_postcopy_tcp_zstd(char *name, MigrateCommon *args)
>  {
> +    args->listen_uri = "tcp:127.0.0.1:0";
>      args->start_hook = migrate_hook_start_precopy_tcp_multifd_zstd,
>  
>      args->start.incoming_defer = true;
> @@ -66,6 +68,7 @@ migrate_hook_start_precopy_tcp_multifd_qatzip(QTestState *from,
>  
>  static void test_multifd_tcp_qatzip(char *name, MigrateCommon *args)
>  {
> +    args->listen_uri = "tcp:127.0.0.1:0";
>      args->start_hook = migrate_hook_start_precopy_tcp_multifd_qatzip;
>  
>      args->start.incoming_defer = true;
> @@ -85,6 +88,7 @@ migrate_hook_start_precopy_tcp_multifd_qpl(QTestState *from,
>  
>  static void test_multifd_tcp_qpl(char *name, MigrateCommon *args)
>  {
> +    args->listen_uri = "tcp:127.0.0.1:0";
>      args->start_hook = migrate_hook_start_precopy_tcp_multifd_qpl;
>  
>      args->start.incoming_defer = true;
> @@ -104,6 +108,7 @@ migrate_hook_start_precopy_tcp_multifd_uadk(QTestState *from,
>  
>  static void test_multifd_tcp_uadk(char *name, MigrateCommon *args)
>  {
> +    args->listen_uri = "tcp:127.0.0.1:0";
>      args->start_hook = migrate_hook_start_precopy_tcp_multifd_uadk;
>  
>      args->start.incoming_defer = true;
> @@ -156,6 +161,7 @@ migrate_hook_start_precopy_tcp_multifd_zlib(QTestState *from,
>  
>  static void test_multifd_tcp_zlib(char *name, MigrateCommon *args)
>  {
> +    args->listen_uri = "tcp:127.0.0.1:0";
>      args->start_hook = migrate_hook_start_precopy_tcp_multifd_zlib;
>  
>      args->start.incoming_defer = true;
> diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c
> index e811945122..199e439263 100644
> --- a/tests/qtest/migration/framework.c
> +++ b/tests/qtest/migration/framework.c
> @@ -820,6 +820,9 @@ int test_precopy_common(MigrateCommon *args)
>      QObject *out_channels = NULL;
>  
>      g_assert(!args->cpr_channel || args->connect_channels);
> +    if (args->start.incoming_defer) {
> +        g_assert(args->listen_uri || args->connect_channels);
> +    }
>  
>      if (migrate_start(&from, &to, args->listen_uri, &args->start)) {
>          return -1;
> @@ -829,6 +832,14 @@ int test_precopy_common(MigrateCommon *args)
>          data_hook = args->start_hook(from, to);
>      }
>  
> +    if (args->start.incoming_defer && !args->start.defer_target_connect) {
> +        if (args->connect_channels) {
> +            in_channels = qobject_from_json(args->connect_channels,
> +                                            &error_abort);
> +        }
> +        migrate_incoming_qmp(to, args->listen_uri, in_channels, "{}");
> +    }

The changes here in the framework code looks all correct, even though I
don't think "connect_channels" is used here in this patch.

Said that, IMHO the channel management is chaos right now in our qtest..
At least it took me some time staring at this path when reviewing.

IMHO a major reason is due to the cpr complexities.

E.g. test_mode_transfer_common() used different things to specify incoming
channels (cpr_channel, opts_target, connect_channels).  We should clean
them up at some point..

> +
>      /* Wait for the first serial output from the source */
>      if (args->result == MIG_TEST_SUCCEED) {
>          wait_for_serial("src_serial");
> @@ -1060,9 +1071,6 @@ void *migrate_hook_start_precopy_tcp_multifd_common(QTestState *from,
>      migrate_set_parameter_str(from, "multifd-compression", method);
>      migrate_set_parameter_str(to, "multifd-compression", method);
>  
> -    /* Start incoming migration from the 1st socket */
> -    migrate_incoming_qmp(to, "tcp:127.0.0.1:0", NULL, "{}");
> -
>      return NULL;
>  }
>  
> diff --git a/tests/qtest/migration/precopy-tests.c b/tests/qtest/migration/precopy-tests.c
> index d9c463dd0f..ab5789717f 100644
> --- a/tests/qtest/migration/precopy-tests.c
> +++ b/tests/qtest/migration/precopy-tests.c
> @@ -239,9 +239,6 @@ static void *migrate_hook_start_fd(QTestState *from,
>                                   "  'arguments': { 'fdname': 'fd-mig' }}");
>      close(pair[0]);
>  
> -    /* Start incoming migration from the 1st socket */
> -    migrate_incoming_qmp(to, "fd:fd-mig", NULL, "{}");
> -
>      /* Send the 2nd socket to the target */
>      qtest_qmp_fds_assert_success(from, &pair[1], 1,
>                                   "{ 'execute': 'getfd',"
> @@ -283,6 +280,7 @@ static void migrate_hook_end_fd(QTestState *from,
>  static void test_precopy_fd_socket(char *name, MigrateCommon *args)
>  {
>      args->connect_uri = "fd:fd-mig";
> +    args->listen_uri = "fd:fd-mig";
>      args->start_hook = migrate_hook_start_fd;
>      args->end_hook = migrate_hook_end_fd;
>  
> @@ -484,6 +482,7 @@ static void test_multifd_tcp_uri_none(char *name, MigrateCommon *args)
>       * everything will work alright even if guest page is changing.
>       */
>      args->live = true;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> @@ -500,6 +499,7 @@ static void test_multifd_tcp_zero_page_legacy(char *name, MigrateCommon *args)
>       * everything will work alright even if guest page is changing.
>       */
>      args->live = true;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> @@ -516,6 +516,7 @@ static void test_multifd_tcp_no_zero_page(char *name, MigrateCommon *args)
>       * everything will work alright even if guest page is changing.
>       */
>      args->live = true;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> diff --git a/tests/qtest/migration/tls-tests.c b/tests/qtest/migration/tls-tests.c
> index 166f27f478..f63f37132a 100644
> --- a/tests/qtest/migration/tls-tests.c
> +++ b/tests/qtest/migration/tls-tests.c
> @@ -677,6 +677,7 @@ static void test_multifd_tcp_tls_psk_match(char *name, MigrateCommon *args)
>  {
>      args->start_hook = migrate_hook_start_multifd_tcp_tls_psk_match;
>      args->end_hook = migrate_hook_end_tls_psk;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> @@ -689,6 +690,7 @@ static void test_multifd_tcp_tls_psk_mismatch(char *name, MigrateCommon *args)
>      args->start_hook = migrate_hook_start_multifd_tcp_tls_psk_mismatch;
>      args->end_hook = migrate_hook_end_tls_psk;
>      args->result = MIG_TEST_FAIL;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.hide_stderr = true;
>      args->start.incoming_defer = true;
> @@ -702,6 +704,7 @@ static void test_multifd_postcopy_tcp_tls_psk_match(char *name,
>  {
>      args->start_hook = migrate_hook_start_multifd_tcp_tls_psk_match;
>      args->end_hook = migrate_hook_end_tls_psk;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> @@ -716,6 +719,7 @@ static void test_multifd_tcp_tls_x509_default_host(char *name,
>  {
>      args->start_hook = migrate_hook_start_multifd_tls_x509_default_host;
>      args->end_hook = migrate_hook_end_tls_x509;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> @@ -728,6 +732,7 @@ static void test_multifd_tcp_tls_x509_override_host(char *name,
>  {
>      args->start_hook = migrate_hook_start_multifd_tls_x509_override_host;
>      args->end_hook = migrate_hook_end_tls_x509;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> @@ -754,6 +759,7 @@ static void test_multifd_tcp_tls_x509_mismatch_host(char *name,
>      args->start_hook = migrate_hook_start_multifd_tls_x509_mismatch_host;
>      args->end_hook = migrate_hook_end_tls_x509;
>      args->result = MIG_TEST_FAIL;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.hide_stderr = true;
> @@ -767,6 +773,7 @@ static void test_multifd_tcp_tls_x509_allow_anon_client(char *name,
>  {
>      args->start_hook = migrate_hook_start_multifd_tls_x509_allow_anon_client;
>      args->end_hook = migrate_hook_end_tls_x509;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> @@ -780,6 +787,7 @@ static void test_multifd_tcp_tls_x509_reject_anon_client(char *name,
>      args->start_hook = migrate_hook_start_multifd_tls_x509_reject_anon_client;
>      args->end_hook = migrate_hook_end_tls_x509;
>      args->result = MIG_TEST_FAIL;
> +    args->listen_uri = "tcp:127.0.0.1:0";
>  
>      args->start.incoming_defer = true;
>      args->start.hide_stderr = true;
> -- 
> 2.51.0
> 

-- 
Peter Xu



  reply	other threads:[~2025-12-17 20:26 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-15 21:59 [PATCH v3 00/51] migration: Unify capabilities and parameters Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 01/51] migration: Fix leak of block_bitmap_mapping Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 02/51] migration: Fix leak of cpr_exec_command Fabiano Rosas
2025-12-16 16:48   ` Peter Xu
2025-12-15 21:59 ` [PATCH v3 03/51] migration: Add a qdev property for StrOrNull Fabiano Rosas
2025-12-16 16:57   ` Peter Xu
2025-12-15 21:59 ` [PATCH v3 04/51] tests/qtest/migration: Add a NULL parameters test for TLS Fabiano Rosas
2025-12-16 17:03   ` Peter Xu
2025-12-15 21:59 ` [PATCH v3 05/51] migration: Normalize tls arguments Fabiano Rosas
2025-12-16 17:24   ` Peter Xu
2025-12-17 16:40     ` Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 06/51] migration: Remove MigrateSetParameters Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 07/51] qapi/migration: Don't document MigrationParameter Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 08/51] migration: Run a post update routine after setting parameters Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 09/51] migration: Add a flag to track block-bitmap-mapping input Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 10/51] migration: Remove checks for s->parameters has_* fields Fabiano Rosas
2025-12-16 18:50   ` Peter Xu
2025-12-15 21:59 ` [PATCH v3 11/51] migration: Do away with usage of QERR_INVALID_PARAMETER_VALUE Fabiano Rosas
2025-12-15 21:59 ` [PATCH v3 12/51] migration: Extract code to mark all parameters as present Fabiano Rosas
2025-12-16 18:56   ` Peter Xu
2025-12-15 21:59 ` [PATCH v3 13/51] migration: Use QAPI_CLONE_MEMBERS in query_migrate_parameters Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 14/51] migration: Use QAPI_CLONE_MEMBERS in migrate_params_test_apply Fabiano Rosas
2025-12-16 19:31   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 15/51] migration: Use QAPI_CLONE_MEMBERS in migrate_params_apply Fabiano Rosas
2025-12-16 20:26   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 16/51] qapi: Add QAPI_MERGE Fabiano Rosas
2025-12-16 20:30   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 17/51] migration: Use QAPI_MERGE in migrate_params_test_apply Fabiano Rosas
2025-12-16 20:47   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 18/51] migration: Cleanup hmp_info_migrate_parameters Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 19/51] migration: Add capabilities into MigrationParameters Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 20/51] migration: Remove s->capabilities Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 21/51] qapi/migration: Deprecate capabilities commands Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 22/51] migration: Store the initial values used for s->parameters Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 23/51] migration: Allow migrate commands to provide the migration config Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 24/51] migration: Allow incoming cmdline to take config Fabiano Rosas
2025-12-17 15:34   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 25/51] tests/qtest/migration: Pass MigrateCommon into test functions Fabiano Rosas
2025-12-16 21:57   ` Peter Xu
2025-12-17 18:35   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 26/51] tests/qtest/migration: Pass MigrateStart into cancel tests Fabiano Rosas
2025-12-16 21:57   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 27/51] tests/qtest/migration: Fix misuse of listen_uri Fabiano Rosas
2025-12-17 15:30   ` Peter Xu
2025-12-17 16:59     ` Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 28/51] tests/qtest/migration: Stop invoking migrate_incoming from hooks Fabiano Rosas
2025-12-17 20:26   ` Peter Xu [this message]
2025-12-17 21:05     ` Fabiano Rosas
2025-12-17 21:24       ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 29/51] tests/qtest/migration: Add config QDict Fabiano Rosas
2025-12-17 20:27   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 30/51] tests/qtest/migration: Add temporary code to toggle usage of config Fabiano Rosas
2025-12-18 17:34   ` Peter Xu
2025-12-18 19:41     ` Fabiano Rosas
2025-12-18 20:58       ` Peter Xu
2025-12-18 23:41         ` Fabiano Rosas
2025-12-19 15:09           ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 31/51] tests/qtest/migration: Add a function for default capabilities Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 32/51] tests/qtest/migration: Adapt convergence routines to config Fabiano Rosas
2025-12-18 17:25   ` Peter Xu
2025-12-18 19:47     ` Fabiano Rosas
2025-12-18 21:08       ` Peter Xu
2025-12-18 23:28         ` Fabiano Rosas
2025-12-19 15:39           ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 33/51] tests/qtest/migration: Adapt the incoming cmdline for config passing Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 34/51] tests/qtest/migration: Use migrate_incoming_qmp where possible Fabiano Rosas
2025-12-18 18:47   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 35/51] tests/qtest/migration: Add a config parameter to migrate_qmp functions Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 36/51] tests/qtest/migration: Move tls hook data out of specific hooks Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 37/51] tests/qtest/migration: Add new hook with data Fabiano Rosas
2025-12-18 19:05   ` Peter Xu
2025-12-18 21:43     ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 38/51] tests/qtest/migration: TLS x509: Refactor to use full hook Fabiano Rosas
2025-12-18 19:15   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 39/51] tests/qtest/migration: TLS x509: Add init/cleanup routines Fabiano Rosas
2025-12-18 21:31   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 40/51] tests/qtest/migration: TLS PSK: Refactor to use full hook Fabiano Rosas
2025-12-18 21:33   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 41/51] tests/qtest/migration: TLS PSK: Add init/cleanup routines Fabiano Rosas
2025-12-18 21:48   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 42/51] tests/qtest/migration: Remove multifd compression hook Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 43/51] tests/qtest/migration: Convert postcopy tests to use config Fabiano Rosas
2025-12-18 22:03   ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 44/51] tests/qtest/migration: Convert TLS PSK " Fabiano Rosas
2025-12-18 22:14   ` Peter Xu
2025-12-18 22:42     ` Fabiano Rosas
2025-12-19 15:59       ` Peter Xu
2025-12-15 22:00 ` [PATCH v3 45/51] tests/qtest/migration: Convert TLS x509 " Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 46/51] tests/qtest/migration: Convert compression " Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 47/51] tests/qtest/migration: Convert file " Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 48/51] tests/qtest/migration: Convert misc-tests " Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 49/51] tests/qtest/migration: Convert precopy tests " Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 50/51] tests/qtest/migration: Remove migrate_set_capabilities and code around it Fabiano Rosas
2025-12-15 22:00 ` [PATCH v3 51/51] tests/qtest/migration: Further simplify TLS tests Fabiano Rosas
2025-12-17 16:58 ` [PATCH v3 00/51] migration: Unify capabilities and parameters Peter Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aUMR699ZHbiF7_lh@x1.local \
    --to=peterx@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=farosas@suse.de \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.