On 03/28/2018 11:18 AM, Daniel P. Berrangé wrote:
When we split up the daemons, libvirtd will need to forward
different
sets of APIs to different daemons. This means libvirtd is going to need
to have multiple virConnectPtr instances open.
Have you done any thinking about what will need to be added to the
network driver API (or how)? I'd like to be involved with that.
One part that troubles me is that there will no longer be a parent-child
relationship between the process keeping track of network allocations
and the qemu process - currently if a qemu process dies, libvirtd knows
about it and can recover the resources that had been allocated, but with
the network driver in a separate process, qemu could die and
libvirtd-qemu might not be around to notify libvirtd-network (or
whatever we end up calling the processes).
Likewise, there is the nwfilter driver's complicated callback setup to
reload the iptables rules of all relevant domains when a filter's
definition is changed. I haven't thought about the details, but I think
that will need some "interesting" handling.
Also the network driver and nwfilter driver both use virfirewall.c,
which has a mutex to prevent simultaneous updates; either we'll need to
put that functionality into one of the drivers and have the other one
call it via a public API, or we'll need to rely on iptables -w (but even
that could lead to different results, since it's locking just during
application of a single rule rather than a complete transaction (as
defined by virfirewall.c).
This series prepares for that by introducing "separate" connections,
which are actually just an extra reference on the current single
connection. This will facilitate later changes.
Daniel P. Berrangé (7):
rpc: refactor way connection object is generated for remote dispatch
remote: use a separate connection for interface APIs
remote: use a separate connection for network APIs
remote: use a separate connection for nodedev APIs
remote: use a separate connection for nwfilter APIs
remote: use a separate connection for secret APIs
remote: use a separate connection for storage APIs
src/remote/remote_daemon.h | 6 +++
src/remote/remote_daemon_dispatch.c | 81 +++++++++++++++++++------------
src/rpc/gendispatch.pl | 95 ++++++++++++++++++++++++++++---------
3 files changed, 128 insertions(+), 54 deletions(-)