def doRestore(self): """ Restore the status of instances """ self.logger.log("Begin to restore instance status...") try: self.readConfigInfo() self.getUserInfo() # dump status to file cmd = ClusterCommand.getQueryStatusCmd(self.user, self.dbNodeInfo.id, self.__curStatusFile) (status, output) = commands.getstatusoutput(cmd) if status != 0: self.logger.logExit("Query local instance status failed!Error: %s" % output) bakDbStatus = DbClusterStatus() bakDbStatus.initFromFile(self.__bakStatusFile) bakNodeStatus = bakDbStatus.getDbNodeStatusById(self.dbNodeInfo.id) if bakNodeStatus is None: self.logger.logExit("Get backup status of local node failed!") curDbStatus = DbClusterStatus() curDbStatus.initFromFile(self.__curStatusFile) curNodeStatus = curDbStatus.getDbNodeStatusById(self.dbNodeInfo.id) if curNodeStatus is None: self.logger.logExit("Get current status of local node failed!") if not curNodeStatus.isNodeHealthy(): self.logger.logExit("Current status of node is not healthy!") # Compare the status and restore it bakInstances = bakNodeStatus.datanodes + bakNodeStatus.gtms for bakInst in bakInstances: curInst = curNodeStatus.getInstanceByDir(bakInst.datadir) if curInst is None: self.logger.logExit("Get current status of instance failed!DataDir:%s" % bakInst.datadir) if bakInst.status == curInst.status: continue if bakInst.status == DbClusterStatus.INSTANCE_STATUS_PRIMARY: self.__switchToPrimary(bakInst.datadir) elif bakInst.status == DbClusterStatus.INSTANCE_STATUS_STANDBY: self.__switchToStandby(bakInst.datadir) except Exception, e: self.logger.logExit(str(e))
def doBackup(self): """ Backup the status of instances """ self.logger.log("Begin to backup instance status...") try: self.readConfigInfo() self.getUserInfo() # dump status to file cmd = ClusterCommand.getQueryStatusCmd(self.user, self.dbNodeInfo.id, self.__bakStatusFile) (status, output) = commands.getstatusoutput(cmd) if status != 0: self.logger.logExit("Query local instance status failed!Error: %s" % output) except Exception, e: self.logger.logExit(str(e))