[libvirt] [PATCH 02/13] Move daemon-related parts of virNetServer to virNetDaemon
Daniel P. Berrange
berrange at redhat.com
Wed May 20 16:16:04 UTC 2015
On Wed, May 20, 2015 at 06:11:14PM +0200, Michal Privoznik wrote:
> On 20.05.2015 07:19, Martin Kletzander wrote:
> > This allows to have more servers in one daemon which helps isolating
> > some resources.
> >
> > Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> > ---
> > daemon/libvirtd.c | 101 ++---
> > docs/internals.html.in | 4 +-
> > docs/internals/rpc.html.in | 7 +
> > po/POTFILES.in | 1 +
> > src/Makefile.am | 1 +
> > src/libvirt_remote.syms | 28 +-
> > src/locking/lock_daemon.c | 63 ++--
> > src/locking/lock_daemon_config.c | 2 +-
> > src/locking/lock_daemon_dispatch.c | 4 +-
> > src/lxc/lxc_controller.c | 65 ++--
> > src/rpc/virnetdaemon.c | 746 +++++++++++++++++++++++++++++++++++++
> > src/rpc/virnetdaemon.h | 82 ++++
> > src/rpc/virnetserver.c | 526 ++++----------------------
> > src/rpc/virnetserver.h | 46 +--
> > src/rpc/virnetserverprogram.h | 3 +
> > 15 files changed, 1074 insertions(+), 605 deletions(-)
> > create mode 100644 src/rpc/virnetdaemon.c
> > create mode 100644 src/rpc/virnetdaemon.h
> >
>
> > diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c
> > new file mode 100644
> > index 0000000..8d42638
> > --- /dev/null
> > +++ b/src/rpc/virnetdaemon.c
>
> > +
> > +
> > +static virClassPtr virNetDaemonClass;
> > +
> > +void
>
> static
>
> > +virNetDaemonDispose(void *obj)
> > +{
> > + virNetDaemonPtr dmn = obj;
> > + size_t i;
> > +
> > + VIR_FORCE_CLOSE(dmn->autoShutdownInhibitFd);
> > +
> > + for (i = 0; i < dmn->nsignals; i++) {
> > + sigaction(dmn->signals[i]->signum, &dmn->signals[i]->oldaction, NULL);
> > + VIR_FREE(dmn->signals[i]);
> > + }
> > + VIR_FREE(dmn->signals);
> > + VIR_FORCE_CLOSE(dmn->sigread);
> > + VIR_FORCE_CLOSE(dmn->sigwrite);
> > + if (dmn->sigwatch > 0)
> > + virEventRemoveHandle(dmn->sigwatch);
> > +
> > + for (i = 0; i < dmn->nservers; i++)
> > + virObjectUnref(dmn->servers[i]);
> > + VIR_FREE(dmn->servers);
> > +
> > + virJSONValueFree(dmn->srvObject);
> > +}
> > +
> > +static int
> > +virNetDaemonOnceInit(void)
> > +{
> > + if (!(virNetDaemonClass = virClassNew(virClassForObjectLockable(),
> > + "virNetDaemon",
> > + sizeof(virNetDaemon),
> > + virNetDaemonDispose)))
> > + return -1;
> > +
> > + return 0;
> > +}
>
>
> > +/*
> > + * Separate function merely for the purpose of unified error
> > + * reporting.
> > + */
> > +static virNetServerPtr
> > +virNetDaemonGetServerInternal(virNetDaemonPtr dmn,
> > + int subServerID)
> > +{
> > + if (subServerID < 0 || subServerID >= dmn->nservers) {
> > + virReportError(VIR_ERR_INVALID_ARG,
> > + _("Invalid server ID: %d"),
> > + subServerID);
> > + return NULL;
> > + }
> > +
> > + return virObjectRef(dmn->servers[subServerID]);
> > +}
> > +
> > +/*
> > + * The server is locked after this function.
>
> No, it's not.
>
> > + */
> > +virNetServerPtr
> > +virNetDaemonGetServer(virNetDaemonPtr dmn,
> > + int subServerID)
> > +{
> > + virNetServerPtr srv = NULL;
> > +
> > + virObjectLock(dmn);
> > + srv = virNetDaemonGetServerInternal(dmn, subServerID);
>
> Did you forget virObjectLock(srv) here?
>
> > + virObjectUnlock(dmn);
> > +
> > + return srv;
> > +}
> > +
>
> > +void
> > +virNetDaemonUpdateServices(virNetDaemonPtr dmn,
> > + bool enabled)
> > +{
> > + size_t i;
> > +
> > + virObjectLock(dmn);
> > + for (i = 0; i < dmn->nservers; i++)
> > + virNetServerUpdateServices(dmn->servers[i], enabled);
> > + virObjectUnlock(dmn);
>
> Hm... I guess we need something slightly different. While we may want
> one service to stop accepting new clients, we may want the other one to
> still accept new ones. But since this is a big split, and so far a
> daemon will have only one server, it can be saved for a follow up patch.
>
> > +}
> > +
>
> Besides Dan's finding, looking okay. ACK.
Just to be clear, not having back-compat for the exec-restart is a
NACK. So we need to confirm upgrades definitely work before we can
merge this refactoring.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list