Skip to content

pdf-converter: stop conversion when Cancel is clicked in GUI#37

Merged
marmarek merged 3 commits into
QubesOS:mainfrom
Jayant-kernel:fix-pdf-convert-cancel-10274
Mar 29, 2026
Merged

pdf-converter: stop conversion when Cancel is clicked in GUI#37
marmarek merged 3 commits into
QubesOS:mainfrom
Jayant-kernel:fix-pdf-convert-cancel-10274

Conversation

@Jayant-kernel

Copy link
Copy Markdown
Contributor

Summary

Fix qvm-convert-pdf.gnome / client cancellation flow so clicking Cancel in the GUI progress dialog actually stops the active conversion job.

Problem

In QubesOS/qubes-issues#10274, canceling the Zenity dialog did not reliably stop the running conversion in the DispVM. The user-facing dialog closed, but backend conversion could continue in the background.

Changes

  • qvm-convert-pdf.gnome
    • Replace plain pipeline with explicit process tracking via FIFO.
    • Keep converter PID and send SIGTERM to qvm-convert-pdf when Zenity exits non-zero (Cancel).
  • qubespdfconverter/client.py
    • Handle both SIGINT and SIGTERM in async signal handlers.
    • Ensure qrexec-client-vm subprocess is terminated on CancelledError.
    • Fix failure cleanup condition (returncode is None) so running subprocesses are actually terminated.
  • qubespdfconverter/test_client.py
    • Add async unit tests covering cancellation cleanup, failure cleanup, and signal-handler registration.

Why this should fix the bug

GUI cancel now explicitly signals the converter process, and converter-side cancellation cleanup reliably tears down active qrexec subprocesses, which prevents lingering background conversion.

Validation

  • Ran unit tests locally:
    • python -m unittest qubespdfconverter.test_client
  • Full Qubes integration tests were not run in this environment.

Fixes QubesOS/qubes-issues#10274.

@Jayant-kernel

Jayant-kernel commented Mar 3, 2026

Copy link
Copy Markdown
Contributor Author

Could you please take a look when you have a moment?
I tried to keep this fix minimal and focused on the cancel path. Happy to adjust anything needed.

@marmarek

marmarek commented Mar 3, 2026

Copy link
Copy Markdown
Member

Full Qubes integration tests were not run in this environment.

I'll run them, no worries :)

But, can you try to add one for cancel too? For example copy test_002_500_pages, but call it as timeout --signal=INT 20s qvm-convert-pdf.... And then check if really conversion was interrupted - based on output file.

@marmarek

marmarek commented Mar 3, 2026

Copy link
Copy Markdown
Member

Maybe also check if dispvm got killed, for example collect list of qubes before the test (based on self.app.domains collection) and compare after - should be the same (no new dispvm remains)

Comment thread qvm-convert-pdf.gnome
/usr/bin/qvm-convert-pdf "$@" >"$fifo" &
converter_pid="$!"

zenity --progress --text="Converting PDF using Disposable VM..." --auto-close <"$fifo"

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.

Zenity is not declared as a dependency for all supported distros: https://github.com/search?q=repo%3AQubesOS%2Fqubes-app-linux-pdf-converter%20zenity&type=code

t would be nice to have it in a separate commit.

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.

Actually, "recommends" instead of "depends", to not require zenity on minimal system that wants to be a client of pdf conversion.

Comment thread qvm-convert-pdf.gnome Outdated
rm -f "$fifo"

if [ "$zenity_rc" -ne 0 ]; then
kill -TERM "$converter_pid" 2>/dev/null

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.

TERM is the default.

Why hide stderr of this kill?

Comment thread qvm-convert-pdf.gnome Outdated

if [ "$zenity_rc" -ne 0 ]; then
kill -TERM "$converter_pid" 2>/dev/null
wait "$converter_pid" 2>/dev/null

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.

Why hide stderr of this wait?

Comment thread qvm-convert-pdf.gnome Outdated
zenity --progress --text="Converting PDF using Disposable VM..." --auto-close <"$fifo"
zenity_rc="$?"

rm -f "$fifo"

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.

If playing with rm and variables, use -- and nounset:

set -u
...
rm -f -- "$fifo"

@Jayant-kernel Jayant-kernel force-pushed the fix-pdf-convert-cancel-10274 branch from 0318219 to bbb99ab Compare March 5, 2026 18:58
@Jayant-kernel

