On Thu, Oct 31, 2013 at 12:17:54PM -0600, Eric Blake wrote:
On 10/31/2013 12:09 PM, Daniel P. Berrange wrote:
>
> If <disk type='network'/> were made to require a storage pool in
order
> to use it, that would be a regression in functionality IMHO. This setup
> should be completely independant of the storage driver code. It needs to
> be able to resolve the backing file chain directly, without calling into
> the storage driver.
I'm not requiring that a storage pool be present, only that the storage
backend be present, by limiting the compilation against the network
libraries to just the storage backends. Booting something that doesn't
belong to a pool has always been supported (ideally, what we SHOULD do
is make anything that a <domain> refers to but which does not map to an
existing pool would then create a transient pool for the lifetime of the
domain, so that all domain <disk> sources are backed by a pool - but
that's a bigger project). And I don't see a regression - allowing
network/raw without a storage backend will still work; where we need to
change is that we currently allow network/qcow2 to boot, but this is
cheating, and breaks if sVirt doesn't label the backing file. That is,
we are treating network/qcow2 as if it were network/raw always; and if
the storage backend is not present, we'd _still_ have to treat it as
network/raw (rather than refuse to boot, as that would be a regression;
but if there is any backing chain, boot may still fail anyways because
of sVirt). But where we DO have a storage backend, then pool or no
pool, we are able to chase the backing chain correctly, at the expense
of dragging in the additional libraries. And since qemu is trying to go
modular to avoid libraries, we should also make our storage backends
modular to avoid libraries (where we then are forced to fall back to
network/raw as the only sane handling of network sources).
IIUC, this is still going to be introducing a direct code path dependancy
between the QEMU and storage driver code though.
Currently src/qemu depends only on code in src/util & src/conf[1]. For
the storage pool bits, it can call indirectly via src/libvirt.c APIs, but
it does not call anything in src/storage/ directly. I really want this
to remain that way, because avoiding direct calls is key to enabling
us to split libvirtd up into separate daemons per driver in the future.
Daniel
[1] Yes, there's a dep on src/network too, which i was never at all happy
about, and which needs to be refactored / removed in some manner in
the future
--
|:
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 :|