package com.alibaba.doris.common; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; /** * 定义Doris集群中的序列类型 * * @project :Doris * @author : len.liu * @datetime : 2011-4-27 下午06:58:01 * @version : 0.1 * @Modification: */ public enum StoreNodeSequenceEnum { /** * 正常序列:进行数据存储的正常节点(sequence编号1,2,3...,8) */ NORMAL_SEQUENCE_1(1, "Sequence 1", true), NORMAL_SEQUENCE_2(2, "Sequence 2", true), NORMAL_SEQUENCE_3(3, "Sequence 3", false), NORMAL_SEQUENCE_4(4, "Sequence 4", false), /** * 临时序列:当有正常节点临时失效的时候,数据写到临时节点(历史上也别称作增量节点、备份节点,sequence编号0) */ TEMP_SEQUENCE(0, "临时序列", true), /** * 备用序列:当有节点永久失效的时候,使用备用节点替代该永久失效节点(sequence编号9) */ STANDBY_SEQUENCE(9, "备用序列", true), /** * 待用序列:序列中为新加入的节点,待分配 */ UNUSE_SEQUENCE(-1, "待用序列", true); private int value; private String name; private boolean isValid; private StoreNodeSequenceEnum(int value, String name, boolean isValid) { this.value = value; this.name = name; this.isValid = isValid; } /** 返回常量字符串 */ public int getValue() { return value; } public String getName() { return name; } public boolean isValid() { return isValid; } /** 根据字符串得到Enum类型,区分大小写,如果没有匹配成功则返回null */ public static StoreNodeSequenceEnum getTypeByValue(int value) { for (StoreNodeSequenceEnum type : values()) { if (type.getValue() == value) { return type; } } return null; } public static boolean isNormalSequence(StoreNodeSequenceEnum sequence) { return !StoreNodeSequenceEnum.UNUSE_SEQUENCE.equals(sequence) && !StoreNodeSequenceEnum.TEMP_SEQUENCE.equals(sequence) && !StoreNodeSequenceEnum.STANDBY_SEQUENCE.equals(sequence); } public static boolean isNormalSequence(String sequence) { if (StringUtils.isBlank(sequence) || !NumberUtils.isNumber(sequence)) { return false; } StoreNodeSequenceEnum sequenceEnum = StoreNodeSequenceEnum.getTypeByValue(NumberUtils.toInt(sequence)); if (sequenceEnum == null) return false; return isNormalSequence(sequenceEnum); } }