From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Price Date: Wed, 16 Sep 2015 11:56:24 +0100 Subject: [Cluster-devel] [PATCH] gfs2_lockcapture: Fix condition where dlm lockspaces parsing failed In-Reply-To: <1441983591-6318-1-git-send-email-sbradley@redhat.com> References: <1441983591-6318-1-git-send-email-sbradley@redhat.com> Message-ID: <55F94AD8.3010105@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On 11/09/15 15:59, sbradley at redhat.com wrote: > From: Shane Bradley > > The output of `dlm_tool ls` was not parsed correctly on dlm_tool version 3.0 or > higher. The patch now parses correctly `dlm_tool ls` output from version 2.0 or > higher. > > Signed-off-by: Shane Bradley > --- > gfs2/scripts/gfs2_lockcapture | 35 ++++++++++++++++++++++------------- > 1 files changed, 22 insertions(+), 13 deletions(-) > > diff --git a/gfs2/scripts/gfs2_lockcapture b/gfs2/scripts/gfs2_lockcapture > index 8839818..5fe92bc 100644 > --- a/gfs2/scripts/gfs2_lockcapture > +++ b/gfs2/scripts/gfs2_lockcapture > @@ -5,7 +5,7 @@ systems and DLM. > > @author : Shane Bradley > @contact : sbradley at redhat.com > - at version : 0.9 > + at version : 0.95 Not 0.10? > @copyright : GPLv2 > """ > import sys > @@ -658,24 +658,25 @@ def getClusterNode(listOfGFS2Names): > else: > return None > > - > -def getDLMToolDLMLockspaces(): > +def parse_dlm_ls(dlm_ls): > """ > This function returns the names of all the dlm lockspace names found with the > - command: "dlm_tool ls". > + commands "dlm_tool ls" or "group_tool ls" output. > > @return: A list of all the dlm lockspace names. > @rtype: Array > """ > dlmLockspaces = [] > - stdout = runCommandOutput("dlm_tool", ["ls"]) > - if (not stdout == None): > - stdout = stdout.replace("dlm lockspaces\n", "") > + if (not dlm_ls == None): > + dlm_ls = dlm_ls.replace("dlm lockspaces\n", "") > dlmToolLSKeys = ["name", "id", "flags", "change", "members"] > # Split on newlines > - stdoutSections = stdout.split("\n\n") > - for section in stdoutSections: > + dlm_lsSections = dlm_ls.split("\n\n") > + for section in dlm_lsSections: > # Create tmp map to hold data > + if (section.startswith("fence domain")): > + # Not concerned with fence information. > + continue > dlmToolLSMap = dict.fromkeys(dlmToolLSKeys) > lines = section.split("\n") > for line in lines: > @@ -699,9 +700,15 @@ def getGroupToolDLMLockspaces(): > stdout = runCommandOutput("group_tool", ["ls"]) > if (not stdout == None): > lines = stdout.split("\n") > - for line in lines: > - if (line.startswith("dlm")): > - dlmLockspaces.append(line.split()[2]) > + if (len(lines) > 0): > + if (lines[0].startswith("type")): > + # Then running cman-2.0 > + for line in lines: > + if (line.startswith("dlm")): > + dlmLockspaces.append(line.split()[2]) > + else: > + # Then running cman-3.0 and uses same sorta output as `dlm_tool ls`. > + dlmLockspaces = parse_dlm_ls(stdout) > return dlmLockspaces > > def getDLMLockspaces(): > @@ -713,8 +720,10 @@ def getDLMLockspaces(): > """ > message = "Gathering the DLM Lockspace Names." > logging.getLogger(MAIN_LOGGER_NAME).debug(message) > - dlmLockspaces = getDLMToolDLMLockspaces() > + dlmLockspaces = parse_dlm_ls(runCommandOutput("dlm_tool", ["ls"])) > if (not len(dlmLockspaces) > 0): > + message = "There was no dlm lockspaces found with the \"dlm_tool ls\" command. Trying with the \"group_tool ls\" command." > + logging.getLogger(MAIN_LOGGER_NAME).debug(message) > dlmLockspaces = getGroupToolDLMLockspaces() > return dlmLockspaces > > Coding style aside, the patch looks fine to me. Cheers, Andy