Copy link
Copy Markdown
Contributor Author

@ben-grande
Fixed the shell issues (set -u, rm --, dropped -TERM and the stderr redirections),
added zenity as Recommends in a separate commit, and added the cancel integration test.
Rereview it

@Jayant-kernel Jayant-kernel requested a review from ben-grande March 5, 2026 19:01
Comment thread debian/control
python3-tqdm,
${misc:Depends}
Recommends:
zenity

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.

And same in rpm_spec.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

added Recommends: zenity to rpm_spec/qpdf-converter.spec.in.

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.

There are two specs in that directory.

@@ -0,0 +1,73 @@
#!/usr/bin/python3

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 file should be inside /tests/

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Moved the test_client.py is now at qubespdfconverter/tests/test_client.py.

@Jayant-kernel Jayant-kernel requested a review from ben-grande March 6, 2026 14:48
@ben-grande

ben-grande commented Mar 13, 2026

Copy link
Copy Markdown
Contributor

Can you test this on Qubes OS? I don't mean running the tests, but interacting with the tool via GUI and CLI.

@marmarek marmarek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Manual interaction with this works fine now (both canceling in CLI and GUI seems to work). But unfortunately automated tests fails:

Comment thread qubespdfconverter/tests/__init__.py Outdated
self.vm.run('test -r test.trusted.pdf', wait=True), 0,
'trusted pdf should not exist after cancel')
domains_after = set(self.app.domains)
self.assertEqual(domains_before, domains_after,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Unfortunately it fails right now, I think dispvm needs a bit of time to be cleaned up. When I add self.loop.run_until_complete(asyncio.sleep(5)) (and also import asyncio) just before this line, it works, but it isn't nice...
The trick here is to balance:

  • detecting if dispvm really got killed, instead of simply completing conversion in the background
  • not failing if dispvm cleanup takes some more time

5s works on my system (according to logs, even 1s might be enough), but it isn't always guaranteed, especially on slower systems. On the other hand, the earlier test for converting 500 pages fully takes just above 1m30s on the same system, and 20s of that time is already waited before cancelling conversion here, so can't wait too long, to detect the first point above.

Hm, if I read the logs correctly, it doesn't even need to wait for the dispvm cleanup to complete - if dispvm cleanup just starts, the VM is not listed anymore. So, maybe 5s isn't really that bad? It isn't long enough to guarantee complete dispvm cleanup, but should be long enough to for cleanup process to start. And surely 5s is not long enough to complete conversion of 500 pages.

@ben-grande do you have some better ideas?
Otherwise, @Jayant-kernel can you add the proposed sleep here? I'd run it a few times through our CI to see if it passes reliably there.

@ben-grande

ben-grande commented Mar 15, 2026 via email

Copy link
Copy Markdown
Contributor

@Jayant-kernel Jayant-kernel force-pushed the fix-pdf-convert-cancel-10274 branch from d95c3af to 3fa0dcb Compare March 27, 2026 08:09
@Jayant-kernel

Copy link
Copy Markdown
Contributor Author

@ben-grande @marmarek
please review it

@ben-grande

Copy link
Copy Markdown
Contributor

Please cleanup commit history.

Replace the pipeline in qvm-convert-pdf.gnome with explicit process
tracking via a FIFO. Store the converter PID and send SIGTERM when
zenity exits non-zero (user clicked Cancel), then wait for it to exit.

Handle both SIGINT and SIGTERM in the async signal handler so the
converter responds to either signal. Fix the subprocess cleanup
condition (returncode is None means still running) to ensure qrexec
subprocesses are always terminated on CancelledError or failure.

Fixes QubesOS/qubes-issues#10274
zenity is needed by qvm-convert-pdf.gnome for the progress dialog.
Use Recommends (not Depends) so minimal client-only installs are not
forced to pull in a GUI toolkit. Added to both debian/control and
rpm_spec/qpdf-converter.spec.in.
@Jayant-kernel Jayant-kernel force-pushed the fix-pdf-convert-cancel-10274 branch from 3fa0dcb to 1a05c11 Compare March 27, 2026 20:33
@Jayant-kernel

Copy link
Copy Markdown
Contributor Author

@marmarek
All previous review feedback has been addressed and commit history is cleaned to 3 commits:

The main fix (gnome script FIFO + signal handling)
Packaging (zenity Recommends in deb + rpm)
Tests — test_004_cancel_stops_conversion now polls self.app.domains up to 10s (1s intervals)

Could you re-run CI to verify the test passes reliably?

Add test_004_cancel_stops_conversion: sends SIGINT after 20 seconds
into a 500-page conversion, verifies the output file was not created,
and polls up to 10s for the DispVM to disappear from self.app.domains.
DispVM cleanup in dom0 is asynchronous, so a polling loop is used
instead of an immediate check (mirrors qubes-core-admin pattern).

Add unit tests for the SIGINT/SIGTERM handling in client.py.
@Jayant-kernel Jayant-kernel force-pushed the fix-pdf-convert-cancel-10274 branch from 1a05c11 to befc310 Compare March 28, 2026 02:28
@Jayant-kernel

Copy link
Copy Markdown
Contributor Author

@marmarek @ben-grande
CI failure: transient Arch mirror 404 (pandoc-cli), not a code issue its a retriggered pipeline issue

@qubesos-bot

qubesos-bot commented Mar 28, 2026

Copy link
Copy Markdown

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026032905-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@hw1

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

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

  • system_tests_gui_tools

    • qui_widgets_update: unnamed test (unknown)

    • qui_widgets_update: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-update-deselect...

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

  • system_tests_pvgrub_salt_storage

  • system_tests_splitgpg

    • TC_00_Direct_debian-13-xfce: test_041_import_via_wrapper (failure)
      AssertionError: 1 != 0 : Failed to import key: 2026-03-29 09:11:52....
  • system_tests_network_updates

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

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

  • system_tests_dispvm

    • TC_21_DispVM_Preload: test_015_preload_race_more (error)
      raise TimeoutError from exc_val... TimeoutError

    • TC_20_DispVM_debian-13-xfce: test_010_dvm_run_simple (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_013_preload_gui (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_014_preload_nogui (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_080_gui_app (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_090_edit_file (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_100_open_in_dispvm (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_010_dvm_run_simple (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_013_preload_gui (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_014_preload_nogui (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_080_gui_app (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_090_edit_file (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_100_open_in_dispvm (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_whonix-workstation-18: test_010_dvm_run_simple (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_013_preload_gui (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_014_preload_nogui (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_080_gui_app (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_090_edit_file (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_100_open_in_dispvm (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

  • system_tests_dispvm_perf@hw7

  • system_tests_gui_tools@hw7

    • qui_widgets_update: unnamed test (unknown)
    • qui_widgets_update: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-update-deselect...
  • system_tests_qwt_win10_seamless@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Edge-address-...
  • 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-apps-features...

Failed tests

50 failures
  • system_tests_whonix@hw1

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

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

  • system_tests_whonix

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

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

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

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

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

  • system_tests_gui_tools

    • qui_widgets_update: unnamed test (unknown)

    • qui_widgets_update: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-update-deselect...

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

  • system_tests_pvgrub_salt_storage

  • system_tests_splitgpg

    • TC_00_Direct_debian-13-xfce: test_041_import_via_wrapper (failure)
      AssertionError: 1 != 0 : Failed to import key: 2026-03-29 09:11:52....
  • system_tests_network_updates

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

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

  • system_tests_dispvm

    • TC_21_DispVM_Preload: test_015_preload_race_more (error)
      raise TimeoutError from exc_val... TimeoutError

    • TC_20_DispVM_debian-13-xfce: test_010_dvm_run_simple (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_013_preload_gui (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_014_preload_nogui (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_080_gui_app (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_090_edit_file (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_debian-13-xfce: test_100_open_in_dispvm (error)
      AttributeError: 'TC_20_DispVM_debian-13-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_010_dvm_run_simple (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_013_preload_gui (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_014_preload_nogui (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_080_gui_app (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_090_edit_file (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_fedora-42-xfce: test_100_open_in_dispvm (error)
      AttributeError: 'TC_20_DispVM_fedora-42-xfce' object has no attribu...

    • TC_20_DispVM_whonix-workstation-18: test_010_dvm_run_simple (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_013_preload_gui (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_014_preload_nogui (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_080_gui_app (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_090_edit_file (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

    • TC_20_DispVM_whonix-workstation-18: test_100_open_in_dispvm (error)
      AttributeError: 'TC_20_DispVM_whonix-workstation-18' object has no ...

  • system_tests_dispvm_perf@hw7

  • system_tests_gui_tools@hw7

    • qui_widgets_update: unnamed test (unknown)
    • qui_widgets_update: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-update-deselect...
  • 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_win10_seamless@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Edge-address-...
  • 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-apps-features...

Fixed failures

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

30 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

    • 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_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_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...

Unstable tests

Details

Performance Tests

Performance degradation:

16 performance degradations
  • debian-13-xfce_exec: 8.31 🔻 ( previous job: 7.30, degradation: 113.80%)
  • debian-13-xfce_exec-data-duplex: 70.79 🔻 ( previous job: 61.22, degradation: 115.63%)
  • whonix-gateway-18_exec-data-duplex: 71.70 🔻 ( previous job: 63.65, degradation: 112.65%)
  • whonix-workstation-18_exec-data-duplex: 69.26 🔻 ( previous job: 59.45, degradation: 116.49%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 383251.00 🔻 ( previous job: 485002.00, degradation: 79.02%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 627.00 🔻 ( previous job: 793.00, degradation: 79.07%)
  • fedora-42-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 376508.00 🔻 ( previous job: 429744.00, degradation: 87.61%)
  • fedora-42-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 1230.00 🔻 ( previous job: 1799.00, degradation: 68.37%)
  • fedora-42-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 549.00 🔻 ( previous job: 808.00, degradation: 67.95%)
  • fedora-42-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 258079.00 🔻 ( previous job: 386785.00, degradation: 66.72%)
  • fedora-42-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 50427.00 🔻 ( previous job: 73186.00, degradation: 68.90%)
  • fedora-42-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 236485.00 🔻 ( previous job: 339454.00, degradation: 69.67%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 77539.00 🔻 ( previous job: 95629.00, degradation: 81.08%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 1872.00 🔻 ( previous job: 4272.00, degradation: 43.82%)
  • fedora-42-xfce_dom0-dispvm-preload-6-gui-api (mean:4.172): 50.06 🔻 ( previous job: 44.96, degradation: 111.36%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.057): 0.69 🔻 ( previous job: 0.62, degradation: 110.11%)

Remaining performance tests:

88 tests
  • debian-13-xfce_exec-root: 26.24 🟢 ( previous job: 26.58, improvement: 98.72%)
  • debian-13-xfce_socket: 8.72 🔻 ( previous job: 8.02, degradation: 108.64%)
  • debian-13-xfce_socket-root: 9.15 🔻 ( previous job: 8.38, degradation: 109.11%)
  • debian-13-xfce_exec-data-simplex: 64.00 🟢 ( previous job: 66.06, improvement: 96.87%)
  • debian-13-xfce_exec-data-duplex-root: 73.15 🔻 ( previous job: 72.95, degradation: 100.27%)
  • debian-13-xfce_socket-data-duplex: 76.18 🟢 ( previous job: 86.03, improvement: 88.55%)
  • fedora-42-xfce_exec: 8.98 🟢 ( previous job: 9.09, improvement: 98.80%)
  • fedora-42-xfce_exec-root: 61.02 🔻 ( previous job: 58.88, degradation: 103.64%)
  • fedora-42-xfce_socket: 8.14 🟢 ( previous job: 8.48, improvement: 95.97%)
  • fedora-42-xfce_socket-root: 7.87 🟢 ( previous job: 8.67, improvement: 90.77%)
  • fedora-42-xfce_exec-data-simplex: 63.18 🔻 ( previous job: 61.42, degradation: 102.86%)
  • fedora-42-xfce_exec-data-duplex: 57.78 🟢 ( previous job: 65.12, improvement: 88.73%)
  • fedora-42-xfce_exec-data-duplex-root: 84.87 🟢 ( previous job: 85.37, improvement: 99.42%)
  • fedora-42-xfce_socket-data-duplex: 84.95 🔻 ( previous job: 84.37, degradation: 100.68%)
  • whonix-gateway-18_exec: 8.07 🔻 ( previous job: 7.69, degradation: 104.92%)
  • whonix-gateway-18_exec-root: 133.87 🔻 ( previous job: 132.16, degradation: 101.29%)
  • whonix-gateway-18_socket: 7.39 🟢 ( previous job: 8.05, improvement: 91.80%)
  • whonix-gateway-18_socket-root: 7.48 🔻 ( previous job: 7.16, degradation: 104.58%)
  • whonix-gateway-18_exec-data-simplex: 66.20 🔻 ( previous job: 64.40, degradation: 102.79%)
  • whonix-gateway-18_exec-data-duplex-root: 132.85 🔻 ( previous job: 123.30, degradation: 107.75%)
  • whonix-gateway-18_socket-data-duplex: 102.16 🟢 ( previous job: 113.72, improvement: 89.84%)
  • whonix-workstation-18_exec: 8.38 🔻 ( previous job: 8.20, degradation: 102.18%)
  • whonix-workstation-18_exec-root: 140.74 🔻 ( previous job: 138.84, degradation: 101.37%)
  • whonix-workstation-18_socket: 8.99 🔻 ( previous job: 8.19, degradation: 109.73%)
  • whonix-workstation-18_socket-root: 7.99 🟢 ( previous job: 8.92, improvement: 89.55%)
  • whonix-workstation-18_exec-data-simplex: 63.90 🔻 ( previous job: 63.54, degradation: 100.56%)
  • whonix-workstation-18_exec-data-duplex-root: 132.48 🟢 ( previous job: 139.63, improvement: 94.88%)
  • whonix-workstation-18_socket-data-duplex: 78.73 🟢 ( previous job: 80.77, improvement: 97.47%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 257445.00 🟢 ( previous job: 217546.00, improvement: 118.34%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 373823.00 🟢 ( previous job: 70705.00, improvement: 528.71%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 180140.00 🟢 ( previous job: 42537.00, improvement: 423.49%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 106676.00 🟢 ( previous job: 12342.00, improvement: 864.33%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 5877.00 🟢 ( previous job: 3011.00, improvement: 195.18%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8511.00 🟢 ( previous job: 1182.00, improvement: 720.05%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 502914.00 🟢 ( previous job: 233483.00, improvement: 215.40%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 272357.00 🟢 ( previous job: 34913.00, improvement: 780.10%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 428690.00 🟢 ( previous job: 370521.00, improvement: 115.70%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 194735.00 🟢 ( previous job: 154458.00, improvement: 126.08%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 108340.00 🟢 ( previous job: 27602.00, improvement: 392.51%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 10091.00 🟢 ( previous job: 8434.00, improvement: 119.65%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7871.00 🟢 ( previous job: 7112.00, improvement: 110.67%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 5078.00 🟢 ( previous job: 4565.00, improvement: 111.24%)
  • fedora-42-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 135348.00 🟢 ( previous job: 82944.00, improvement: 163.18%)
  • fedora-42-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 321846.00 🔻 ( previous job: 337488.00, degradation: 95.37%)
  • fedora-42-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 45786.00 🟢 ( previous job: 28744.00, improvement: 159.29%)
  • fedora-42-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 94885.00 🟢 ( previous job: 82654.00, improvement: 114.80%)
  • fedora-42-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8862.00 🔻 ( previous job: 8983.00, degradation: 98.65%)
  • fedora-42-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 141569.00 🟢 ( previous job: 120146.00, improvement: 117.83%)
  • fedora-42-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 350811.00 🟢 ( previous job: 344699.00, improvement: 101.77%)
  • fedora-42-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 80850.00 🔻 ( previous job: 85237.00, degradation: 94.85%)
  • fedora-42-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 2588.00 🟢 ( previous job: 2529.00, improvement: 102.33%)
  • fedora-42-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 10043.00 🟢 ( previous job: 8072.00, improvement: 124.42%)
  • fedora-42-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 1275.00 🟢 ( previous job: 1142.00, improvement: 111.65%)
  • fedora-42-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 369737.00 🔻 ( previous job: 378820.00, degradation: 97.60%)
  • fedora-42-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 163766.00 🟢 ( previous job: 98064.00, improvement: 167.00%)
  • fedora-42-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 78533.00 🟢 ( previous job: 28807.00, improvement: 272.62%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 8688.00 🟢 ( previous job: 8294.00, improvement: 104.75%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 1408.00 🔻 ( previous job: 1434.00, degradation: 98.19%)
  • debian-13-xfce_dom0-dispvm-api (mean:6.294): 75.53 🟢 ( previous job: 81.47, improvement: 92.71%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:7.943): 95.32 🔻 ( previous job: 92.38, degradation: 103.18%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.318): 39.82 🟢 ( previous job: 48.28, improvement: 82.47%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.977): 35.72 🟢 ( previous job: 44.34, improvement: 80.56%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.186): 38.23 🟢 ( previous job: 54.23, improvement: 70.50%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.236): 26.83 🟢 ( previous job: 40.37, improvement: 66.45%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.382): 28.59 🟢 ( previous job: 44.04, improvement: 64.92%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.421): 29.05 🟢 ( previous job: 45.36, improvement: 64.05%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.534): 54.41 🟢 ( previous job: 58.18, improvement: 93.52%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.513): 42.16 🟢 ( previous job: 43.54, improvement: 96.81%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.313): 39.75 🟢 ( previous job: 47.37, improvement: 83.91%)
  • debian-13-xfce_dom0-vm-api (mean:0.04): 0.48 🔻 ( previous job: 0.46, degradation: 105.23%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.037): 0.44 🟢 ( previous job: 0.51, improvement: 87.33%)
  • fedora-42-xfce_dom0-dispvm-gui-api (mean:8.406): 100.88 🟢 ( previous job: 101.79, improvement: 99.11%)
  • fedora-42-xfce_dom0-dispvm-preload-2-gui-api (mean:4.811): 57.73 🟢 ( previous job: 62.91, improvement: 91.77%)
  • fedora-42-xfce_dom0-dispvm-preload-4-gui-api (mean:4.446): 53.35 🔻 ( previous job: 51.39, degradation: 103.82%)
  • fedora-42-xfce_dom0-vm-api (mean:0.038): 0.46 🔻 ( previous job: 0.43, degradation: 106.25%)
  • fedora-42-xfce_dom0-vm-gui-api (mean:0.04): 0.48 🔻 ( previous job: 0.46, degradation: 105.69%)
  • whonix-workstation-18_dom0-dispvm-api (mean:8.004): 96.05 🟢 ( previous job: 114.77, improvement: 83.69%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:10.036): 120.43 🟢 ( previous job: 127.27, improvement: 94.62%)
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.177): 50.12 🟢 ( previous job: 70.96, improvement: 70.63%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:3.935): 47.22 🟢 ( previous job: 65.29, improvement: 72.32%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:4.774): 57.29 🟢 ( previous job: 74.32, improvement: 77.09%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.341): 40.09 🟢 ( previous job: 57.74, improvement: 69.43%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:3.458): 41.49 🟢 ( previous job: 65.76, improvement: 63.10%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.514): 42.16 🟢 ( previous job: 59.80, improvement: 70.51%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:5.982): 71.78 🟢 ( previous job: 78.19, improvement: 91.80%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:4.466): 53.59 🟢 ( previous job: 65.73, improvement: 81.53%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:3.985): 47.82 🟢 ( previous job: 61.35, improvement: 77.94%)
  • whonix-workstation-18_dom0-vm-api (mean:0.05): 0.60 🔻 ( previous job: 0.58, degradation: 103.65%)

@Jayant-kernel

Copy link
Copy Markdown
Contributor Author

@marmarek @ben-grande
all previous feedback is addressed, CI is green, and the OpenQA failures are unrelated to this PR. Could you do a final pass?

@marmarek marmarek merged commit befc310 into QubesOS:main Mar 29, 2026
2 of 3 checks passed
@ben-grande

Copy link
Copy Markdown
Contributor

@ben-grande

Copy link
Copy Markdown
Contributor

Still happening for Fedora: https://openqa.qubes-os.org/tests/173065#step/TC_00_PDFConverter_fedora-43-xfce/5

It's probably because the template shutdown is too slow. It is skipped on Whonix, but probably would require more time. Since there is no PR, I will make one that extends the time to twenty seconds.

ben-grande added a commit to ben-grande/qubes-app-linux-pdf-converter that referenced this pull request Apr 17, 2026
OpenQA tests passes on Debian but not on Fedora, therefore, increase the
timeout by a bit.

Fixes: QubesOS/qubes-issues#10274
For: QubesOS#37
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.

"Convert in disposable qube" action for PDF files does not actually stop the conversion if one clicks "Cancel"

4 participants