mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
connection: Hook into domain balloon event (bz 1081424)
This commit is contained in:
parent
89c45af26d
commit
adf3545671
@ -99,9 +99,9 @@ class vmmConnection(vmmGObject):
|
|||||||
self._nodedev_capable = None
|
self._nodedev_capable = None
|
||||||
|
|
||||||
self.using_domain_events = False
|
self.using_domain_events = False
|
||||||
self._domain_cb_id = None
|
self._domain_cb_ids = []
|
||||||
self.using_network_events = False
|
self.using_network_events = False
|
||||||
self._network_cb_id = None
|
self._network_cb_ids = []
|
||||||
|
|
||||||
self._xml_flags = {}
|
self._xml_flags = {}
|
||||||
|
|
||||||
@ -840,6 +840,16 @@ class vmmConnection(vmmGObject):
|
|||||||
# event driven setup is hard, so we end up doing more polling than
|
# event driven setup is hard, so we end up doing more polling than
|
||||||
# necessary on most events.
|
# necessary on most events.
|
||||||
|
|
||||||
|
def _domain_xml_misc_event(self, conn, domain, *args):
|
||||||
|
# Just trigger a domain XML refresh for hotplug type events
|
||||||
|
ignore = conn
|
||||||
|
ignore = args
|
||||||
|
|
||||||
|
obj = self.vms.get(domain.UUIDString(), None)
|
||||||
|
if not obj:
|
||||||
|
return
|
||||||
|
self.idle_add(obj.refresh_xml, True)
|
||||||
|
|
||||||
def _domain_lifecycle_event(self, conn, domain, event, reason, userdata):
|
def _domain_lifecycle_event(self, conn, domain, event, reason, userdata):
|
||||||
ignore = conn
|
ignore = conn
|
||||||
ignore = reason
|
ignore = reason
|
||||||
@ -872,19 +882,41 @@ class vmmConnection(vmmGObject):
|
|||||||
|
|
||||||
def _add_conn_events(self):
|
def _add_conn_events(self):
|
||||||
try:
|
try:
|
||||||
self._domain_cb_id = self.get_backend().domainEventRegisterAny(
|
self._domain_cb_ids.append(
|
||||||
|
self.get_backend().domainEventRegisterAny(
|
||||||
None, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE,
|
None, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE,
|
||||||
self._domain_lifecycle_event, None)
|
self._domain_lifecycle_event, None))
|
||||||
self.using_domain_events = True
|
self.using_domain_events = True
|
||||||
logging.debug("Using domain events")
|
logging.debug("Using domain events")
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.using_domain_events = False
|
self.using_domain_events = False
|
||||||
logging.debug("Error registering domain events: %s", e)
|
logging.debug("Error registering domain events: %s", e)
|
||||||
|
|
||||||
|
def _add_domain_xml_event(eventid, typestr):
|
||||||
|
if not self.using_domain_events:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
self._domain_cb_ids.append(
|
||||||
|
self.get_backend().domainEventRegisterAny(
|
||||||
|
None, eventid, self._domain_xml_misc_event, None))
|
||||||
|
except Exception, e:
|
||||||
|
logging.debug("Error registering domain %s event: %s",
|
||||||
|
typestr, e)
|
||||||
|
|
||||||
|
_add_domain_xml_event(
|
||||||
|
getattr(libvirt, "VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE", 13),
|
||||||
|
"balloon")
|
||||||
|
_add_domain_xml_event(
|
||||||
|
getattr(libvirt, "VIR_DOMAIN_EVENT_ID_TRAY_CHANGE", 10), "tray")
|
||||||
|
_add_domain_xml_event(
|
||||||
|
getattr(libvirt, "VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED", 15),
|
||||||
|
"device removed")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
eventid = getattr(libvirt, "VIR_NETWORK_EVENT_ID_LIFECYCLE", 0)
|
eventid = getattr(libvirt, "VIR_NETWORK_EVENT_ID_LIFECYCLE", 0)
|
||||||
self._network_cb_id = self.get_backend().networkEventRegisterAny(
|
self._network_cb_ids.append(
|
||||||
None, eventid, self._network_lifecycle_event, None)
|
self.get_backend().networkEventRegisterAny(
|
||||||
|
None, eventid, self._network_lifecycle_event, None))
|
||||||
self.using_network_events = True
|
self.using_network_events = True
|
||||||
logging.debug("Using network events")
|
logging.debug("Using network events")
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
@ -936,15 +968,13 @@ class vmmConnection(vmmGObject):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if not self._backend.is_closed():
|
if not self._backend.is_closed():
|
||||||
if self._domain_cb_id is not None:
|
for eid in self._domain_cb_ids:
|
||||||
self._backend.domainEventDeregisterAny(
|
self._backend.domainEventDeregisterAny(eid)
|
||||||
self._domain_cb_id)
|
self._domain_cb_ids = []
|
||||||
self._domain_cb_id = None
|
|
||||||
|
|
||||||
if self._network_cb_id is not None:
|
for eid in self._network_cb_ids:
|
||||||
self._backend.networkEventDeregisterAny(
|
self._backend.networkEventDeregisterAny(eid)
|
||||||
self._network_cb_id)
|
self._network_cb_ids = []
|
||||||
self._network_cb_id = None
|
|
||||||
except:
|
except:
|
||||||
logging.debug("Failed to deregister events in conn cleanup",
|
logging.debug("Failed to deregister events in conn cleanup",
|
||||||
exc_info=True)
|
exc_info=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user