migration-test: defer connection
Add an option to defer connection to the target monitor, needed by the cpr-transfer test. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/1736967650-129648-21-git-send-email-steven.sistare@oracle.com Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
parent
5357ef823a
commit
f5bac78cd8
@ -223,6 +223,7 @@ int migrate_start(QTestState **from, QTestState **to, const char *uri,
|
|||||||
const char *bootpath;
|
const char *bootpath;
|
||||||
g_autoptr(QList) capabilities = migrate_start_get_qmp_capabilities(args);
|
g_autoptr(QList) capabilities = migrate_start_get_qmp_capabilities(args);
|
||||||
g_autofree char *memory_backend = NULL;
|
g_autofree char *memory_backend = NULL;
|
||||||
|
const char *events;
|
||||||
|
|
||||||
if (args->use_shmem) {
|
if (args->use_shmem) {
|
||||||
if (!g_file_test("/dev/shm", G_FILE_TEST_IS_DIR)) {
|
if (!g_file_test("/dev/shm", G_FILE_TEST_IS_DIR)) {
|
||||||
@ -340,22 +341,30 @@ int migrate_start(QTestState **from, QTestState **to, const char *uri,
|
|||||||
&src_state);
|
&src_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the monitor connection is deferred, enable events on the command line
|
||||||
|
* so none are missed. This is for testing only, do not set migration
|
||||||
|
* options like this in general.
|
||||||
|
*/
|
||||||
|
events = args->defer_target_connect ? "-global migration.x-events=on" : "";
|
||||||
|
|
||||||
cmd_target = g_strdup_printf("-accel kvm%s -accel tcg "
|
cmd_target = g_strdup_printf("-accel kvm%s -accel tcg "
|
||||||
"-machine %s,%s "
|
"-machine %s,%s "
|
||||||
"-name target,debug-threads=on "
|
"-name target,debug-threads=on "
|
||||||
"%s "
|
"%s "
|
||||||
"-serial file:%s/dest_serial "
|
"-serial file:%s/dest_serial "
|
||||||
"-incoming %s "
|
"-incoming %s "
|
||||||
"%s %s %s %s",
|
"%s %s %s %s %s",
|
||||||
kvm_opts ? kvm_opts : "",
|
kvm_opts ? kvm_opts : "",
|
||||||
machine, machine_opts,
|
machine, machine_opts,
|
||||||
memory_backend, tmpfs, uri,
|
memory_backend, tmpfs, uri,
|
||||||
|
events,
|
||||||
arch_opts ? arch_opts : "",
|
arch_opts ? arch_opts : "",
|
||||||
shmem_opts ? shmem_opts : "",
|
shmem_opts ? shmem_opts : "",
|
||||||
args->opts_target ? args->opts_target : "",
|
args->opts_target ? args->opts_target : "",
|
||||||
ignore_stderr);
|
ignore_stderr);
|
||||||
*to = qtest_init_with_env_and_capabilities(QEMU_ENV_DST, cmd_target,
|
*to = qtest_init_with_env_and_capabilities(QEMU_ENV_DST, cmd_target,
|
||||||
capabilities, true);
|
capabilities, !args->defer_target_connect);
|
||||||
qtest_qmp_set_event_callback(*to,
|
qtest_qmp_set_event_callback(*to,
|
||||||
migrate_watch_for_events,
|
migrate_watch_for_events,
|
||||||
&dst_state);
|
&dst_state);
|
||||||
@ -373,7 +382,9 @@ int migrate_start(QTestState **from, QTestState **to, const char *uri,
|
|||||||
* to mimic as closer as that.
|
* to mimic as closer as that.
|
||||||
*/
|
*/
|
||||||
migrate_set_capability(*from, "events", true);
|
migrate_set_capability(*from, "events", true);
|
||||||
migrate_set_capability(*to, "events", true);
|
if (!args->defer_target_connect) {
|
||||||
|
migrate_set_capability(*to, "events", true);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -733,6 +744,11 @@ void test_precopy_common(MigrateCommon *args)
|
|||||||
|
|
||||||
migrate_qmp(from, to, args->connect_uri, args->connect_channels, "{}");
|
migrate_qmp(from, to, args->connect_uri, args->connect_channels, "{}");
|
||||||
|
|
||||||
|
if (args->start.defer_target_connect) {
|
||||||
|
qtest_connect(to);
|
||||||
|
qtest_qmp_handshake(to, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (args->result != MIG_TEST_SUCCEED) {
|
if (args->result != MIG_TEST_SUCCEED) {
|
||||||
bool allow_active = args->result == MIG_TEST_FAIL;
|
bool allow_active = args->result == MIG_TEST_FAIL;
|
||||||
wait_for_migration_fail(from, allow_active);
|
wait_for_migration_fail(from, allow_active);
|
||||||
|
@ -116,6 +116,9 @@ typedef struct {
|
|||||||
* size is plugged in. If omitted, "-m %s" is used.
|
* size is plugged in. If omitted, "-m %s" is used.
|
||||||
*/
|
*/
|
||||||
const char *memory_backend;
|
const char *memory_backend;
|
||||||
|
|
||||||
|
/* Do not connect to target monitor and qtest sockets in qtest_init */
|
||||||
|
bool defer_target_connect;
|
||||||
} MigrateStart;
|
} MigrateStart;
|
||||||
|
|
||||||
typedef enum PostcopyRecoveryFailStage {
|
typedef enum PostcopyRecoveryFailStage {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user