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
This commit is contained in:
parent
c081ed8c82
commit
aea41511de
@ -31,8 +31,19 @@ import qubesadmin.exc
|
|||||||
class EventsDispatcher(object):
|
class EventsDispatcher(object):
|
||||||
''' Events dispatcher, responsible for receiving events and calling
|
''' Events dispatcher, responsible for receiving events and calling
|
||||||
appropriate handlers'''
|
appropriate handlers'''
|
||||||
def __init__(self, app, api_method='admin.Events'):
|
def __init__(self, app, api_method='admin.Events', enable_cache=True):
|
||||||
'''Initialize EventsDispatcher'''
|
"""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
|
#: Qubes() object
|
||||||
self.app = app
|
self.app = app
|
||||||
|
|
||||||
@ -41,6 +52,9 @@ class EventsDispatcher(object):
|
|||||||
#: event handlers - dict of event -> handlers
|
#: event handlers - dict of event -> handlers
|
||||||
self.handlers = {}
|
self.handlers = {}
|
||||||
|
|
||||||
|
if enable_cache:
|
||||||
|
self.app.cache_enabled = True
|
||||||
|
|
||||||
def add_handler(self, event, handler):
|
def add_handler(self, event, handler):
|
||||||
'''Register handler for event
|
'''Register handler for event
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ def wait_for_domain_shutdown(vms):
|
|||||||
return
|
return
|
||||||
app = list(vms)[0].app
|
app = list(vms)[0].app
|
||||||
vms = set(vms)
|
vms = set(vms)
|
||||||
events = qubesadmin.events.EventsDispatcher(app)
|
events = qubesadmin.events.EventsDispatcher(app, enable_cache=False)
|
||||||
events.add_handler('domain-shutdown',
|
events.add_handler('domain-shutdown',
|
||||||
functools.partial(interrupt_on_vm_shutdown, vms))
|
functools.partial(interrupt_on_vm_shutdown, vms))
|
||||||
events.add_handler('connection-established',
|
events.add_handler('connection-established',
|
||||||
|
Loading…
Reference in New Issue
Block a user