[RFC 4/6] migration: Deprecate -incoming <uri>
Paolo Bonzini
pbonzini at redhat.com
Thu Jun 22 09:45:28 UTC 2023
On 6/22/23 10:52, Juan Quintela wrote:
> User friendliness.
> The problem is that if you use more than two channels with multifd, on
> the incoming side, you need to do:
You're sacrificing user-friendliness for the 99.99% that don't use
multifd, for an error (i.e. it's not even fixing the issue) for the
0.01% that use multifd. That's not user-friendly.
> - migrate_set_parameter multifd-channels 16
> - migrate_incoming <uri>
>
>> The issue is not how many features the command line has, but how
>> they're implemented.
>
> Or if they are confusing for the user?
Anyone using multifd is not a typical user anyway.
>> If they're just QMP wrappers and as such they're self-contained in
>> softmmu/vl.c, that's fine.
>>
>> In fact, even for parameters, we could use keyval to parse "-incoming"
>
> What is keyval?
util/keyval.c and include/qemu/keyval.h. It parses a list of key=value
pairs into a QDict. Once you have removed the "source" key from the
QDict you can use a visitor to parse the rest into a
MigrateSetParameters. See the handling of QEMU_OPTION_audio, it could
be something like
case QEMU_OPTION_incoing: {
Visitor *v;
MigrateSetParameters *incoming_params = NULL;
QDict *dict = keyval_parse(optarg, "source", NULL,
&error_fatal);
if (incoming) {
if (qdict_haskey(dict, "source")) {
error_setg(&error_fatal, "Parameter 'source' is
duplicate");
}
} else {
if (!qdict_haskey(dict, "source")) {
error_setg(&error_fatal, "Parameter 'source' is
missing");
}
runstate_set(RUN_STATE_INMIGRATE);
incoming = g_strdup(qdict_get_str(dict, "source"));
qdict_del(dict, "source");
}
v = qobject_input_visitor_new_keyval(QOBJECT(dict));
qobject_unref(dict);
visit_type_MigrateSetParameters(v, NULL,
&incoming_params, &error_fatal);
visit_free(v);
qmp_migration_set_parameters(incoming_params,
&error_fatal);
qapi_free_MigrateSetParameters(incoming_params);
}
For example "-incoming [source=]tcp:foo,multifd-channels=16" would
desugar to
migrate_set_parameter multifd-channels 16
migrate_incoming tcp:foo
The only incompatibility is for people who are using "," in an URI,
which is rare and only an issue for the "exec" protocol.
Paolo
>> and
>> set the parameters in the same place as above. That would remove the need
>> for "-global migration".
>
> Could you elaborate?
> The other option that I can think of is changing the error messages for
> migrate_check_parameters() and give instructions that you can't set
> multifd channels once that you have started incoming migration.
> Explaining there to use migrate_incoming command?
>
> Later, Juan.
>
>
More information about the libvir-list
mailing list