def doCheckStaus(user, nodeId, cluster_normal_status=None, expected_redistributing=""): """ function: Check cluster status input : user, nodeId, cluster_normal_status, expected_redistributing output: status, output """ try: statusFile = "/home/%s/gauss_check_status_%d.dat" % (user, os.getpid()) TempfileManagement.removeTempFile(statusFile) cmd = ClusterCommand.getQueryStatusCmd(user, "", statusFile) (status, output) = subprocess.getstatusoutput(cmd) if status != 0: TempfileManagement.removeTempFile(statusFile) return (status, output) clusterStatus = DbClusterStatus() clusterStatus.initFromFile(statusFile) TempfileManagement.removeTempFile(statusFile) except Exception as e: DefaultValue.cleanTmpFile(statusFile) raise Exception(ErrorCode.GAUSS_516["GAUSS_51600"] + "Error: %s." % str(e)) status = 0 output = "" statusRep = None if nodeId > 0: nodeStatus = clusterStatus.getDbNodeStatusById(nodeId) if nodeStatus is None: raise Exception(ErrorCode.GAUSS_516["GAUSS_51619"] % nodeId) status = 0 if nodeStatus.isNodeHealthy() else 1 statusRep = nodeStatus.getNodeStatusReport() else: status = 0 if clusterStatus.isAllHealthy(cluster_normal_status) \ and (clusterStatus.redistributing == expected_redistributing or expected_redistributing == "") else 1 statusRep = clusterStatus.getClusterStatusReport() output += "cluster_state : %s\n" % clusterStatus.clusterStatus output += "redistributing : %s\n" % clusterStatus.redistributing output += "node_count : %d\n" % statusRep.nodeCount output += "Datanode State\n" output += " primary : %d\n" % statusRep.dnPrimary output += " standby : %d\n" % statusRep.dnStandby output += " secondary : %d\n" % statusRep.dnDummy output += " building : %d\n" % statusRep.dnBuild output += " abnormal : %d\n" % statusRep.dnAbnormal output += " down : %d\n" % statusRep.dnDown return (status, output)
def getNodeStatus(self, nodename): """ function: get node status input: nodename output: NA """ try: # Create a temporary file to save cluster status tmpDir = DefaultValue.getTmpDirFromEnv() tmpFile = os.path.join(tmpDir, "gauss_cluster_status.dat_" + \ str(datetime.now().strftime( '%Y%m%d%H%M%S')) + "_" + str( os.getpid())) # Perform the start operation # Writes the execution result to a temporary file cmd = ClusterCommand.getQueryStatusCmd(self.context.g_opts.user, "", tmpFile, True) (status, output) = subprocess.getstatusoutput(cmd) if (status != 0): self.logger.debug("The cmd is %s " % cmd) raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % \ cmd + "Error: \n%s" % output) # Initialize cluster status information for the temporary file clusterStatus = DbClusterStatus() clusterStatus.initFromFile(tmpFile) # Get node status nodeStatusInfo = None for dbNode in clusterStatus.dbNodes: if (dbNode.name == nodename): nodeStatusInfo = dbNode if (nodeStatusInfo and nodeStatusInfo.isNodeHealthy()): nodeStatus = clusterStatus.OM_NODE_STATUS_NORMAL else: nodeStatus = clusterStatus.OM_NODE_STATUS_ABNORMAL DefaultValue.cleanTmpFile(tmpFile) return nodeStatus except Exception as e: DefaultValue.cleanTmpFile(tmpFile) self.logger.debug("Failed to get node status. Error: \n%s." % str(e)) return "Abnormal"