[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Libvir] PATCH 20/20: move the QEMU driver into libvirt.so



On Fri, Jun 22, 2007 at 03:35:42AM +0100, Daniel P. Berrange wrote:
> This is the final step to move the QEMU code out of the daemon binary and
> into the main libvirt.so library. Practically all of protocol.x goes away
> apart from a single struct representing the header - this should probably
> be moved into remote_protocol.x - or vica-verca. The --remote switch to
> the daemon is removed since its no longer needed. A single --listen switch
> is added to control whether the daemon opens any TCP/IP sockets or not,
> and a config file in /etc/sysconfig/libvirtd is provided to toggle this.
> By default the daemon will only listen on a UNIX socket, unless the admin
> edits /etc/sysconfig/libvirtd to enable TCP - whether it uses TCP or TLS
> is still upto the libvirtd.conf config file.
> 
> The driver.c file is switched over to using virGetDomain and virGetNetwork
> instead of its previous temporary / nasty hack. A qemudRegister function
> is added to make the new implementation be registered.
> 
> The daemon now registers an event loop implementation to be used by the
> QEMU driver. Various bits of code relating to the QEMU protocol are killed
> off in the qemud.c file.
> 
> The remote_internal.c file is adapted so that it will handle qemu:///sesion
> and qemu:///system URLs as if they were  qemu+unix:///session and 
> qemu+unix:///system respectively. It is also adapted so that in the case
> of qemu:///session is uses  $HOME/.libvirt/libvirt-sock for the UNIX domain
> socket path. It is also tweaked to use the abstract namespace if the first
> character is @
> 
> 
> Rather than showing a huge  +10000 lines, -10000 lines diff caused by 
> moving files from qemud/ into src/, i've applied some makefile trickery
> to make libvirt.so compile some files out of qemud/ directly. I intend
> to commit it in this format, and then do the actual file names in a second
> commit. This will avoid mixing functional changes, with plain renames
> to preserve better historical CVS logs. 
> 
> The files to be moved from qemud/ to src/ are:
> 
>    driver.c    -> qemud_driver.c
>    driver.h    -> qemud_driver.h
>    conf.c      -> qemud_conf.c
>    conf.h      -> qemud_conf.h
>    bridge.c
>    bridge.h
>    iptables.c
>    iptables.h
>    uuid.c
>    uuid.h
> 
> The files to be completely deleted are:
>   
>    dispatch.c
>    dispatch.h
>    protocol.c
>    protocol.h
>    protocol.x
>    qemu_internal.c
>    qemu_internal.h
> 
> 
> NB. one feature I've just realized is missing is the autostart of the
> daemon when using  qemu:///session in remote_internal.c. Shouldn't be
> much work to move the neccessary code from qemu_internal.c across.
> 
> Dan.
> -- 
> |=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
> |=-           Perl modules: http://search.cpan.org/~danberr/              -=|
> |=-               Projects: http://freshmeat.net/~danielpb/               -=|
> |=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 

> diff -r c6fe9aa77e5b libvirt.spec.in
> --- a/libvirt.spec.in	Thu Jun 21 21:21:11 2007 -0400
> +++ b/libvirt.spec.in	Thu Jun 21 21:21:14 2007 -0400
> @@ -124,10 +124,7 @@ fi
>  %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/
>  %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart
>  %{_sysconfdir}/rc.d/init.d/libvirtd
> -%dir %{_sysconfdir}/libvirt
> -%dir %{_sysconfdir}/libvirt/qemu
> -%dir %{_sysconfdir}/libvirt/qemu/networks
> -%dir %{_sysconfdir}/libvirt/qemu/networks/autostart
> +%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
>  %dir %{_datadir}/libvirt/
>  %dir %{_datadir}/libvirt/networks/
>  %{_datadir}/libvirt/networks/default.xml

  Hum, what happens on rpm -U of the old version w.r.t. the daemon ?

[...]
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/qemud/libvirtd.sysconf	Thu Jun 21 21:21:14 2007 -0400
> @@ -0,0 +1,6 @@
> +# Override the default config file
> +#LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
> +
> +# Listen for TCP/IP connections
> +# NB. must setup TLS/SSL keys prior to using this
> +#LIBVIRTD_ARGS="--listen"

  Hum interesting that wasn't present before

> diff -r c6fe9aa77e5b qemud/qemud.c
[...]
> +        if (snprintf(sockname, maxlen, "@%s/.libvirt/libvirt-sock", pw->pw_dir) >= maxlen)
> +            goto snprintf_error;
> +
> +        if (snprintf(server->logDir, PATH_MAX, "%s/.libvirt/log", pw->pw_dir) >= PATH_MAX)
> +            goto snprintf_error;
> +
> +        if (asprintf (&base, "%s/.libvirt", pw->pw_dir) == -1) {
> +            qemudLog (QEMUD_ERR, "out of memory in asprintf");
> +            return -1;

  We really need one function to cleanup those path builds.

> diff -r c6fe9aa77e5b src/Makefile.am
[...]
> @@ -42,8 +43,12 @@ CLIENT_SOURCES =						\
>  		proxy_internal.c proxy_internal.h		\
>  		conf.c conf.h                                   \
>  		xm_internal.c xm_internal.h                     \
> -		qemu_internal.c qemu_internal.h			\
> -		remote_internal.c remote_internal.h
> +		remote_internal.c remote_internal.h             \
> +		../qemud/bridge.c ../qemud/bridge.h 				\
> +		../qemud/iptables.c ../qemud/iptables.h 				\
> +		../qemud/uuid.c ../qemud/uuid.h 					\
> +		../qemud/driver.c ../qemud/driver.h 			\
> +		../qemud/qemu_conf.c ../qemud/conf.h
>  
>  SERVER_SOURCES = 						\
>  		../qemud/protocol.h ../qemud/protocol.c		\
> @@ -58,6 +63,9 @@ virsh_DEPENDENCIES = $(DEPS)
>  virsh_DEPENDENCIES = $(DEPS)
>  virsh_LDADD = $(LDADDS) $(VIRSH_LIBS)
>  virsh_CFLAGS = $(COVERAGE_CFLAGS)
> +
> +../qemud/qemu_conf.c:
> +	ln -s conf.c $@

  As long as it's temporary just to help review, fine :-)

  Okay, looks fine, +1

  thanks a million !

Daniel

-- 
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard redhat com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]