On Thu, Jan 16, 2020 at 12:41:37PM +0100, Peter Krempa wrote:
When parsing legacy NBD backing file strings such as
'nbd:unix:/tmp/sock:exportname=/' we'd fail to set the transport to
VIR_STORAGE_NET_HOST_TRANS_UNIX. This started to be a problem once we
actually started to generate config of the backing store on the command
line with -blockdev as the JSON code would try to format it as TCP and
fail with:
internal error: argument key 'host' must not have null value
Set the type properly and add a test.
This bug was found by the libguestfs test suite in:
https://bugzilla.redhat.com/show_bug.cgi?id=1791614
The bug was found by Ming Xie of the virt-v2v QE team.
The patch itself looks fine as far as I can tell. But I'm having real
problems actually testing it. Can you suggest any way to test libvirt
parsing these URIs?
My current method (which doesn't work for reasons that I don't
understand) is:
(1) Compile libvirt from source.
(2) Run ./run src/libvirtd &
(3) Create an NBD server + overlay file:
rm /tmp/sock
nbdkit -U /tmp/sock memory 1G
qemu-img create -f qcow2 overlay.qcow2 -b nbd:unix:/tmp/sock:exportname=/ -F raw
(4) Try to boot a libvirt guest using the overlay:
virt-install --import --name test --disk path=overlay.qcow2,format=raw --memory 1024
But for some reason libvirt just ignores the overlay:
2020-01-16 13:00:44.980+0000: 2378711: warning : virStorageBackendVolOpen:1527 : ignoring
missing file 'nbd:unix:/tmp/sock'
I verified that the overlay works in programs like qemu-img so it
doesn't seem to be a problem with the overlay itself.
Rich.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/util/virstoragefile.c | 2 +-
tests/virstoragetest.c | 4 ++++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 1397f532fd..7a2af0ad94 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2964,7 +2964,7 @@ virStorageSourceParseNBDColonString(const char *nbdstr,
}
src->hosts->socket = g_strdup(backing[2]);
-
+ src->hosts->transport = VIR_STORAGE_NET_HOST_TRANS_UNIX;
} else {
src->hosts->name = g_strdup(backing[1]);
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index 2862758752..370e19252b 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -1258,6 +1258,10 @@ mymain(void)
"<source protocol='nbd'
name=':test'>\n"
" <host name='example.org'
port='6000'/>\n"
"</source>\n");
+ TEST_BACKING_PARSE("nbd:unix:/tmp/sock:exportname=/",
+ "<source protocol='nbd'
name='/'>\n"
+ " <host transport='unix'
socket='/tmp/sock'/>\n"
+ "</source>\n");
TEST_BACKING_PARSE("nbd://example.org:1234",
"<source protocol='nbd'>\n"
" <host name='example.org'
port='1234'/>\n"
--
2.24.1
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list