Change in vdsm[master]: monitor: Refresh domains only if needed

nsoffer at redhat.com nsoffer at redhat.com
Thu Feb 11 09:20:04 UTC 2016


Nir Soffer has uploaded a new change for review.

Change subject: monitor: Refresh domains only if needed
......................................................................

monitor: Refresh domains only if needed

We used to remove storage domains from the cache every 300 seconds. This
creates lvm invalidate and reload storm, blocking monitor threads on lvm
operation mutex for minutes, leading to very high lastCheck values when
storage is just fine.

There should be no reason to invalidate a VG unless it was extended or
resized, and in these flows we invalidate the VG.

Now we refresh storage domain only after it was upgraded.

Change-Id: I974c26fb1af3594684e00a3f9e5d64d5bfaedecd
Bug-Url: https://bugzilla.redhat.com/1081962
Signed-off-by: Nir Soffer <nsoffer at redhat.com>
---
M tests/sdm_indirection_tests.py
M vdsm/storage/monitor.py
M vdsm/storage/sd.py
3 files changed, 16 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/95/53395/1

diff --git a/tests/sdm_indirection_tests.py b/tests/sdm_indirection_tests.py
index b71556e..75e23e9 100644
--- a/tests/sdm_indirection_tests.py
+++ b/tests/sdm_indirection_tests.py
@@ -163,6 +163,10 @@
                                    preallocate=None):
         pass
 
+    @recorded
+    def needsRefresh(self):
+        pass
+
 
 class FakeBlockDomainManifest(FakeDomainManifest):
     def __init__(self):
@@ -693,6 +697,7 @@
         ['refreshDirTree', 0],
         ['refresh', 0],
         ['validateCreateVolumeParams', 3],
+        ['needsRefresh', 0],
         ])
     def test_common_functions(self, fn, nargs):
         self.checker.check_method_call(fn, nargs)
diff --git a/vdsm/storage/monitor.py b/vdsm/storage/monitor.py
index b4a0846..2db9bfe 100644
--- a/vdsm/storage/monitor.py
+++ b/vdsm/storage/monitor.py
@@ -313,8 +313,9 @@
 
     @utils.cancelpoint
     def _refreshDomain(self):
-        self.log.debug("Refreshing domain %s", self.sdUUID)
-        sdCache.manuallyRemoveDomain(self.sdUUID)
+        if self.domain.needsRefresh():
+            self.log.debug("Refreshing domain %s", self.sdUUID)
+            sdCache.manuallyRemoveDomain(self.sdUUID)
         self.lastRefresh = time.time()
 
     # Deferred initialization
diff --git a/vdsm/storage/sd.py b/vdsm/storage/sd.py
index 0053bde..87b4ec6 100644
--- a/vdsm/storage/sd.py
+++ b/vdsm/storage/sd.py
@@ -308,6 +308,8 @@
         self.domaindir = domaindir
         self.replaceMetadata(metadata)
         self._domainLock = self._makeDomainLock()
+        # Used for needsRefresh()
+        self._version = self.getVersion()
 
     @property
     def oop(self):
@@ -485,6 +487,9 @@
 
         if preallocate is not None and preallocate not in volume.VOL_TYPE:
             raise se.IncorrectType(preallocate)
+
+    def needsRefresh(self):
+        return self.getVersion() != self._version
 
 
 class StorageDomain(object):
@@ -977,6 +982,9 @@
     def isData(self):
         return self._manifest.isData()
 
+    def needsRefresh(self):
+        return self._manifest.needsRefresh()
+
     def imageGarbageCollector(self):
         """
         Image Garbage Collector


-- 
To view, visit https://gerrit.ovirt.org/53395
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I974c26fb1af3594684e00a3f9e5d64d5bfaedecd
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer at redhat.com>


More information about the vdsm-patches mailing list