Federico Simoncelli has uploaded a new change for review.
Change subject: hsm: move domainStateCallback to HSM ......................................................................
hsm: move domainStateCallback to HSM
It seems that the garbage collector is not fast enough to clear the callback per-pool that we added in commit:
7e30615 sp: update domain links on state change
This different approach will allow us to add only one callback (per HSM) and forward the event to the current connected pools.
Change-Id: I7509aced432dfa77dbec727d57f507d1a9c550b7 Signed-off-by: Federico Simoncelli fsimonce@redhat.com --- M vdsm/storage/hsm.py M vdsm/storage/sp.py 2 files changed, 11 insertions(+), 5 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/78/27478/1
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py index 7e4dc15..21a0002 100644 --- a/vdsm/storage/hsm.py +++ b/vdsm/storage/hsm.py @@ -37,6 +37,7 @@ import types import math import stat +from weakref import proxy
from vdsm.config import config import sp @@ -399,6 +400,11 @@ monitorInterval = config.getint('irs', 'sd_health_check_delay') self.domainMonitor = domainMonitor.DomainMonitor(monitorInterval)
+ self._domainStateCallback = partial( + HSM._onDomainStateChange, proxy(self)) + self.domainMonitor.onDomainStateChange.register( + self._domainStateCallback) + @property def ready(self): return self._ready @@ -411,6 +417,10 @@ """ self.domainStateChangeCallbacks.add(callbackFunc)
+ def _onDomainStateChange(self, sdUUID, isValid): + for pool in self.pools.values(): + pool.domainStateChangeEvent(sdUUID, isValid) + def _hsmSchedule(self, name, func, *args): self.taskMng.scheduleJob("hsm", self.tasksDir, vars.task, name, func, *args) diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py index 4d6a487..3d7ab55 100644 --- a/vdsm/storage/sp.py +++ b/vdsm/storage/sp.py @@ -104,10 +104,6 @@ self.domainMonitor = domainMonitor self._upgradeCallback = partial(StoragePool._upgradePoolDomain, proxy(self)) - self._domainStateCallback = partial( - StoragePool._domainStateChange, proxy(self)) - self.domainMonitor.onDomainStateChange.register( - self._domainStateCallback) self._backend = None
def __is_secure__(self): @@ -141,7 +137,7 @@ def getBackend(self): return self._backend
- def _domainStateChange(self, sdUUID, isValid): + def domainStateChangeEvent(self, sdUUID, isValid): if isValid and sdUUID in self.getDomains(): self._refreshDomainLinks(sdCache.produce(sdUUID))