Skip to content

vmupdate: wait for full VM shutdown before next queued update#208

Open
Jayant-kernel wants to merge 3 commits intoQubesOS:mainfrom
Jayant-kernel:fix-vmupdate-wait-shutdown-pci
Open

vmupdate: wait for full VM shutdown before next queued update#208
Jayant-kernel wants to merge 3 commits intoQubesOS:mainfrom
Jayant-kernel:fix-vmupdate-wait-shutdown-pci

Conversation

@Jayant-kernel
Copy link
Copy Markdown

@Jayant-kernel Jayant-kernel commented Mar 2, 2026

Summary

Fix update sequencing for VMs started by qubes-vm-update: wait for full shutdown in QubeConnection.__exit__() before returning.

This prevents the next queued VM from being started while the previous one is still in the shutdown phase and still holding shared PCI devices.

Closes QubesOS/qubes-issues#10617.

What changed

  • vmupdate/qube_connection.py
  • After calling self.qube.shutdown() for VMs started by updater, call wait_for_domain_shutdown([self.qube]).

Why

With --max-concurrency=1, the updater previously issued shutdown and immediately returned, allowing the next VM to start too early. For HVMs sharing PCI devices, this causes startup conflicts.

Tests

  • Added: vmupdate/tests/test_qube_connection.py
  • test_wait_for_shutdown_when_vm_started_by_update
  • test_do_not_shutdown_if_vm_was_already_running

@Jayant-kernel
Copy link
Copy Markdown
Author

Hi @piotrbartman @marmarek , quick update from my side: I pushed the fix for #10617 and updated the PR.
When you get a moment, could you please take a look?
Happy to tweak anything needed.

@ben-grande
Copy link
Copy Markdown
Contributor

It only needs to wait shutdown if it is a qube with PCI devices assigned to it. Making it wait for every qube to shutdown, slows the process. Also, no need to tag maintainers, they get notified if they are tracking the repository.

@Jayant-kernel
Copy link
Copy Markdown
Author

Yes, I updated the PR to wait only for VMs with assigned PCI devices, not for every VM shutdown. Please take another look when you can.

@Jayant-kernel Jayant-kernel force-pushed the fix-vmupdate-wait-shutdown-pci branch from 5901acd to 868b1f8 Compare March 3, 2026 02:06
@Jayant-kernel
Copy link
Copy Markdown
Author

Jayant-kernel commented Mar 3, 2026

I uploaded my signing key to the keyserver and force-pushed the signed commit.
Could someone please re-run the signature check on this PR when possible? Thanks!

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Mar 3, 2026

Codecov Report

❌ Patch coverage is 91.57895% with 8 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.80%. Comparing base (455d4e7) to head (060186e).

Files with missing lines Patch % Lines
vmupdate/utils.py 85.00% 6 Missing ⚠️
vmupdate/qube_connection.py 84.61% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #208      +/-   ##
==========================================
+ Coverage   69.33%   71.80%   +2.47%     
==========================================
  Files          10       12       +2     
  Lines        1275     1330      +55     
==========================================
+ Hits          884      955      +71     
+ Misses        391      375      -16     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@ben-grande
Copy link
Copy Markdown
Contributor

Please remove this commit: c7eb4b2

# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This verbatim license seems to be too short compared to other files. I have not seen such such option being used.

https://github.com/QubesOS/qubes-core-admin-linux/blob/main/vmupdate/tests/test_vmupdate.py

Comment thread vmupdate/tests/test_qube_connection.py Outdated

@patch("vmupdate.qube_connection.wait_for_domain_shutdown")
@patch("vmupdate.qube_connection.asyncio.run")
def test_wait_for_shutdown_when_vm_started_by_update(_arun, wait_shutdown):
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the _ should be used, it normally is for options that you won't use it later, but would like to know on definition what they are. You use this option later:

 _arun.assert_called_once()

Comment thread vmupdate/tests/test_qube_connection.py Outdated

@patch("vmupdate.qube_connection.wait_for_domain_shutdown")
@patch("vmupdate.qube_connection.asyncio.run")
def test_do_not_wait_for_shutdown_without_assigned_pci(_arun, wait_shutdown):
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread vmupdate/tests/test_qube_connection.py Outdated

@patch("vmupdate.qube_connection.wait_for_domain_shutdown")
@patch("vmupdate.qube_connection.asyncio.run")
def test_do_not_shutdown_if_vm_was_already_running(_arun, wait_shutdown):
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread vmupdate/qube_connection.py Outdated
@@ -94,9 +96,19 @@ def __exit__(self, exc_type, exc_val, exc_tb):
if self.qube.is_running() and not self._initially_running:
self.logger.info('Shutdown %s', self.qube.name)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice if the log message could be improved, add some text related to waiting shutdown, to differentiate from the default case that doesn't wait.

