support 0/1/false/true compatibility with or without enabled inner 2117

This commit is contained in:
ylz
2023-06-26 11:00:26 +08:00
parent da4593efa6
commit b0ac331db2
2 changed files with 90 additions and 3 deletions

View File

@@ -33,6 +33,7 @@ public final class ParameterMapping {
private static List<String> errorParameters = new ArrayList<>();
private static final Map<String, String> COMPATIBLE_MAP = new HashMap<>();
private static Set<String> errorCompatibleSet = new HashSet<>();
private static final Set<String> ON_OFF_SET = new HashSet<>();
static {
@@ -42,6 +43,40 @@ public final class ParameterMapping {
COMPATIBLE_MAP.put("frontWorker", "processorExecutor");
COMPATIBLE_MAP.put("backendWorker", "backendProcessorExecutor");
COMPATIBLE_MAP.put("writeToBackendWorker", "writeToBackendExecutor");
ON_OFF_SET.add("useCompression");
ON_OFF_SET.add("usingAIO");
ON_OFF_SET.add("useThreadUsageStat");
ON_OFF_SET.add("usePerformanceMode");
ON_OFF_SET.add("useCostTimeStat");
ON_OFF_SET.add("autocommit");
ON_OFF_SET.add("checkTableConsistency");
ON_OFF_SET.add("recordTxn");
ON_OFF_SET.add("useSqlStat");
ON_OFF_SET.add("frontSocketNoDelay");
ON_OFF_SET.add("backSocketNoDelay");
ON_OFF_SET.add("enableGeneralLog");
ON_OFF_SET.add("enableBatchLoadData");
ON_OFF_SET.add("enableRoutePenetration");
ON_OFF_SET.add("enableAlert");
ON_OFF_SET.add("enableStatistic");
ON_OFF_SET.add("enableSessionActiveRatioStat");
ON_OFF_SET.add("enableConnectionAssociateThread");
ON_OFF_SET.add("enableAsyncRelease");
ON_OFF_SET.add("enableMemoryBufferMonitor");
ON_OFF_SET.add("enableMemoryBufferMonitorRecordPool");
ON_OFF_SET.add("enableSlowLog");
ON_OFF_SET.add("useCostTimeStat");
ON_OFF_SET.add("capClientFoundRows");
ON_OFF_SET.add("useJoinStrategy");
ON_OFF_SET.add("enableCursor");
ON_OFF_SET.add("enableFlowControl");
ON_OFF_SET.add("useOuterHa");
ON_OFF_SET.add("useNewJoinOptimizer");
ON_OFF_SET.add("inSubQueryTransformToJoin");
ON_OFF_SET.add("closeHeartBeatRecord");
}
public static void mapping(Object target, Properties src, ProblemReporter problemReporter) throws IllegalAccessException,
@@ -69,6 +104,7 @@ public final class ParameterMapping {
}
if (isPrimitiveType(cls)) {
try {
valStr = onOffProcess(name, cls, valStr);
value = convert(cls, valStr);
} catch (NumberFormatException nfe) {
String propertyName = pd.getName();
@@ -124,6 +160,7 @@ public final class ParameterMapping {
}
if (isPrimitiveType(cls)) {
try {
valStr = onOffProcess(propertyName, cls, valStr);
value = convert(cls, valStr);
} catch (NumberFormatException nfe) {
String msg = getTypeErrorMessage(propertyName, valStr, cls);
@@ -260,6 +297,38 @@ public final class ParameterMapping {
return valStr;
}
private static String onOffProcess(String name, Class<?> cls, String val) {
String value = val;
if (!ON_OFF_SET.contains(name)) {
return value;
}
if (!cls.equals(Integer.TYPE) && !cls.equals(Boolean.TYPE)) {
throw new NumberFormatException("parameter " + name + " is not boolean value or Integer value");
}
int valInteger;
boolean valBoolean;
if (BooleanUtil.isBoolean(val)) {
valBoolean = BooleanUtil.parseBoolean(val);
valInteger = booleanToInt(valBoolean);
} else {
valInteger = Integer.parseInt(val);
checkOnOffInteger(valInteger);
valBoolean = intToBoolean(valInteger);
}
if (cls.equals(Integer.TYPE)) {
value = String.valueOf(valInteger);
} else {
value = String.valueOf(valBoolean);
}
return value;
}
private static void checkOnOffInteger(int valInteger) {
if (valInteger < 0 || valInteger > 1) {
throw new NumberFormatException("value " + valInteger + " is illegal");
}
}
public static String getErrorCompatibleMessage(String name) {
String message = "";
if (errorCompatibleSet.contains(name)) {
@@ -272,8 +341,20 @@ public final class ParameterMapping {
private static String getTypeErrorMessage(String name, String values, Class<?> cls) {
String message = getErrorCompatibleMessage(name);
StringBuilder sb = new StringBuilder(message);
sb.append("property [ ").append(name).append(" ] '").append(values).append("' data type should be ").append(cls.toString());
if (ON_OFF_SET.contains(name)) {
sb.append("check the property [ ").append(name).append(" ] '").append(values).append("' data type or value");
} else {
sb.append("property [ ").append(name).append(" ] '").append(values).append("' data type should be ").append(cls.toString());
}
return sb.toString();
}
private static boolean intToBoolean(int num) {
return num != 0;
}
private static int booleanToInt(boolean bool) {
return bool ? 1 : 0;
}
}

View File

@@ -6,16 +6,22 @@
package com.actiontech.dble.util;
public final class BooleanUtil {
private static final String TRUE = "true";
private static final String FALSE = "false";
private BooleanUtil() {
}
public static boolean parseBoolean(String val) {
if ("true".equalsIgnoreCase(val)) {
if (TRUE.equalsIgnoreCase(val)) {
return true;
} else if ("false".equalsIgnoreCase(val)) {
} else if (FALSE.equalsIgnoreCase(val)) {
return false;
} else {
throw new NumberFormatException("value " + val + " is not boolean value");
}
}
public static boolean isBoolean(String val) {
return TRUE.equalsIgnoreCase(val) || FALSE.equalsIgnoreCase(val);
}
}