package com.alibaba.doris.admin.service.failover.processor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.alibaba.doris.admin.dataobject.PhysicalNodeDO; import com.alibaba.doris.admin.service.common.AdminServiceException; import com.alibaba.doris.admin.service.common.node.NodesManager; import com.alibaba.doris.admin.service.failover.migrate.ForeverFailoverMigrateThread; import com.alibaba.doris.admin.service.failover.node.check.NodeCheckManager; import com.alibaba.doris.admin.service.failover.node.check.NodeHealth; /** * 永久失效恢复processor * * @author frank */ public class ForeverFailoverProcessor extends FailoverProcessor { private static final Log log = LogFactory.getLog(ForeverFailoverProcessor.class); private static FailoverProcessor instance = new ForeverFailoverProcessor(); private ForeverFailoverProcessor() { } public static FailoverProcessor getInstance() { return instance; } protected void startMigerateThread(String failPhysicalNodeId) { ForeverFailoverMigrateThread migThread = new ForeverFailoverMigrateThread(failPhysicalNodeId); } /** * 判断是否存在可替换的备用节点 * 应该维护备用节点的健康,如果备用节点NG,异常报警而不是继续寻找 * */ @Override protected boolean canFailoverMigerate(String failPhysicalNodeId) throws AdminServiceException{ PhysicalNodeDO standbyNode = NodesManager.getInstance().getStandbyNodeId(failPhysicalNodeId); if (standbyNode == null||NodeCheckManager.getInstance().checkNode(standbyNode.getPhysicalId(), false).equals(NodeHealth.NG)) { if (log.isWarnEnabled()) { log.warn("There is no standby node for forever fail migrate."); } throw new AdminServiceException("There is no standby node for forever fail migrate."); } return true; } }