Steps with test packages on Focal (shutdown-on-runtime)
---
Environment:
---
On top of LXD VM in comments #12/#13.
Enable PPA & debug symbols
sudo add-apt-repository -yn ppa:mfo/lp2059272
sudo sed '/^deb / s,$, main/debug,' -i
/etc/apt/sources.list.d/mfo-ubuntu-lp2059272-focal.list
sudo apt update
Install packages
sudo apt install --yes libvirt{0,-daemon{,-driver-
qemu}}{,-dbgsym} libvirt-clients gdb qemu-system-x86
$ dpkg -s libvirt-daemon | grep ^Version:
Version: 6.0.0-0ubuntu8.18~ppa1
Libvirtd debug logging
cat <<EOF | sudo tee -a /etc/libvirt/libvirtd.conf
log_filters="1:qemu 1:libvirt"
log_outputs="3:syslog:libvirtd
1:file:/var/log/libvirt/libvirtd-debug.log"
EOF
Follow `Steps to reproduce on Focal (shutdown-on-runtime)` in comment #12
---
Up to ...
Check the backtrace of the domain status XML save function, coming from
device deleted event
Thread 20 "libvirtd" hit Breakpoint 3, virDomainObjSave
(obj=0x7fb3202733b0, xmlopt=0x7fb3200400d0, statusDir=0x7fb32000a620
"/run/libvirt/qemu") at ../../../src/conf/domain_conf.c:29157
29157 ../../../src/conf/domain_conf.c: No such file or directory.
(gdb) bt
#0 virDomainObjSave (obj=0x7fb3202733b0, xmlopt=0x7fb3200400d0,
statusDir=0x7fb32000a620 "/run/libvirt/qemu") at
../../../src/conf/domain_conf.c:29157
#1 0x00007fb32c20d627 in processDeviceDeletedEvent
(devAlias=0x564ae9f032e0 "input0", vm=0x7fb3202733b0, driver=0x7fb320039ed0) at
../../../src/qemu/qemu_driver.c:4367
#2 qemuProcessEventHandler (data=0x564ae9fc88f0,
opaque=0x7fb320039ed0) at ../../../src/qemu/qemu_driver.c:4943
#3 0x00007fb333ed51af in virThreadPoolWorker
(opaque=opaque@entry=0x564ae9fd3080) at ../../../src/util/virthreadpool.c:163
#4 0x00007fb333ed451c in virThreadHelper (data=<optimized out>) at
../../../src/util/virthread.c:196
#5 0x00007fb333b95609 in start_thread () from
/lib/x86_64-linux-gnu/libpthread.so.0
#6 0x00007fb333aba353 in clone () from /lib/x86_64-linux-gnu/libc.so.6
$ sudo kill $(pidof libvirtd)
Thread 1 "libvirtd" hit Breakpoint 1, qemuStateCleanup () at
../../../src/qemu/qemu_driver.c:1180
t 20
(gdb) p xmlopt.privateData.format
$1 = (virDomainXMLPrivateDataFormatFunc) 0x7fb32c167890
<qemuDomainObjPrivateXMLFormat>
t 1
c &
Check the formatter/options again; it is *STILL* referenced, not 0x0
anymore:
t 20
(gdb) p xmlopt.privateData.format
$2 = (virDomainXMLPrivateDataFormatFunc) 0x7fb32c167890
<qemuDomainObjPrivateXMLFormat>
Check the shutdown/cleanup thread is waiting for it,
in the path to free the worker thread pool:
(gdb) i th 1
Id Target Id Frame
1 Thread 0x7fb33007bb40 (LWP 6585) "libvirtd" (running)
t 1
interrupt
(gdb) bt
#0 0x00007fb333b9c376 in pthread_cond_wait@@GLIBC_2.3.2 () from
/lib/x86_64-linux-gnu/libpthread.so.0
#1 0x00007fb333ed479b in virCondWait (c=<optimized out>, m=<optimized
out>) at ../../../src/util/virthread.c:144
#2 0x00007fb333ed5438 in virThreadPoolFree (pool=<optimized out>) at
../../../src/util/virthreadpool.c:286
#3 0x00007fb32c1d89e3 in qemuStateCleanup () at
../../../src/qemu/qemu_driver.c:1186
#4 0x00007fb33407246f in virStateCleanup () at
../../../src/libvirt.c:669
#5 0x0000564ae98babc8 in main (argc=<optimized out>, argv=<optimized
out>) at ../../../src/remote/remote_daemon.c:1447
Let the save function continue, and libvirt finishes shutting down:
(gdb) c &
Continuing.
(gdb) t 20
(gdb) c
[Inferior 1 (process 6585) exited normally]
(gdb) q
Check the VM status XML *after*:
$ sudo grep -e '<domstatus' -e '<domain' -e 'monitor path'
/run/libvirt/qemu/test-vm.xml
<domstatus state='running' reason='booted' pid='6634'>
<monitor path='/var/lib/libvirt/qemu/domain-1-test-vm/monitor.sock'
type='unix'/>
<domain type='qemu' id='1'>
It *still* has the 'monitor path' tag/field.
Now, the next time libvirtd starts, it correctly parses that XML:
$ sudo systemctl start libvirtd.service
$ journalctl -b -u libvirtd.service | grep -A1 error
Mar 30 22:27:20 lp2059272-focal libvirtd[6670]: 6686: error :
dnsmasqCapsRefreshInternal:714 : Cannot check dnsmasq binary /usr/sbin/dnsmasq:
No such file or directory
And libvirt is aware of the domain, and can manage it:
$ virsh list
Id Name State
-------------------------
1 test-vm running
$ virsh destroy test-vm
Domain test-vm destroyed
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2059272
Title:
libvirt domain is not listed/managed after libvirt restart with
messages "internal error: no monitor path" and "Failed to load config
for domain"
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/2059272/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs