From b0688de9a2c282763275a47d85fc17b31b5c9848 Mon Sep 17 00:00:00 2001 From: Sahina Bose Date: Mon, 21 Apr 2014 13:57:07 +0530 Subject: glustercli: Added method for split-brain status Added method to check "volume heal info" Change-Id: I367eee5c63e3256f8834ea3845ed7ada6b073001 Signed-off-by: Sahina Bose --- glusternagios/glustercli.py | 50 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'glusternagios') diff --git a/glusternagios/glustercli.py b/glusternagios/glustercli.py index ff4781b..771feeb 100755 --- a/glusternagios/glustercli.py +++ b/glusternagios/glustercli.py @@ -88,6 +88,12 @@ class VolumeQuotaStatus: EXCEEDED = 'EXCEEDED' +class VolumeSplitBrainStatus: + NOTAPPLICABLE = 'NA' + OK = 'OK' + SPLITBRAIN = 'SPLITBRAIN' + + class TransportType: TCP = 'TCP' RDMA = 'RDMA' @@ -447,6 +453,50 @@ def _parseVolumeQuotaStatus(out): return VolumeQuotaStatus.OK +def _parseVolumeSelfHealSplitBrainInfo(out): + value = {} + splitbrainentries = 0 + for line in out: + if line.startswith('Number of entries:'): + entries = int(line.split(':')[1]) + if entries > 0: + splitbrainentries += entries + if splitbrainentries > 0: + value['status'] = VolumeSplitBrainStatus.SPLITBRAIN + else: + value['status'] = VolumeSplitBrainStatus.OK + value['unsyncedentries'] = splitbrainentries + return value + + +def volumeHealSplitBrainStatus(volumeName, remoteServer=None): + """ + Arguments: + * VolumeName + Returns: + {VOLUMENAME: {'status': SELFHEALSTATUS, + 'unsyncedentries': ENTRYCOUNT}} + """ + command = _getGlusterVolCmd() + ["heal", volumeName, "info"] + if remoteServer: + command += ['--remote-host=%s' % remoteServer] + + rc, out, err = _execGluster(command) + volume = {} + value = {} + if rc == 0: + value = _parseVolumeSelfHealSplitBrainInfo(out) + volume[volumeName] = value + return volume + else: + if len(err) > 0 and err[0].find("is not of type replicate") > -1: + value['status'] = VolumeSplitBrainStatus.NOTAPPLICABLE + value['unsyncedentries'] = 0 + volume[volumeName] = value + return volume + raise GlusterCmdFailedException(rc=rc, err=err) + + def volumeQuotaStatus(volumeName, remoteServer=None): """ Returns: -- cgit