1
0

events: implicitly enable caching when creating EventsDispatcher

Application that runs EventsDispatcher can safely use also cache , which
greatly improve performance. This is because cache then is properly
updated/invalidated when needed.
Instead of modifying each application to explicitly enable cache based
on this simple rule, make it implicit when EventsDispatcher is created.

Do not enable caching when EventsDispatcher is created only temporarily
in wait_for_domain_shutdown.

QubesOS/qubes-issues#3293
Este cometimento está contido em:
Marek Marczykowski-Górecki 2020-05-18 04:28:01 +02:00
ascendente c081ed8c82
cometimento aea41511de
Não foi encontrada uma chave conhecida para esta assinatura, na base de dados
ID da chave GPG: 063938BA42CFA724
2 ficheiros modificados com 17 adições e 3 eliminações

Ver ficheiro

@ -31,8 +31,19 @@ import qubesadmin.exc
class EventsDispatcher(object):
''' Events dispatcher, responsible for receiving events and calling
appropriate handlers'''
def __init__(self, app, api_method='admin.Events'):
'''Initialize EventsDispatcher'''
def __init__(self, app, api_method='admin.Events', enable_cache=True):
"""Initialize EventsDispatcher
:param app :py:class:`qubesadmin.Qubes` object
:param api_method Admin API method producing events
:param enable_cache Enable caching (see below)
Connecting :py:class:`EventsDispatcher` object to a
:py:class:`qubesadmin.Qubes` implicitly enables caching. It is important
to actually run the dispatcher (:py:meth:`listen_for_events`), otherwise
the cache won't be updated. Alternatively, disable caching by setting
:py:attr:`qubesadmin.Qubes.cache_enabled` property to `False`.
"""
#: Qubes() object
self.app = app
@ -41,6 +52,9 @@ class EventsDispatcher(object):
#: event handlers - dict of event -> handlers
self.handlers = {}
if enable_cache:
self.app.cache_enabled = True
def add_handler(self, event, handler):
'''Register handler for event

Ver ficheiro

@ -57,7 +57,7 @@ def wait_for_domain_shutdown(vms):
return
app = list(vms)[0].app
vms = set(vms)
events = qubesadmin.events.EventsDispatcher(app)
events = qubesadmin.events.EventsDispatcher(app, enable_cache=False)
events.add_handler('domain-shutdown',
functools.partial(interrupt_on_vm_shutdown, vms))
events.add_handler('connection-established',