Exemple #1
0
    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))
Exemple #2
0
    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))