Adapt the convergence routines migrate_ensure_[non_]converge to set the convergence parameters in the config dict it instead of using migrate-set-parameters.
Some tests need to change the convergence parameters during the migration. The config object method is specific to configuration prior to starting a migration, so by design it's not suitable to effect migration-runtime changes. The existing routines will be kept for this purpose (renamed with 'ongoing' for clarity). Signed-off-by: Fabiano Rosas <[email protected]> --- tests/qtest/migration/framework.c | 10 ++++----- tests/qtest/migration/migration-qmp.c | 32 +++++++++++++++++++++++++-- tests/qtest/migration/migration-qmp.h | 6 +++-- tests/qtest/migration/misc-tests.c | 4 ++-- tests/qtest/migration/precopy-tests.c | 26 +++++++++------------- 5 files changed, 52 insertions(+), 26 deletions(-) diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c index fd15bd832e..df42a8a2c6 100644 --- a/tests/qtest/migration/framework.c +++ b/tests/qtest/migration/framework.c @@ -583,7 +583,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr, args->postcopy_data = args->start_hook(from, to); } - migrate_ensure_non_converge(from); + migrate_ensure_non_converge(from, args->start.config); migrate_prepare_for_dirty_mem(from); qtest_qmp_assert_success(to, "{ 'execute': 'migrate-incoming'," " 'arguments': { " @@ -872,7 +872,7 @@ int test_precopy_common(MigrateCommon *args) } if (args->live) { - migrate_ensure_non_converge(from); + migrate_ensure_non_converge(from, args->start.config); migrate_prepare_for_dirty_mem(from); } else { /* @@ -884,7 +884,7 @@ int test_precopy_common(MigrateCommon *args) if (args->result == MIG_TEST_SUCCEED) { qtest_qmp_assert_success(from, "{ 'execute' : 'stop'}"); wait_for_stop(from, &src_state); - migrate_ensure_converge(from); + migrate_ongoing_ensure_converge(from); } } @@ -942,7 +942,7 @@ int test_precopy_common(MigrateCommon *args) } migrate_wait_for_dirty_mem(from, to); - migrate_ensure_converge(from); + migrate_ongoing_ensure_converge(from); /* * We do this first, as it has a timeout to stop us @@ -1047,7 +1047,7 @@ void test_file_common(MigrateCommon *args, bool stop_src) data_hook = args->start_hook(from, to); } - migrate_ensure_converge(from); + migrate_ensure_converge(from, args->start.config); wait_for_serial("src_serial"); if (stop_src) { diff --git a/tests/qtest/migration/migration-qmp.c b/tests/qtest/migration/migration-qmp.c index 5c46ceb3e6..7fe47a5793 100644 --- a/tests/qtest/migration/migration-qmp.c +++ b/tests/qtest/migration/migration-qmp.c @@ -499,20 +499,48 @@ void migrate_set_parameter_bool(QTestState *who, const char *parameter, migrate_check_parameter_bool(who, parameter, value); } -void migrate_ensure_non_converge(QTestState *who) +void migrate_ongoing_ensure_non_converge(QTestState *who) { /* Can't converge with 1ms downtime + 3 mbs bandwidth limit */ migrate_set_parameter_int(who, "max-bandwidth", 3 * 1000 * 1000); migrate_set_parameter_int(who, "downtime-limit", 1); } -void migrate_ensure_converge(QTestState *who) +void migrate_ongoing_ensure_converge(QTestState *who) { /* Should converge with 30s downtime + 1 gbs bandwidth limit */ migrate_set_parameter_int(who, "max-bandwidth", 1 * 1000 * 1000 * 1000); migrate_set_parameter_int(who, "downtime-limit", 30 * 1000); } +void migrate_ensure_non_converge(QTestState *who, QDict *config) +{ + config = config_load(config); + if (config) { + /* Can't converge with 1ms downtime + 3 mbs bandwidth limit */ + qdict_put_int(config, "max-bandwidth", 3 * 1000 * 1000); + qdict_put_int(config, "downtime-limit", 1); + } else { + assert(who); + migrate_ongoing_ensure_non_converge(who); + } + config_put(config); +} + +void migrate_ensure_converge(QTestState *who, QDict *config) +{ + config = config_load(config); + /* Should converge with 30s downtime + 1 gbs bandwidth limit */ + if (config) { + qdict_put_int(config, "max-bandwidth", 1 * 1000 * 1000 * 1000); + qdict_put_int(config, "downtime-limit", 30 * 1000); + } else { + assert(who); + migrate_ongoing_ensure_converge(who); + } + config_put(config); +} + void migrate_pause(QTestState *who) { qtest_qmp_assert_success(who, "{ 'execute': 'migrate-pause' }"); diff --git a/tests/qtest/migration/migration-qmp.h b/tests/qtest/migration/migration-qmp.h index 9a36a677ba..e465c69094 100644 --- a/tests/qtest/migration/migration-qmp.h +++ b/tests/qtest/migration/migration-qmp.h @@ -39,8 +39,10 @@ void migrate_set_parameter_strv(QTestState *who, const char *parameter, void migrate_set_parameter_null(QTestState *who, const char *parameter); void migrate_set_parameter_bool(QTestState *who, const char *parameter, int value); -void migrate_ensure_non_converge(QTestState *who); -void migrate_ensure_converge(QTestState *who); +void migrate_ongoing_ensure_non_converge(QTestState *who); +void migrate_ongoing_ensure_converge(QTestState *who); +void migrate_ensure_non_converge(QTestState *who, QDict *config); +void migrate_ensure_converge(QTestState *who, QDict *config); void migrate_pause(QTestState *who); void migrate_continue(QTestState *who, const char *state); void migrate_recover(QTestState *who, const char *uri); diff --git a/tests/qtest/migration/misc-tests.c b/tests/qtest/migration/misc-tests.c index 61bdfda857..0a737cb54f 100644 --- a/tests/qtest/migration/misc-tests.c +++ b/tests/qtest/migration/misc-tests.c @@ -68,7 +68,7 @@ static void test_analyze_script(char *name, MigrateCommon *args) file = g_strdup_printf("%s/migfile", tmpfs); uri = g_strdup_printf("exec:cat > %s", file); - migrate_ensure_converge(from); + migrate_ensure_converge(from, args->start.config); migrate_qmp(from, to, uri, NULL, "{}"); wait_for_migration_complete(from); @@ -102,7 +102,7 @@ static void test_ignore_shared(char *name, MigrateCommon *args) return; } - migrate_ensure_non_converge(from); + migrate_ensure_non_converge(from, args->start.config); migrate_prepare_for_dirty_mem(from); /* Wait for the first serial output from the source */ diff --git a/tests/qtest/migration/precopy-tests.c b/tests/qtest/migration/precopy-tests.c index ab5789717f..eabbbf39c3 100644 --- a/tests/qtest/migration/precopy-tests.c +++ b/tests/qtest/migration/precopy-tests.c @@ -374,7 +374,7 @@ static void test_auto_converge(char *name, MigrateCommon *args) * Set the initial parameters so that the migration could not converge * without throttling. */ - migrate_ensure_non_converge(from); + migrate_ensure_non_converge(from, args->start.config); /* To check remaining size after precopy */ migrate_set_capability(from, "pause-before-switchover", true); @@ -427,7 +427,7 @@ static void test_auto_converge(char *name, MigrateCommon *args) g_assert_cmpint(hit, ==, 1); /* Now, when we tested that throttling works, let it converge */ - migrate_ensure_converge(from); + migrate_ongoing_ensure_converge(from); /* * Wait for pre-switchover status to check last throttle percentage @@ -562,7 +562,7 @@ static void test_multifd_tcp_cancel(MigrateCommon *args, bool postcopy_ram) return; } - migrate_ensure_non_converge(from); + migrate_ensure_non_converge(from, args->start.config); migrate_prepare_for_dirty_mem(from); if (postcopy_ram) { @@ -623,14 +623,12 @@ static void test_multifd_tcp_cancel(MigrateCommon *args, bool postcopy_ram) /* Start incoming migration from the 1st socket */ migrate_incoming_qmp(to2, "tcp:127.0.0.1:0", NULL, "{}"); - migrate_ensure_non_converge(from); + migrate_ensure_non_converge(from, args->start.config); migrate_qmp(from, to2, NULL, NULL, "{}"); migrate_wait_for_dirty_mem(from, to2); - - migrate_ensure_converge(from); - + migrate_ongoing_ensure_converge(from); wait_for_stop(from, get_src()); qtest_qmp_eventwait(to2, "RESUME"); @@ -659,7 +657,7 @@ static void test_cancel_src_after_failed(QTestState *from, QTestState *to, */ wait_for_serial("src_serial"); - migrate_ensure_converge(from); + migrate_ensure_converge(from, args->config); migrate_qmp(from, to, uri, NULL, "{}"); @@ -684,7 +682,7 @@ static void test_cancel_src_after_cancelled(QTestState *from, QTestState *to, migrate_incoming_qmp(to, uri, NULL, "{ 'exit-on-error': false }"); wait_for_serial("src_serial"); - migrate_ensure_converge(from); + migrate_ensure_converge(from, args->config); migrate_qmp(from, to, uri, NULL, "{}"); @@ -709,7 +707,7 @@ static void test_cancel_src_after_complete(QTestState *from, QTestState *to, migrate_incoming_qmp(to, uri, NULL, "{ 'exit-on-error': false }"); wait_for_serial("src_serial"); - migrate_ensure_converge(from); + migrate_ensure_converge(from, args->config); migrate_qmp(from, to, uri, NULL, "{}"); @@ -739,7 +737,7 @@ static void test_cancel_src_after_none(QTestState *from, QTestState *to, migrate_incoming_qmp(to, uri, NULL, "{ 'exit-on-error': false }"); - migrate_ensure_converge(from); + migrate_ensure_converge(from, args->config); migrate_qmp(from, to, uri, NULL, "{}"); wait_for_migration_complete(from); @@ -759,7 +757,7 @@ static void test_cancel_src_pre_switchover(QTestState *from, QTestState *to, migrate_incoming_qmp(to, uri, NULL, "{ 'exit-on-error': false }"); wait_for_serial("src_serial"); - migrate_ensure_converge(from); + migrate_ensure_converge(from, args->config); migrate_qmp(from, to, uri, NULL, "{}"); @@ -1066,9 +1064,6 @@ static void migrate_dirty_limit_wait_showup(QTestState *from, migrate_set_parameter_int(from, "x-vcpu-dirty-limit-period", period); migrate_set_parameter_int(from, "vcpu-dirty-limit", value); - /* Make sure migrate can't converge */ - migrate_ensure_non_converge(from); - /* To check limit rate after precopy */ migrate_set_capability(from, "pause-before-switchover", true); @@ -1128,6 +1123,7 @@ static void test_dirty_limit(char *name, MigrateCommon *args) } /* Prepare for dirty limit migration and wait src vm show up */ + migrate_ensure_non_converge(from, args->start.config); migrate_dirty_limit_wait_showup(from, dirtylimit_period, dirtylimit_value); /* Start migrate */ -- 2.51.0
