[libvirt] [PATCH 36/41] remote: open secondary drivers via remote driver if needed

Daniel P. Berrangé berrange at redhat.com
Thu Jul 25 15:15:46 UTC 2019


On Tue, Jul 23, 2019 at 05:03:14PM +0100, Daniel P. Berrangé wrote:
> When the client has a connection to one of the hypervisor specific
> daemons (eg virtqemud), the app may still expect to use the secondary
> driver APIs (storage, network, etc). None of these will be registered in
> the hypervisor daemon, so we must explicitly open a connection to each
> of the daemons for the secondary drivers we need.
> 
> We don't want to open these secondary driver connections at the same
> time as the primary connection is opened though. That would mean that
> establishing a connection to virtqemud would immediately trigger
> activation of virtnetworkd, virnwfilterd, etc despite that that these
> drivers may never be used by the app.
> 
> Thus we only open the secondary driver connections at time of first use
> by an API call.
> 
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  src/remote/remote_daemon.h          |  13 +++
>  src/remote/remote_daemon_dispatch.c | 146 ++++++++++++++++++----------
>  2 files changed, 109 insertions(+), 50 deletions(-)


> diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
> index b677bd44ee..f1304695bd 100644
> --- a/src/remote/remote_daemon_dispatch.c
> +++ b/src/remote/remote_daemon_dispatch.c
> @@ -1954,18 +1954,35 @@ remoteGetHypervisorConn(virNetServerClientPtr client)
>  }
>  
>  
> +static virConnectPtr
> +remoteGetSecondaryConn(bool readonly, virConnectPtr *conn, const char *uri)
> +{
> +    if (!*conn) {
> +        if (uri) {
> +            VIR_DEBUG("Opening driver %s", uri);
> +            if (readonly)
> +                *conn = virConnectOpenReadOnly(uri);
> +            else
> +                *conn = virConnectOpen(uri);
> +            if (!conn)
> +                return NULL;

This needs to be  !*conn

> +            VIR_DEBUG("Opened driver %p", *conn);
> +        } else {
> +            virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
> +            return NULL;
> +        }
> +    }
> +
> +    return *conn;
> +}

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list