On Wed, Jun 08, 2016 at 11:07:16AM +0100, Daniel P. Berrange wrote:
[...]
> situation, but that's just a matter of plumbing I think.)
>
> The options we've come up with, broadly, are as follows:
>
> 1. Try to use the existing syslog facilities
>
> 2. Re-purpose one of our existing daemons to perform a role similar to
> virtlogd
>
> 3. "Steal" virtlogd and import it into our tree (yay GPL!)
>
> 4. Work with the libvirt community to make virtlogd an independent
> project which can be used by both libvirt and libxl directly
For completeness I'd also suggest
5. Declare it out of scope for xl toolstack to solve the whole
problem. Merely provide the minimal hooks to enable the layer
above libxl to solve it. This is effectively QEMU's approach.
Of course, this would mean that any non-libvirt layer using libxl
stil faces the same problem you're facing, so I understand if thats
not desirable from your POV.
> None of the options are really that great. I'm sure you guys explored
> #1 yourselves before deciding to write your own tools, so I won't cover
> its deficiencies. #2 and #3 both involve a lot of duplicate effort and
> duplicate code.
>
> From a global perspective, #4 would seem to make sense, since it allows
> the virtlogd functionality to be more generally used (and potentially
> may be useful in non-virtualization scenarios as well). But it also has
> the cost of working cross-community, maintaining a clean separate
> codebase, &c &c. And we realize for the libvirt project it's extra
work
> for no obvious immediate benefit.
As you say there's not really any pre-existing tools that can easily
fit with the requirements, which is why we ended up creating virtlogd
ourselves - it was either that or OpenStack was going to invent their
own daemon which does what virtlogd does to solve it at the even higher
layer (though they could only fix serial port file based output, not
stderr outout)
So, we wanted a standard solution that libvirt and all apps using
libvirt could rely up unconditionally. From our existing libvirtd,
and codebase in general, we have alot of infrastructure pieces that
made creating virtlogd a pretty easy task. In particular our formal
RPC protocol and handling code for libvirtd and virtlockd, was
able to serve as the basis for virtlogd with little need for extra
code.
This in turn means that having virtlogd as a separate project would
be a major undertaking - it relies on so much libvirt infrastructure
code that to make it into a separate project, we'd have to pull out
a huge pile of libvirt internal code and turn it into a more formal
library that could be shared between an external virtlogd and libvirt.
We've never considered any of this code to be API/ABI stable, so don't
really want to go down that route. This would also make your option #3
a surprisingly large effort - there's a load of libvirt code you would
have to pull into Xen, or alternatively re-write in a Xen friendly
manner.
Less problematic, though still relevant, is that virtlogd is intended
to align with libvirtd/virtlockd designs, to give a consistent model.
By this I mean the config files are in common locations, the way we
auto-spawn the daemons works the same way - eg we have one libvirtd
running privileged, and one per-user account, and auto-spawn a
corresponding virtlogd for each.
FWIW I came to the same conclusion in my own research. So I'm not really
keen on #3 and #4.
> As Wei said, we're still exploring options; even a negative response
> narrows down the search space. :-)
>
> Let us know what you think.
I don't have a great answer for you I'm afraid, but I don't think
that #4 is really practical from the libvirt POV, due to the issue
with the all the libvirt internal code virtlogd relies upon that
we don't wish to turn into a stable API/ABI.
Understood.
Wei.