[NEW PATCH] BZ#728381 - Return 'alerts' key for each domain in getStoragePoolInfo query (via gerrit-bot)
Igor Lvovsky
ilvovsky at redhat.com
Thu Aug 18 12:53:52 UTC 2011
New patch submitted by Igor Lvovsky (ilvovsky at redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/808
commit df103a82ae3f4173750eb616c39a883977da0ac3
Author: Igor Lvovsky <ilvovsky at redhat.com>
Date: Mon Aug 8 18:05:35 2011 +0300
BZ#728381 - Return 'alerts' key for each domain in getStoragePoolInfo query
Change-Id: I62f80bfaa2044eab541101de5b2825aa895c5d04
diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py
index 6986f71..fa12fff 100644
--- a/vdsm/storage/blockSD.py
+++ b/vdsm/storage/blockSD.py
@@ -705,7 +705,7 @@ class BlockStorageDomain(sd.StorageDomain):
"""
"""
vg = lvm.getVG(self.sdUUID)
- return dict(disktotal=vg.size, diskfree=vg.free)
+ return dict(disktotal=vg.size, diskfree=vg.free, mdavalid=lvm.isMetadataSizeValid(self.sdUUID))
def getAllImages(self):
"""
diff --git a/vdsm/storage/fileSD.py b/vdsm/storage/fileSD.py
index 6219303..713008e 100644
--- a/vdsm/storage/fileSD.py
+++ b/vdsm/storage/fileSD.py
@@ -235,7 +235,7 @@ class FileStorageDomain(sd.StorageDomain):
Get storage domain statistics
"""
##self.log.info("sdUUID=%s", self.sdUUID)
- stats = {'disktotal':'', 'diskfree':''}
+ stats = {'disktotal':'', 'diskfree':'', 'mdavalid':True}
try:
st = self.oop.os.statvfs(self.domaindir)
stats['disktotal'] = str(st.f_frsize * st.f_blocks)
diff --git a/vdsm/storage/lvm.py b/vdsm/storage/lvm.py
index d2707a2..4035762 100644
--- a/vdsm/storage/lvm.py
+++ b/vdsm/storage/lvm.py
@@ -133,9 +133,11 @@ log = logging.getLogger("Storage.LVM")
"""
LVM_DEFAULT_TTL = 100
+# VG's min metadata threshold is 20%
+MDA_MIN_THRESHOLD = 0.2
PV_FIELDS = "uuid,name,size,vg_name,vg_uuid,pe_start,pe_count,pe_alloc_count,mda_count,dev_size"
-VG_FIELDS = "uuid,name,attr,size,free,extent_size,extent_count,free_count,tags"
+VG_FIELDS = "uuid,name,attr,size,free,extent_size,extent_count,free_count,tags,vg_mda_size,vg_mda_free"
LV_FIELDS = "uuid,name,vg_name,attr,size,seg_start_pe,devices,tags"
VG_ATTR_BITS = ("permission", "resizeable", "exported",
@@ -1189,4 +1191,14 @@ def replaceLVTag(vg, lv, deltag, addtag):
if rc != 0:
raise se.LogicalVolumeReplaceTagError("%s/%s" % (vg, lv), "%s,%s" % (deltag, addtag))
+def isMetadataSizeValid(vgName):
+ """
+ Return False if the VG's metadata exceeded its threshold else return True
+ """
+ vg = getVG(vgName)
+ mda_size = int(vg.vg_mda_size)
+ mda_free = int(vg.vg_mda_free)
+ if mda_size * MDA_MIN_THRESHOLD > mda_free:
+ return False
+ return True
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index b3d699c..6404e3d 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -1028,6 +1028,7 @@ class StoragePool:
for item in domDict:
# Return statistics for active domains only
stats = {}
+ alerts = []
if domDict[item] == sd.DOM_ACTIVE_STATUS:
try:
dom = SDF.produce(item)
@@ -1041,6 +1042,10 @@ class StoragePool:
try:
stats['disktotal'] = repoStats[item]['disktotal']
stats['diskfree'] = repoStats[item]['diskfree']
+ if not repoStats[item]['mdavalid']:
+ alerts.append({'code':se.VgMetadataCriticallyFull.code,
+ 'message':se.VgMetadataCriticallyFull.message})
+ self.log.warning("VG %s's metadata size exceeded critical size", dom.sdUUID)
except KeyError:
# We might have been asked to run before the first repoStats cycle was run
if item not in self.repostats:
@@ -1054,6 +1059,7 @@ class StoragePool:
# Return defaults
stats['disktotal'] = ""
stats['diskfree'] = ""
+ stats['alerts'] = alerts
stats['status'] = domDict[item]
list_and_stats[item] = stats
diff --git a/vdsm/storage/storage_exception.py b/vdsm/storage/storage_exception.py
index 997c9f3..6009429 100644
--- a/vdsm/storage/storage_exception.py
+++ b/vdsm/storage/storage_exception.py
@@ -1144,6 +1144,12 @@ class LogicalVolumeWrongTagError(StorageException):
code = 612
message = "Wrong logical volume tag"
+class VgMetadataCriticallyFull(StorageException):
+ code = 613
+ message = """Error - The system has reached the 80% watermark on the VG metadata area size.
+ This is due high number of Vdisks or large Vdisks size allocated on this
+ specific VG. Please call Redhat Global Support to address the issue"""
+
#################################################
# SPM/HSM Exceptions
#################################################
More information about the vdsm-patches
mailing list