Uploaded to Jammy. ** Description changed:
[ Impact ] - * If a race condition occurs on libvirtd shutdown, - a QEMU domain status XML (/run/libvirt/qemu/*.xml) - might lose the QEMU-driver specific information, - such as '<monitor path=.../>'. - - * On the next libvirtd startup, the parsing of that - QEMU domain's status XML fails as '<monitor path=' - is not found: - - $ journalctl -b -u libvirtd.service | tail - ... - ... libvirtd[2789]: internal error: no monitor path - ... libvirtd[2789]: Failed to load config for domain 'test-vm' - - * As a result, the domain is not listed in `virsh list`, - and `virsh` commands to it fail. + * If a race condition occurs on libvirtd shutdown, + a QEMU domain status XML (/run/libvirt/qemu/*.xml) + might lose the QEMU-driver specific information, + such as '<monitor path=.../>'. - $ virsh list - Id Name State - -------------------- - - * The domain is still running, but libvirt considers - it as shutdown, which might cause conflicts/issues - with higher-level tools (e.g., openstack nova). - - $ virsh list --all - Id Name State - -------------------------- - - test-vm shut off + * On the next libvirtd startup, the parsing of that + QEMU domain's status XML fails as '<monitor path=' + is not found: - $ pgrep -af qemu-system-x86_64 | cut -d, -f1 - 2638 /usr/bin/qemu-system-x86_64 -name guest=test-vm, + $ journalctl -b -u libvirtd.service | tail + ... + ... libvirtd[2789]: internal error: no monitor path + ... libvirtd[2789]: Failed to load config for domain 'test-vm' + + * As a result, the domain is not listed in `virsh list`, + and `virsh` commands to it fail. + + $ virsh list + Id Name State + -------------------- + + * The domain is still running, but libvirt considers + it as shutdown, which might cause conflicts/issues + with higher-level tools (e.g., openstack nova). + + $ virsh list --all + Id Name State + -------------------------- + - test-vm shut off + + $ pgrep -af qemu-system-x86_64 | cut -d, -f1 + 2638 /usr/bin/qemu-system-x86_64 -name guest=test-vm, [ Test Plan ] - * Synthetic reproducer with GDB in comment #1. - - * On failure, the XML is saved *without* '<monitor path=' - and libvirt fails to parse the domain on startup. - The domain is *not* listed in `virsh list`. + * Synthetic reproducer with GDB in comment #1. - * On success, the XML is saved *with* '<monitor path=' - and libvirt correctly parses the domain on startup. - The domain is listed in `virsh list`. + * On failure, the XML is saved *without* '<monitor path=' + and libvirt fails to parse the domain on startup. + The domain is *not* listed in `virsh list`. + + * On success, the XML is saved *with* '<monitor path=' + and libvirt correctly parses the domain on startup. + The domain is listed in `virsh list`. [ Regression Potential ] - * The patch changes *where* in the libvirt qemu driver's - shutdown path the worker thread pool is stopped/freed: - from _after_ releasing other data to _before_ doing so. - - * Therefore, the potential for regression is limited to - the libvirt qemu driver's shutdown path, and would be - observed when stopping/restarting libvirtd.service. - - * The behavior during normal operation is not affected. + * The patch changes *where* in the libvirt qemu driver's + shutdown path the worker thread pool is stopped/freed: + from _after_ releasing other data to _before_ doing so. + + * Therefore, the potential for regression is limited to + the libvirt qemu driver's shutdown path, and would be + observed when stopping/restarting libvirtd.service. + + * The behavior during normal operation is not affected. + + [Other Info] + + * The fix commit [1] is included in Mantic and later, + and needed in Focal and Jammy. + + $ git describe --contains 152770333449cd3b78b4f5a9f1148fc1f482d842 + v9.3.0-rc1~90 + + $ rmadison -a source libvirt | sed -n '/focal/,$p' + libvirt | 6.0.0-0ubuntu8 | focal | source + libvirt | 6.0.0-0ubuntu8.16 | focal-security | source + libvirt | 6.0.0-0ubuntu8.16 | focal-updates | source + libvirt | 6.0.0-0ubuntu8.17 | focal-proposed | source + libvirt | 8.0.0-1ubuntu7 | jammy | source + libvirt | 8.0.0-1ubuntu7.5 | jammy-security | source + libvirt | 8.0.0-1ubuntu7.8 | jammy-updates | source + libvirt | 9.6.0-1ubuntu1 | mantic | source + libvirt | 10.0.0-2ubuntu1 | noble | source + libvirt | 10.0.0-2ubuntu5 | noble-proposed | source + + [1] + https://gitlab.com/libvirt/libvirt/-/commit/152770333449cd3b78b4f5a9f1148fc1f482d842 + [Original Description] There's a race condition on libvirtd shutdown that might cause the domain status XML file(s) to lose the '<monitor path=...'> tag/field. This causes an error on libvirtd startup, and the domain is not listed/managed, despite it is still running. $ virsh list Id Name State ------------------------- 1 test-vm running $ sudo systemctl restart libvirtd.service $ journalctl -b -u libvirtd.service | tail ... ... libvirtd[2789]: internal error: no monitor path ... libvirtd[2789]: Failed to load config for domain 'test-vm' $ virsh list Id Name State -------------------- $ virsh list --all Id Name State -------------------------- - test-vm shut off $ pgrep -af qemu-system-x86_64 | cut -d, -f1 2638 /usr/bin/qemu-system-x86_64 -name guest=test-vm, ** Changed in: libvirt (Ubuntu Jammy) Status: Confirmed => In Progress -- 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
