From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Thu, 03 Jan 2013 14:06:36 +0000 Subject: [Cluster-devel] [PATCH] gfs2_lockcapture: The script now returns a correct exit code when the script exits. In-Reply-To: <1356017940-15941-1-git-send-email-sbradley@redhat.com> References: <1356017940-15941-1-git-send-email-sbradley@redhat.com> Message-ID: <1357221996.2696.28.camel@menhir> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Looks ok to me. ACK, Steve. On Thu, 2012-12-20 at 10:39 -0500, sbradley at redhat.com wrote: > From: Shane Bradley > > If there was files(not directories) created then the script will exit with 0, > else 1 since there was no lockdump files captured on any run of capturing the > data. Updated examples in man page. Change the default output path so that the > node name is not in the path. In addition I change how the clusternode name is > parsed. > > Signed-off-by: Shane Bradley > --- > gfs2/scripts/gfs2_lockcapture | 49 ++++++++++++++++++++++++++++--------------- > 1 file changed, 32 insertions(+), 17 deletions(-) > > diff --git a/gfs2/scripts/gfs2_lockcapture b/gfs2/scripts/gfs2_lockcapture > index 1a64188..2b3421c 100644 > --- a/gfs2/scripts/gfs2_lockcapture > +++ b/gfs2/scripts/gfs2_lockcapture > @@ -33,7 +33,7 @@ import tarfile > sure only 1 instance of this script is running at any time. > @type PATH_TO_PID_FILENAME: String > """ > -VERSION_NUMBER = "0.9-2" > +VERSION_NUMBER = "0.9-3" > MAIN_LOGGER_NAME = "%s" %(os.path.basename(sys.argv[0])) > PATH_TO_DEBUG_DIR="/sys/kernel/debug" > PATH_TO_PID_FILENAME = "/var/run/%s.pid" %(os.path.basename(sys.argv[0])) > @@ -570,11 +570,10 @@ def getClusterNode(listOfGFS2Names): > stdout = runCommandOutput("corosync-quorumtool", ["-l"]) > if (not stdout == None): > for line in stdout.split("\n"): > - splitLine = line.split() > - if (len(splitLine) == 4): > - if (splitLine[0].strip().rstrip() == thisNodeID): > - clusternodeName = splitLine[3] > - break; > + if (line.find("local") >=0): > + splitLine = line.split(" (local)") > + clusternodeName = splitLine[0].split()[2] > + break; > # If a clusternode name and cluster name was found then return a new object > # since this means this cluster is part of cluster. > if ((len(clusterName) > 0) and (len(clusternodeName) > 0)): > @@ -815,6 +814,10 @@ def gatherGFS2LockDumps(pathToDSTDir, listOfGFS2Filesystems): > and filesystem name for each item in the list. For example: > "f18cluster:mygfs2vol1" > > + @return: Returns True if files(not directories) were copied to the > + destination directory. > + @rtype: Boolean > + > @param pathToDSTDir: This is the path to directory where the files will be > copied to. > @type pathToDSTDir: String > @@ -825,13 +828,19 @@ def gatherGFS2LockDumps(pathToDSTDir, listOfGFS2Filesystems): > lockDumpType = "gfs2" > pathToSrcDir = os.path.join(PATH_TO_DEBUG_DIR, lockDumpType) > pathToOutputDir = os.path.join(pathToDSTDir, lockDumpType) > + # The number of files that were copied > + fileCopiedCount = 0 > for dirName in os.listdir(pathToSrcDir): > pathToCurrentDir = os.path.join(pathToSrcDir, dirName) > if ((os.path.isdir(pathToCurrentDir)) and (dirName in listOfGFS2Filesystems)): > message = "Copying the lockdump data for the %s filesystem: %s" %(lockDumpType.upper(), dirName) > logging.getLogger(MAIN_LOGGER_NAME).debug(message) > - copyDirectory(pathToCurrentDir, pathToOutputDir) > - > + copySuccessful = copyDirectory(pathToCurrentDir, pathToOutputDir) > + if (copySuccessful and os.path.exists(os.path.join(pathToOutputDir, dirName))): > + fileCopiedCount = len(os.listdir(os.path.join(pathToOutputDir, dirName))) > + # If the number of files(not directories) copied was greater than zero then files were copied > + # succesfully. > + return (fileCopiedCount > 0) > # ############################################################################## > # Get user selected options > # ############################################################################## > @@ -936,18 +945,18 @@ class OptionParserExtended(OptionParser): > self.print_version() > examplesMessage = "\n" > examplesMessage = "\nPrints information about the available GFS2 filesystems that can have lockdump data captured." > - examplesMessage += "\n$ %s -i\n" %(self.__commandName) > + examplesMessage += "\n# %s -i\n" %(self.__commandName) > > examplesMessage += "\nIt will do 3 runs of gathering the lockdump information in 10 second intervals for only the" > examplesMessage += "\nGFS2 filesystems with the names myGFS2vol2,myGFS2vol1. Then it will archive and compress" > examplesMessage += "\nthe data collected. All of the lockdump data will be written to the directory: " > examplesMessage += "\n/tmp/2012-11-12_095556-gfs2_lockcapture and all the questions will be answered with yes.\n" > - examplesMessage += "\n$ %s -r 3 -s 10 -t -n myGFS2vol2,myGFS2vol1 -o /tmp/2012-11-12_095556-gfs2_lockcapture -y\n" %(self.__commandName) > + examplesMessage += "\n# %s -r 3 -s 10 -t -n myGFS2vol2,myGFS2vol1 -o /tmp/2012-11-12_095556-gfs2_lockcapture -y\n" %(self.__commandName) > > examplesMessage += "\nIt will do 2 runs of gathering the lockdump information in 25 second intervals for all the" > examplesMessage += "\nmounted GFS2 filesystems. Then it will archive and compress the data collected. All of the" > examplesMessage += "\nlockdump data will be written to the directory: /tmp/2012-11-12_095556-gfs2_lockcapture.\n" > - examplesMessage += "\n$ %s -r 2 -s 25 -t -o /tmp/2012-11-12_095556-gfs2_lockcapture\n" %(self.__commandName) > + examplesMessage += "\n# %s -r 2 -s 25 -t -o /tmp/2012-11-12_095556-gfs2_lockcapture\n" %(self.__commandName) > OptionParser.print_help(self) > print examplesMessage > > @@ -1001,7 +1010,8 @@ class ExtendOption (Option): > # ############################################################################### > if __name__ == "__main__": > """ > - When the script is executed then this code is ran. > + When the script is executed then this code is ran. If there was files(not > + directories) created then 0 will be returned, else a 1 is returned. > """ > try: > # ####################################################################### > @@ -1106,7 +1116,7 @@ if __name__ == "__main__": > # ####################################################################### > pathToOutputDir = cmdLineOpts.pathToOutputDir > if (not len(pathToOutputDir) > 0): > - pathToOutputDir = "%s" %(os.path.join("/tmp", "%s-%s-%s" %(time.strftime("%Y-%m-%d_%H%M%S"), clusternode.getClusterNodeName(), os.path.basename(sys.argv[0])))) > + pathToOutputDir = "%s" %(os.path.join("/tmp", "%s-%s" %(time.strftime("%Y-%m-%d_%H%M%S"), os.path.basename(sys.argv[0])))) > # ####################################################################### > # Backup any existing directory with same name as current output > # directory. > @@ -1139,8 +1149,12 @@ if __name__ == "__main__": > # Gather data and the lockdumps. > # ####################################################################### > if (cmdLineOpts.numberOfRuns <= 0): > - message = "The number of runs should be greater than zero." > + message = "The number of runs must be greater than zero." > + logging.getLogger(MAIN_LOGGER_NAME).warning(message) > exitScript(errorCode=1) > + # If GFS2 lockdump files were successfully copied to output directory > + # then the exit code will be set to 0, else the exit code will be 1. > + exitCode = 1 > for i in range(1,(cmdLineOpts.numberOfRuns + 1)): > # The current log count that will start at 1 and not zero to make it > # make sense in logs. > @@ -1189,14 +1203,15 @@ if __name__ == "__main__": > lockDumpType = "gfs2" > message = "Pass (%d/%d): Gathering the %s lock dumps for the host." %(i, cmdLineOpts.numberOfRuns, lockDumpType.upper()) > logging.getLogger(MAIN_LOGGER_NAME).debug(message) > - gatherGFS2LockDumps(pathToOutputRunDir, clusternode.getMountedGFS2FilesystemNames()) > + if(gatherGFS2LockDumps(pathToOutputRunDir, clusternode.getMountedGFS2FilesystemNames())): > + exitCode = 0 > # Gather log files > message = "Pass (%d/%d): Gathering the log files for the host." %(i, cmdLineOpts.numberOfRuns) > logging.getLogger(MAIN_LOGGER_NAME).debug(message) > gatherLogs(os.path.join(pathToOutputRunDir, "logs")) > # Sleep between each run if secondsToSleep is greater than or equal > # to 0 and current run is not the last run. > - if ((cmdLineOpts.secondsToSleep >= 0) and (i <= (cmdLineOpts.numberOfRuns))): > + if ((cmdLineOpts.secondsToSleep >= 0) and (i < (cmdLineOpts.numberOfRuns))): > message = "The script will sleep for %d seconds between each run of capturing the lockdump data." %(cmdLineOpts.secondsToSleep) > logging.getLogger(MAIN_LOGGER_NAME).info(message) > time.sleep(cmdLineOpts.secondsToSleep) > @@ -1228,4 +1243,4 @@ if __name__ == "__main__": > # ####################################################################### > # Exit the application with zero exit code since we cleanly exited. > # ####################################################################### > - exitScript() > + exitScript(errorCode=exitCode)