Skip to content

Commit 4bb6e66

Browse files
committed
Skip events from mixins when unnecessary
Mixins are loaded to other classes, which means that these events are called on a varied number of qubes even when it is unnecessary.
1 parent bb52c10 commit 4bb6e66

3 files changed

Lines changed: 20 additions & 12 deletions

File tree

qubes/tests/vm/qubesvm.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2457,8 +2457,6 @@ def test_620_qdb_standalone(
24572457
"/qubes-iptables-header": iptables_header,
24582458
"/qubes-service/qubes-update-check": "0",
24592459
"/qubes-service/meminfo-writer": "1",
2460-
"/connected-ips": "",
2461-
"/connected-ips6": "",
24622460
}
24632461

24642462
self.assertEqual(test_qubesdb.data, data)
@@ -2550,8 +2548,6 @@ def test_621_qdb_vm_with_network(
25502548
"/qubes-gui-enabled": "False",
25512549
"/qubes-primary-dns": "10.139.1.1",
25522550
"/qubes-secondary-dns": "10.139.1.2",
2553-
"/connected-ips": "",
2554-
"/connected-ips6": "",
25552551
}
25562552

25572553
with self.subTest("ipv4"):
@@ -2608,6 +2604,7 @@ def test_621_qdb_vm_with_network(
26082604
expected["/qubes-firewall/10.137.0.3/0000"] = "action=accept"
26092605
expected["/qubes-firewall/10.137.0.3/policy"] = "drop"
26102606
expected["/connected-ips"] = "10.137.0.3"
2607+
expected["/connected-ips6"] = ""
26112608

26122609
with unittest.mock.patch(
26132610
"qubes.vm.qubesvm.QubesVM.is_running", lambda _: True
@@ -2691,8 +2688,6 @@ def test_622_qdb_guivm_keyboard_layout(
26912688
"/qubes-iptables-header": unittest.mock.ANY,
26922689
"/qubes-service/qubes-update-check": "0",
26932690
"/qubes-service/meminfo-writer": "1",
2694-
"/connected-ips": "",
2695-
"/connected-ips6": "",
26962691
},
26972692
)
26982693

@@ -2750,8 +2745,6 @@ def test_623_qdb_audiovm(self, mock_qubesdb, mock_urandom, mock_timezone):
27502745
"/qubes-iptables-header": unittest.mock.ANY,
27512746
"/qubes-service/qubes-update-check": "0",
27522747
"/qubes-service/meminfo-writer": "1",
2753-
"/connected-ips": "",
2754-
"/connected-ips6": "",
27552748
},
27562749
)
27572750

@@ -2820,8 +2813,6 @@ def test_624_qdb_audiovm_change_to_new_and_none(
28202813
"/qubes-iptables-header": unittest.mock.ANY,
28212814
"/qubes-service/qubes-update-check": "0",
28222815
"/qubes-service/meminfo-writer": "1",
2823-
"/connected-ips": "",
2824-
"/connected-ips6": "",
28252816
}
28262817

28272818
with self.subTest("default"):
@@ -2926,8 +2917,6 @@ def test_626_qdb_keyboard_layout_change(
29262917
"/qubes-iptables-header": unittest.mock.ANY,
29272918
"/qubes-service/qubes-update-check": "0",
29282919
"/qubes-service/meminfo-writer": "1",
2929-
"/connected-ips": "",
2930-
"/connected-ips6": "",
29312920
}
29322921

29332922
with self.subTest("default"):

qubes/vm/mix/dvmtemplate.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ def on_domain_loaded(self, event) -> None:
6262
"""
6363
# pylint: disable=unused-argument
6464
assert isinstance(self, qubes.vm.BaseVM)
65+
if not getattr(self, "template_for_dispvms"):
66+
return
6567
changes = False
6668
# Began preloading, host rebooted, autostart script didn't run yet.
6769
old_preload = self.get_feat_preload()
@@ -131,6 +133,8 @@ def __on_domain_pre_start(self, event, **kwargs) -> None:
131133
@qubes.events.handler("domain-remove-from-disk")
132134
async def on_dvmtemplate_remove_from_disk(self, event, **kwargs):
133135
# pylint: disable=unused-argument
136+
if not getattr(self, "template_for_dispvms"):
137+
return
134138
preloads = [disp for disp in self.dispvms if disp.is_preload]
135139
if not preloads:
136140
return
@@ -148,13 +152,17 @@ async def on_dvmtemplate_domain_shutdown(self, _event, **_kwargs) -> None:
148152
"""
149153
Refresh preloaded disposables on shutdown.
150154
"""
155+
if not getattr(self, "template_for_dispvms"):
156+
return
151157
self.refresh_outdated_preload()
152158

153159
@qubes.events.handler("property-reset:*", "property-set:*")
154160
def on_dvmtemplate_property_changed(self, _event, name, **_kwargs) -> None:
155161
"""
156162
Refresh preloaded disposables if property affects the disposable.
157163
"""
164+
if not getattr(self, "template_for_dispvms"):
165+
return
158166
if name not in qubes.vm.dispvm.PRELOAD_OUTDATED_IGNORED_PROPERTIES:
159167
self.refresh_outdated_preload(delay=30)
160168

@@ -407,6 +415,8 @@ def __on_pre_property_set_template(
407415
property.
408416
"""
409417
# pylint: disable=unused-argument
418+
if not getattr(self, "template_for_dispvms"):
419+
return
410420
if newvalue == oldvalue:
411421
return
412422
dependencies = [

qubes/vm/mix/net.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ def on_domain_load_netvm_loop_check(self, event):
294294
# pylint: disable=unused-argument
295295
# make sure there are no netvm loops - which could cause qubesd
296296
# looping infinitely
297+
if not self.netvm:
298+
return
297299
if self is self.netvm:
298300
self.log.error(
299301
"vm '%s' network-connected to itself, breaking the "
@@ -338,6 +340,9 @@ async def on_domain_started_net(self, event, **kwargs):
338340
if self.netvm:
339341
self.netvm.reload_firewall_for_vm(self) # pylint: disable=no-member
340342

343+
if not self.provides_network:
344+
return
345+
341346
for vm in self.connected_vms:
342347
if not vm.is_running() or vm.is_paused():
343348
continue
@@ -409,6 +414,8 @@ def on_domain_pre_shutdown(self, event, force=False):
409414
If `force` is `True` tries to detach network interfaces of connected
410415
vms
411416
""" # pylint: disable=unused-argument
417+
if not self.provides_network:
418+
return
412419

413420
connected_vms = [
414421
vm
@@ -741,6 +748,8 @@ def on_property_set_provides(self, _event, name, newvalue, oldvalue=None):
741748
def on_domain_qdb_create(self, event):
742749
"""Fills the QubesDB with firewall entries."""
743750
# pylint: disable=unused-argument
751+
if not self.provides_network:
752+
return
744753

745754
# Keep the following in sync with on_firewall_changed.
746755
self.reload_connected_ips()

0 commit comments

Comments
 (0)