[libvirt RFC v3 06/19] remote: Add RPC support for the virDomainRestoreParametersFlags API
Claudio Fontana
cfontana at suse.de
Thu Apr 28 14:20:13 UTC 2022
On 4/28/22 11:34 AM, Daniel P. Berrangé wrote:
> On Wed, Apr 27, 2022 at 10:56:22PM +0200, Claudio Fontana wrote:
>> On 4/27/22 1:00 AM, Jim Fehlig wrote:
>>> On 4/26/22 10:47, Claudio Fontana wrote:
>>>> Signed-off-by: Claudio Fontana <cfontana at suse.de>
>>>> ---
>>>> src/remote/remote_driver.c | 1 +
>>>> src/remote/remote_protocol.x | 14 +++++++++++++-
>>>> src/remote_protocol-structs | 8 ++++++++
>>>> 3 files changed, 22 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
>>>> index 1fc5d41971..c5b644ce49 100644
>>>> --- a/src/remote/remote_driver.c
>>>> +++ b/src/remote/remote_driver.c
>>>> @@ -8449,6 +8449,7 @@ static virHypervisorDriver hypervisor_driver = {
>>>> .domainSaveParametersFlags = remoteDomainSaveParametersFlags, /* 8.3.0 */
>>>> .domainRestore = remoteDomainRestore, /* 0.3.0 */
>>>> .domainRestoreFlags = remoteDomainRestoreFlags, /* 0.9.4 */
>>>> + .domainRestoreParametersFlags = remoteDomainRestoreParametersFlags, /* 8.3.0 */
>>>> .domainSaveImageGetXMLDesc = remoteDomainSaveImageGetXMLDesc, /* 0.9.4 */
>>>> .domainSaveImageDefineXML = remoteDomainSaveImageDefineXML, /* 0.9.4 */
>>>> .domainCoreDump = remoteDomainCoreDump, /* 0.3.0 */
>>>> diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
>>>> index c2ae5c5748..7b919ef375 100644
>>>> --- a/src/remote/remote_protocol.x
>>>> +++ b/src/remote/remote_protocol.x
>>>> @@ -3236,6 +3236,11 @@ struct remote_domain_save_parameters_flags_args {
>>>> unsigned int flags;
>>>> };
>>>>
>>>> +struct remote_domain_restore_parameters_flags_args {
>>>> + remote_typed_param params<REMOTE_DOMAIN_SAVE_PARAMS_MAX>;
>>>> + unsigned int flags;
>>>> +};
>>>> +
>>>> /* The device removed event is the last event where we have to support
>>>> * dual forms for back-compat to older clients; all future events can
>>>> * use just the modern form with callbackID. */
>>>> @@ -6935,5 +6940,12 @@ enum remote_procedure {
>>>> * @generate: both
>>>> * @acl: domain:hibernate
>>>> */
>>>> - REMOTE_PROC_DOMAIN_SAVE_PARAMETERS_FLAGS = 440
>>>> + REMOTE_PROC_DOMAIN_SAVE_PARAMETERS_FLAGS = 440,
>>>> +
>>>> + /**
>>>> + * @generate: both
>>>> + * @acl: domain:start
>>>> + * @acl: domain:write
>>>> + */
>>>> + REMOTE_PROC_DOMAIN_RESTORE_PARAMETERS_FLAGS = 441
>>>
>>> I've stared at this for quite a while but can't figure out why the dispatch stub
>>> does not pass virConnectPtr to virDomainRestoreParametersFlags. I'm hitting the
>>> following build failure
>>>
>>> In file included from ../src/remote/remote_daemon_dispatch.c:133:
>>>
>>> src/remote/remote_daemon_dispatch_stubs.h: In function
>>> ‘remoteDispatchDomainRestoreParametersFlags’:
>>>
>>> src/remote/remote_daemon_dispatch_stubs.h:10080:41: error: passing argument 1 of
>>> ‘virDomainRestoreParametersFlags’ from incompatible pointer type
>>> [-Werror=incompatible-pointer-types]
>>>
>>> 10080 | if (virDomainRestoreParametersFlags(params, nparams, args->flags) < 0)
>>>
>>> | ^~~~~~
>>>
>>> | |
>>>
>>> | virTypedParameterPtr {aka
>>> struct _virTypedParameter *}
>>>
>>> In file included from ../include/libvirt/libvirt.h:36,
>>>
>>> from ../src/internal.h:65,
>>>
>>> from ../src/util/virerror.h:24,
>>>
>>> from ../src/remote/remote_daemon_dispatch.c:23:
>>>
>>> ../include/libvirt/libvirt-domain.h:1576:72: note: expected ‘virConnectPtr’ {aka
>>> ‘struct _virConnect *’} but argument is of type ‘virTypedParameterPtr’ {aka
>>> ‘struct _virTypedParameter *’}
>>>
>>> 1576 | int virDomainRestoreParametersFlags (virConnectPtr
>>> conn,
>>>
>>>
>>> Perhaps a bug in gendispatch.pl. I'm not familiar with the script or debugging
>>> it, but others here can likely provide help.
>>>
>>> Jim
>>>
>>
>> Still fighting this one, could not defeat the beast yet..
>
> Don't bother. gendispatch.pl is not capable of correctly handling all
> API designs we have and it isn't worth trying to fix it unless the
> problem is obvious or you enjoy reading & writing obtuse perl code ;-P
>
> In the .xdr file, switch 'generate: both' to exclude either the client
> or server code generation, or both, depending on which bit is broken.
> Then just write the code by hand. You can start with the broken code
> and just fix it up and add to remote_daemon_dispatch.c directly. You
> will see several examples not using 'generate: both' you can follow
>
>
> With regards,
> Daniel
I actually think I found the problem. It needs to be put explicitly into a list
of methods that require conn, like NodeSetMemoryParameters.
Here is the change:
commit 192d8e56e88c00ede94768f6f73c6be64f31c789 (HEAD -> api_draft)
Author: Claudio Fontana <cfontana at suse.de>
Date: Thu Apr 28 08:16:27 2022 -0600
gendispatch: add DomainRestoreParametersFlags as requiring conn argument
Signed-off-by: Claudio Fontana <cfontana at suse.de>
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index 9f5bf0e316..bce88cfc52 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -637,7 +637,10 @@ elsif ($mode eq "server") {
} elsif ($args_member =~ m/^remote_typed_param (\S+)<(\S+)>;/) {
push(@vars_list, "virTypedParameterPtr $1 = NULL");
push(@vars_list, "int n$1 = 0");
- if ($call->{ProcName} eq "NodeSetMemoryParameters") {
+
+ # NB: if your new API starts with remote_typed_params, enter it here if you need
+ # the conn arg to be passed first!
+ if ($call->{ProcName} eq "NodeSetMemoryParameters" || $call->{ProcName} eq "DomainRestoreParametersFlags") {
push(@args_list, $conn_var);
}
push(@args_list, "$1");
More information about the libvir-list
mailing list