Comment thread vmupdate/qube_connection.py Outdated
self.logger.info('Shutdown %s', self.qube.name)
self.qube.shutdown()
if self._has_assigned_pci_devices(self.qube):
asyncio.run(wait_for_domain_shutdown([self.qube]))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use vmupdate.shutdown_domains() instead.

Comment thread vmupdate/qube_connection.py Outdated
"""Return True when VM has assigned PCI devices."""
try:
return any(vm.devices['pci'].get_assigned_devices())
except Exception: # best effort check only
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This exception is too broad. Use QubesDaemonAccessErrror. Other exception should be raised.

@Jayant-kernel
Copy link
Copy Markdown
Author

Hey @ben-grande
I have

Fixed the license header to match other test files
Renamed _arun to arun in the tests
Switched to shutdown_domains() instead of calling asyncio.run directly
Narrowed the exception to QubesDaemonAccessError
Improved the log message to mention PCI devices

Is this okay?

@Jayant-kernel Jayant-kernel requested a review from ben-grande March 5, 2026 15:04
Comment thread vmupdate/qube_connection.py Outdated
self.qube.shutdown()
if self._has_assigned_pci_devices(self.qube):
self.logger.info(
'Shutdown %s and wait for full shutdown '
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of saying "shutdown" twice, write: Waiting for full shutdown %s (PCI devices assigned)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed to 'Waiting for full shutdown %s (PCI devices assigned)

Comment thread vmupdate/qube_connection.py Outdated
self.logger.info(
'Shutdown %s and wait for full shutdown '
'(PCI devices assigned)', self.qube.name)
from vmupdate.vmupdate import shutdown_domains
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please don't import it here, import at the top of the module.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved shutdown_domains import to the top of the module.

@Jayant-kernel Jayant-kernel force-pushed the fix-vmupdate-wait-shutdown-pci branch from 54b3271 to 49ab0e1 Compare March 6, 2026 15:41
@Jayant-kernel Jayant-kernel requested a review from ben-grande March 6, 2026 16:06
@Jayant-kernel
Copy link
Copy Markdown
Author

@ben-grande
rereview it

@ben-grande
Copy link
Copy Markdown
Contributor

CI is failing:

Please wait for CI to complete before asking for review.

@Jayant-kernel Jayant-kernel force-pushed the fix-vmupdate-wait-shutdown-pci branch 2 times, most recently from 7626b55 to 4670c56 Compare March 9, 2026 18:22
Comment thread vmupdate/qube_connection.py Outdated
@Jayant-kernel Jayant-kernel force-pushed the fix-vmupdate-wait-shutdown-pci branch from 8fbf31a to 1961d75 Compare March 10, 2026 02:56
Move shutdown_domains, get_feature, get_boolean_feature, and is_stale
out of vmupdate.py into a new vmupdate/utils.py module. These functions
have no dependency on the CLI entry point and are useful from other
modules (e.g. qube_connection.py) without causing circular imports.

Update vmupdate.py and qube_connection.py to import from utils.
VMs with assigned PCI devices must be fully shut down before the next
update starts, because the hypervisor holds resources until shutdown
completes. Previously, qube_connection.py called vm.shutdown() and
moved on immediately, leaving PCI resources held.

Use shutdown_domains() from vmupdate.utils to issue a force shutdown
and wait for the domain to finish. Regular VMs (no PCI devices) are
unaffected and still use the fast non-blocking path.

Add unit tests covering:
- shutdown_domains is called and vm.shutdown is not for PCI VMs
- vm.shutdown is called and shutdown_domains is not for non-PCI VMs
- neither is called when the VM was already running before the update

Fixes: QubesOS/qubes-issues#10617
@Jayant-kernel Jayant-kernel force-pushed the fix-vmupdate-wait-shutdown-pci branch from 1961d75 to 4e03608 Compare March 28, 2026 02:13
@Jayant-kernel
Copy link
Copy Markdown
Author

@ben-grande @marmarek
PLease review it again

@qubesos-bot
Copy link
Copy Markdown

qubesos-bot commented Apr 17, 2026

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026042316-4.3&flavor=pull-requests

Test run included the following:

New failures, excluding unstable

Compared to: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026032404-devel&flavor=update

  • system_tests_whonix

    • whonixcheck: wait_serial (wait serial expected)
      # wait_serial expected: qr/ki5k_-\d+-/...
  • system_tests_basic_vm_qrexec_gui

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_debian-13-xfce: test_001_standalone_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_usbproxy

    • TC_20_USBProxy_core3_debian-13-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_basic_vm_qrexec_gui_zfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_audio@hw1

  • system_tests_qwt_win10@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'personal-text-editor'...
  • system_tests_qwt_win11@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Explorer-empt...
  • system_tests_guivm_gpu_gui_interactive@hw13

    • shutdown: unnamed test (unknown)
    • shutdown: Failed (test died)
      # Test died: no candidate needle with tag(s) 'text-logged-in-root' ...
  • system_tests_whonix@hw1

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

  • system_tests_basic_vm_qrexec_gui_btrfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_ext4

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_xfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui@hw7

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

Failed tests

43 failures
  • system_tests_whonix

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

    • whonixcheck: wait_serial (wait serial expected)
      # wait_serial expected: qr/ki5k_-\d+-/...

  • system_tests_basic_vm_qrexec_gui

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_debian-13-xfce: test_001_standalone_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_debian-13-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_debian-13-xfce: test_011_template_based_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_usbproxy

    • TC_20_USBProxy_core3_debian-13-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_basic_vm_qrexec_gui_zfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_audio@hw1

  • system_tests_qwt_win10@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'personal-text-editor'...
  • system_tests_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_qwt_win11@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Explorer-empt...
  • system_tests_guivm_gpu_gui_interactive@hw13

    • shutdown: unnamed test (unknown)
    • shutdown: Failed (test died)
      # Test died: no candidate needle with tag(s) 'text-logged-in-root' ...
  • system_tests_whonix@hw1

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

  • system_tests_basic_vm_qrexec_gui_btrfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_ext4

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_xfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui@hw7

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

Fixed failures

Compared to: https://openqa.qubes-os.org/tests/170766#dependencies

32 fixed
  • system_tests_network

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.network failed (exit code 1), details repor...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • VmNetworking_debian-13-xfce: test_203_fake_ip_inter_vm_allow (failure)
      ^... AssertionError: 1 != 0

  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_fedora-42-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-42-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_extra

    • system_tests: Fail (unknown)
      Tests qubes.tests.extra failed (exit code 1), details reported sepa...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_01_InputProxyExclude_debian-13-xfce: test_000_qemu_tablet (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/Dhelp-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_network_ipv6

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • VmIPv6Networking_fedora-42-xfce: test_113_reattach_after_provider_kill (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 1 != 0

  • system_tests_network_updates

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.dom0_update failed (exit code 1), details r...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_00_Dom0Upgrade_whonix-gateway-18: test_020_install_wrong_sign (error)
      subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

  • system_tests_kde_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/bMse8-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_guivm_vnc_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/C_fDy-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_audio

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.audio failed (exit code 1), details reporte...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_20_AudioVM_Pulse_whonix-workstation-18: test_225_audio_rec_unmuted_hvm (failure)
      AssertionError: too short audio, expected 10s, got 7.59433106575963...

    • TC_20_AudioVM_PipeWire_debian-13-xfce: test_251_audio_playback_audiovm_pipewire_late_start (failure)
      AssertionError: pacat for test-inst-vm1 (xid 48) running(False) in ...

  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_qwt_win11@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...

Unstable tests

Details
  • system_tests_guivm_vnc_gui_interactive

    collect_logs/Failed (1/5 times with errors)
    • job 172242 # Test died: command 'curl --form upload=@journalctl.log --form upn...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172242 # wait_serial expected: qr/73DgV-\d+-/...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172242 # wait_serial expected: qr/uOleL-\d+-/...
  • system_tests_guivm_gui_interactive

    collect_logs/Failed (1/5 times with errors)
    • job 172256 # Test died: command 'curl --form upload=@journalctl.log --form upn...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172256 # wait_serial expected: qr/v3Six-\d+-/...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172256 # wait_serial expected: qr/6OJPL-\d+-/...

Performance Tests

Performance degradation:

11 performance degradations
  • debian-13-xfce_exec: 8.47 🔻 ( previous job: 7.30, degradation: 116.01%)
  • debian-13-xfce_socket: 8.86 🔻 ( previous job: 8.02, degradation: 110.39%)
  • whonix-workstation-18_exec-data-duplex: 66.09 🔻 ( previous job: 59.45, degradation: 111.16%)
  • whonix-workstation-18_socket-data-duplex: 98.97 🔻 ( previous job: 80.77, degradation: 122.53%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 199809.00 🔻 ( previous job: 485002.00, degradation: 41.20%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 142294.00 🔻 ( previous job: 217546.00, degradation: 65.41%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 60295.00 🔻 ( previous job: 70705.00, degradation: 85.28%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 21157.00 🔻 ( previous job: 42537.00, degradation: 49.74%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 804.00 🔻 ( previous job: 3011.00, degradation: 26.70%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 47892.00 🔻 ( previous job: 233483.00, degradation: 20.51%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 7065.00 🔻 ( previous job: 8434.00, degradation: 83.77%)

Remaining performance tests:

100 tests
  • debian-13-xfce_exec-root: 26.82 🔻 ( previous job: 26.58, degradation: 100.92%)
  • debian-13-xfce_socket-root: 8.38 🟢 ( previous job: 8.38, improvement: 99.99%)
  • debian-13-xfce_exec-data-simplex: 64.97 🟢 ( previous job: 66.06, improvement: 98.35%)
  • debian-13-xfce_exec-data-duplex: 58.47 🟢 ( previous job: 61.22, improvement: 95.51%)
  • debian-13-xfce_exec-data-duplex-root: 73.46 🔻 ( previous job: 72.95, degradation: 100.69%)
  • debian-13-xfce_socket-data-duplex: 94.35 🔻 ( previous job: 86.03, degradation: 109.67%)
  • fedora-43-xfce_exec: 9.21
  • fedora-43-xfce_exec-root: 71.47
  • fedora-43-xfce_socket: 7.60
  • fedora-43-xfce_socket-root: 7.36
  • fedora-43-xfce_exec-data-simplex: 58.04
  • fedora-43-xfce_exec-data-duplex: 55.71
  • fedora-43-xfce_exec-data-duplex-root: 97.24
  • fedora-43-xfce_socket-data-duplex: 76.22
  • whonix-gateway-18_exec: 7.19 🟢 ( previous job: 7.69, improvement: 93.48%)
  • whonix-gateway-18_exec-root: 126.65 🟢 ( previous job: 132.16, improvement: 95.83%)
  • whonix-gateway-18_socket: 7.52 🟢 ( previous job: 8.05, improvement: 93.41%)
  • whonix-gateway-18_socket-root: 7.73 🔻 ( previous job: 7.16, degradation: 108.01%)
  • whonix-gateway-18_exec-data-simplex: 65.27 🔻 ( previous job: 64.40, degradation: 101.35%)
  • whonix-gateway-18_exec-data-duplex: 66.48 🔻 ( previous job: 63.65, degradation: 104.45%)
  • whonix-gateway-18_exec-data-duplex-root: 121.23 🟢 ( previous job: 123.30, improvement: 98.32%)
  • whonix-gateway-18_socket-data-duplex: 96.67 🟢 ( previous job: 113.72, improvement: 85.01%)
  • whonix-workstation-18_exec: 8.50 🔻 ( previous job: 8.20, degradation: 103.62%)
  • whonix-workstation-18_exec-root: 144.76 🔻 ( previous job: 138.84, degradation: 104.26%)
  • whonix-workstation-18_socket: 8.71 🔻 ( previous job: 8.19, degradation: 106.28%)
  • whonix-workstation-18_socket-root: 8.45 🟢 ( previous job: 8.92, improvement: 94.68%)
  • whonix-workstation-18_exec-data-simplex: 69.29 🔻 ( previous job: 63.54, degradation: 109.05%)
  • whonix-workstation-18_exec-data-duplex-root: 129.93 🟢 ( previous job: 139.63, improvement: 93.06%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 13813.00 🟢 ( previous job: 12342.00, improvement: 111.92%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 11996.00 🟢 ( previous job: 1182.00, improvement: 1014.89%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 1168.00 🟢 ( previous job: 793.00, improvement: 147.29%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 68674.00 🟢 ( previous job: 34913.00, improvement: 196.70%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 432224.00 🟢 ( previous job: 370521.00, improvement: 116.65%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 177446.00 🟢 ( previous job: 154458.00, improvement: 114.88%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 101747.00 🟢 ( previous job: 27602.00, improvement: 368.62%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7921.00 🟢 ( previous job: 7112.00, improvement: 111.38%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 4294.00 🔻 ( previous job: 4565.00, degradation: 94.06%)
  • fedora-43-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 303583.00
  • fedora-43-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 204312.00
  • fedora-43-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 327270.00
  • fedora-43-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 63260.00
  • fedora-43-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 88132.00
  • fedora-43-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 2164.00
  • fedora-43-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8169.00
  • fedora-43-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 669.00
  • fedora-43-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 413639.00
  • fedora-43-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 143003.00
  • fedora-43-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 281496.00
  • fedora-43-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 111597.00
  • fedora-43-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 71132.00
  • fedora-43-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 1578.00
  • fedora-43-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 8409.00
  • fedora-43-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 518.00
  • fedora-43-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 381161.00
  • fedora-43-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 74443.00
  • fedora-43-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 349176.00
  • fedora-43-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 86304.00
  • fedora-43-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 72969.00
  • fedora-43-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 1584.00
  • fedora-43-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 8272.00
  • fedora-43-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 788.00
  • debian-13-xfce_dom0-dispvm-api (mean:6.39): 76.68 🟢 ( previous job: 81.47, improvement: 94.12%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:7.732): 92.79 🔻 ( previous job: 92.38, degradation: 100.44%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.222): 38.67 🟢 ( previous job: 48.28, improvement: 80.09%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.809): 33.71 🟢 ( previous job: 44.34, improvement: 76.03%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.204): 38.45 🟢 ( previous job: 54.23, improvement: 70.90%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.291): 27.49 🟢 ( previous job: 40.37, improvement: 68.09%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.583): 30.99 🟢 ( previous job: 44.04, improvement: 70.38%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.424): 29.09 🟢 ( previous job: 45.36, improvement: 64.14%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.496): 53.95 🟢 ( previous job: 58.18, improvement: 92.73%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.838): 46.06 🔻 ( previous job: 43.54, degradation: 105.79%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.421): 41.05 🟢 ( previous job: 47.37, improvement: 86.66%)
  • debian-13-xfce_dom0-vm-api (mean:0.039): 0.47 🔻 ( previous job: 0.46, degradation: 102.40%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.042): 0.50 🟢 ( previous job: 0.51, improvement: 99.80%)
  • fedora-43-xfce_dom0-dispvm-api (mean:7.394): 88.73
  • fedora-43-xfce_dom0-dispvm-gui-api (mean:9.714): 116.57
  • fedora-43-xfce_dom0-dispvm-preload-2-api (mean:3.79): 45.49
  • fedora-43-xfce_dom0-dispvm-preload-2-delay-0-api (mean:3.587): 43.05
  • fedora-43-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.915): 46.98
  • fedora-43-xfce_dom0-dispvm-preload-4-api (mean:3.0): 36.00
  • fedora-43-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.741): 32.89
  • fedora-43-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.042): 36.51
  • fedora-43-xfce_dom0-dispvm-preload-2-gui-api (mean:5.331): 63.97
  • fedora-43-xfce_dom0-dispvm-preload-4-gui-api (mean:4.25): 51.01
  • fedora-43-xfce_dom0-dispvm-preload-6-gui-api (mean:3.688): 44.26
  • fedora-43-xfce_dom0-vm-api (mean:0.039): 0.47
  • fedora-43-xfce_dom0-vm-gui-api (mean:0.043): 0.52
  • whonix-workstation-18_dom0-dispvm-api (mean:8.259): 99.11 🟢 ( previous job: 114.77, improvement: 86.35%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:10.245): 122.94 🟢 ( previous job: 127.27, improvement: 96.59%)
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.193): 50.32 🟢 ( previous job: 70.96, improvement: 70.91%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:4.102): 49.23 🟢 ( previous job: 65.29, improvement: 75.40%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:5.013): 60.16 🟢 ( previous job: 74.32, improvement: 80.95%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.171): 38.06 🟢 ( previous job: 57.74, improvement: 65.91%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:3.494): 41.93 🟢 ( previous job: 65.76, improvement: 63.76%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.573): 42.87 🟢 ( previous job: 59.80, improvement: 71.69%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:5.992): 71.91 🟢 ( previous job: 78.19, improvement: 91.97%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:4.869): 58.43 🟢 ( previous job: 65.73, improvement: 88.90%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:3.848): 46.17 🟢 ( previous job: 61.35, improvement: 75.26%)
  • whonix-workstation-18_dom0-vm-api (mean:0.031): 0.37 🟢 ( previous job: 0.58, improvement: 63.89%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.046): 0.55 🟢 ( previous job: 0.62, improvement: 87.80%)

@ben-grande
Copy link
Copy Markdown
Contributor

Did not find errors on OpenQA related to this PR.

@Jayant-kernel Jayant-kernel force-pushed the fix-vmupdate-wait-shutdown-pci branch from d189954 to 060186e Compare April 27, 2026 17:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Qubes update cannot handle hvms with attached pci devices

5 participants