From b0ac331db2d977ce7b2419b6f23e322c0ee1e73c Mon Sep 17 00:00:00 2001 From: ylz Date: Mon, 26 Jun 2023 11:00:26 +0800 Subject: [PATCH 1/7] support 0/1/false/true compatibility with or without enabled inner 2117 --- .../dble/config/util/ParameterMapping.java | 83 ++++++++++++++++++- .../com/actiontech/dble/util/BooleanUtil.java | 10 ++- 2 files changed, 90 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/actiontech/dble/config/util/ParameterMapping.java b/src/main/java/com/actiontech/dble/config/util/ParameterMapping.java index f9625929a..5feb202ce 100644 --- a/src/main/java/com/actiontech/dble/config/util/ParameterMapping.java +++ b/src/main/java/com/actiontech/dble/config/util/ParameterMapping.java @@ -33,6 +33,7 @@ public final class ParameterMapping { private static List errorParameters = new ArrayList<>(); private static final Map COMPATIBLE_MAP = new HashMap<>(); private static Set errorCompatibleSet = new HashSet<>(); + private static final Set 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; + } + } diff --git a/src/main/java/com/actiontech/dble/util/BooleanUtil.java b/src/main/java/com/actiontech/dble/util/BooleanUtil.java index 1441ec644..d0918c9c1 100644 --- a/src/main/java/com/actiontech/dble/util/BooleanUtil.java +++ b/src/main/java/com/actiontech/dble/util/BooleanUtil.java @@ -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); + } } From e20a35352d40d209693bdce232938b925a95ecfe Mon Sep 17 00:00:00 2001 From: wenyh1 <2365151147@qq.com> Date: Thu, 29 Jun 2023 15:17:01 +0800 Subject: [PATCH 2/7] [inner-2276] add apNode to the configure template --- src/main/resources/sharding_template.xml | 8 ++++++++ src/main/resources/user_template.xml | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/main/resources/sharding_template.xml b/src/main/resources/sharding_template.xml index 53c90503a..563e81686 100644 --- a/src/main/resources/sharding_template.xml +++ b/src/main/resources/sharding_template.xml @@ -50,12 +50,20 @@ + + + + + + + + partition-enum.txt diff --git a/src/main/resources/user_template.xml b/src/main/resources/user_template.xml index b980bf040..86cd38a4e 100644 --- a/src/main/resources/user_template.xml +++ b/src/main/resources/user_template.xml @@ -30,6 +30,17 @@ + + + + + + +
+ + + + true From 41e2f8ffa0e9a5254e272cb0390dfa6dde75d3ff Mon Sep 17 00:00:00 2001 From: wenyh1 <2365151147@qq.com> Date: Thu, 6 Jul 2023 13:28:40 +0800 Subject: [PATCH 3/7] [inner-2282] upgrade grpc from 1.5.0 to 1.53.0 --- pom.xml | 2 +- .../cluster/general/impl/UcoreSender.java | 20 +++++++++---------- .../general/impl/ushard/UshardSender.java | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index a9e4e86a4..41759c8dd 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ UTF-8 - 1.5.0 + 1.53.02.18.0 diff --git a/src/main/java/com/actiontech/dble/cluster/general/impl/UcoreSender.java b/src/main/java/com/actiontech/dble/cluster/general/impl/UcoreSender.java index d97888c65..f6e453e98 100644 --- a/src/main/java/com/actiontech/dble/cluster/general/impl/UcoreSender.java +++ b/src/main/java/com/actiontech/dble/cluster/general/impl/UcoreSender.java @@ -181,7 +181,7 @@ public final class UcoreSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); output = stub.withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS).getKv(input); } catch (Exception e2) { @@ -221,7 +221,7 @@ public final class UcoreSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); output = stub.withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS).getKvTree(input); } catch (Exception e2) { @@ -257,7 +257,7 @@ public final class UcoreSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); stub.withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS).deleteKvTree(input); flag = true; @@ -288,7 +288,7 @@ public final class UcoreSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); stub.withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS).deleteKv(input); return; @@ -321,7 +321,7 @@ public final class UcoreSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(GRPC_SUBTIMEOUT, TimeUnit.SECONDS)); UcoreInterface.SubscribeKvPrefixOutput output = stub.withDeadlineAfter(GRPC_SUBTIMEOUT, TimeUnit.SECONDS).subscribeKvPrefix(input); return groupSubscribeResult(output); @@ -346,7 +346,7 @@ public final class UcoreSender extends AbstractConsulSender { for (String ip : getAvailableIpList()) { ManagedChannel channel = null; try { - channel = ManagedChannelBuilder.forAddress(ip, ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + channel = ManagedChannelBuilder.forAddress(ip, ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); stub.withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS).alert(input); return; @@ -370,7 +370,7 @@ public final class UcoreSender extends AbstractConsulSender { for (String ip : getAvailableIpList()) { ManagedChannel channel = null; try { - channel = ManagedChannelBuilder.forAddress(ip, ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + channel = ManagedChannelBuilder.forAddress(ip, ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); stub.withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS).alertResolve(input); return true; @@ -421,7 +421,7 @@ public final class UcoreSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); stub.withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS).renewSession(input); return true; @@ -463,7 +463,7 @@ public final class UcoreSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(GRPC_SUBTIMEOUT, TimeUnit.SECONDS)); return stub.withDeadlineAfter(GRPC_SUBTIMEOUT, TimeUnit.SECONDS).subscribeNodes(subscribeNodesInput); } catch (Exception e2) { @@ -595,7 +595,7 @@ public final class UcoreSender extends AbstractConsulSender { Channel channel = null; try { channel = ManagedChannelBuilder.forAddress(ip, - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); channel = ClientInterceptors.intercept(channel, new MetaDataClientInterceptor()); setStubIfPossible(UcoreGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); isSuccess = true; diff --git a/src/main/java/com/actiontech/dble/cluster/general/impl/ushard/UshardSender.java b/src/main/java/com/actiontech/dble/cluster/general/impl/ushard/UshardSender.java index a96ca4f10..2cd1dfb50 100644 --- a/src/main/java/com/actiontech/dble/cluster/general/impl/ushard/UshardSender.java +++ b/src/main/java/com/actiontech/dble/cluster/general/impl/ushard/UshardSender.java @@ -47,7 +47,7 @@ public class UshardSender extends AbstractConsulSender { @Override public void initConInfo() { Channel channel = ManagedChannelBuilder.forAddress("127.0.0.1", - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(DbleClusterGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); } @@ -56,7 +56,7 @@ public class UshardSender extends AbstractConsulSender { serverId = SystemConfig.getInstance().getServerId(); sourceComponentId = SystemConfig.getInstance().getInstanceName(); Channel channel = ManagedChannelBuilder.forAddress("127.0.0.1", - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); setStubIfPossible(DbleClusterGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); startUpdateNodes(); ClusterToXml.loadKVtoFile(this); @@ -309,7 +309,7 @@ public class UshardSender extends AbstractConsulSender { } LOGGER.warn("error in ucore nodes watch,try for another time", e); Channel channel = ManagedChannelBuilder.forAddress("127.0.0.1", - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); UshardSender.this.setStubIfPossible(DbleClusterGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS)); LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(2000)); } @@ -346,7 +346,7 @@ public class UshardSender extends AbstractConsulSender { ManagedChannel channel = null; try { channel = ManagedChannelBuilder.forAddress("127.0.0.1", - ClusterConfig.getInstance().getClusterPort()).usePlaintext(true).build(); + ClusterConfig.getInstance().getClusterPort()).usePlaintext().build(); stub = DbleClusterGrpc.newBlockingStub(channel).withDeadlineAfter(ClusterConfig.getInstance().getGrpcTimeout(), TimeUnit.SECONDS); //check connection is ready ClusterHelper.isExist(ClusterPathUtil.getOnlinePath(SystemConfig.getInstance().getInstanceName())); From 735d126b77a2f69baa964b6eb984c7df6289bdbd Mon Sep 17 00:00:00 2001 From: guoaomen Date: Fri, 7 Jul 2023 11:33:50 +0800 Subject: [PATCH 4/7] fix: rows that do not need to be changed are not correctly removed during update or delete --- .../dble/services/manager/information/ManagerTableUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/actiontech/dble/services/manager/information/ManagerTableUtil.java b/src/main/java/com/actiontech/dble/services/manager/information/ManagerTableUtil.java index ec34c2c0a..3679a870a 100644 --- a/src/main/java/com/actiontech/dble/services/manager/information/ManagerTableUtil.java +++ b/src/main/java/com/actiontech/dble/services/manager/information/ManagerTableUtil.java @@ -112,8 +112,8 @@ public final class ManagerTableUtil { String value = null == row.getValue(i) ? null : new String(row.getValue(i), charset); affectPk.put(columnName, value); if (null != values) { - boolean match = values.entrySet().stream().anyMatch(valueEntry -> !StringUtil.equals(affectPk.get(valueEntry.getKey()), valueEntry.getValue())); - if (!match) { + boolean isSkipRow = values.entrySet().stream().allMatch(valueEntry -> affectPk.containsKey(valueEntry.getKey()) && StringUtil.equals(affectPk.get(valueEntry.getKey()), valueEntry.getValue())); + if (isSkipRow) { breakFlag = true; break; } From 09b6d6b9260d4975b86a6c54ceee44534da5f01c Mon Sep 17 00:00:00 2001 From: guoaomen Date: Mon, 10 Jul 2023 14:53:23 +0800 Subject: [PATCH 5/7] fix: add null value judgment --- .../manager/information/tables/DbleDbGroup.java | 6 +++--- .../information/tables/DbleDbInstance.java | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java b/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java index 1b7962c3b..beeab2053 100644 --- a/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java +++ b/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java @@ -292,13 +292,13 @@ public class DbleDbGroup extends ManagerWritableTable { String delayThresholdStr = row.get(COLUMN_DELAY_THRESHOLD); String heartbeatTimeoutStr = row.get(COLUMN_HEARTBEAT_TIMEOUT); String heartbeatRetryStr = row.get(COLUMN_HEARTBEAT_RETRY); - if (!StringUtil.isBlank(delayThresholdStr) && IntegerUtil.parseInt(delayThresholdStr) < -1) { + if (StringUtil.isBlank(delayThresholdStr) || IntegerUtil.parseInt(delayThresholdStr) < -1) { throw new ConfigException("Column '" + COLUMN_DELAY_THRESHOLD + "' should be an integer greater than or equal to -1!"); } - if (!StringUtil.isBlank(heartbeatTimeoutStr) && IntegerUtil.parseInt(heartbeatTimeoutStr) < 0) { + if (StringUtil.isBlank(heartbeatTimeoutStr) || IntegerUtil.parseInt(heartbeatTimeoutStr) < 0) { throw new ConfigException("Column '" + COLUMN_HEARTBEAT_TIMEOUT + "' should be an integer greater than or equal to 0!"); } - if (!StringUtil.isBlank(heartbeatRetryStr) && IntegerUtil.parseInt(heartbeatRetryStr) < 0) { + if (StringUtil.isBlank(heartbeatRetryStr) || IntegerUtil.parseInt(heartbeatRetryStr) < 0) { throw new ConfigException("Column '" + COLUMN_HEARTBEAT_RETRY + "' should be an integer greater than or equal to 0!"); } String heartbeatKeepAliveStr = row.get(COLUMN_KEEP_ALIVE); diff --git a/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbInstance.java b/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbInstance.java index 98e1eaeb9..595680fe4 100644 --- a/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbInstance.java +++ b/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbInstance.java @@ -402,6 +402,8 @@ public class DbleDbInstance extends ManagerWritableTable { DBInstance dbInstance = new DBInstance(); StringBuilder url = new StringBuilder(); List propertyList = Lists.newArrayList(); + String key; + String entryValue; for (Map.Entry entry : map.entrySet()) { switch (entry.getKey()) { case COLUMN_NAME: @@ -469,6 +471,13 @@ public class DbleDbInstance extends ManagerWritableTable { case COLUMN_TEST_ON_BORROW: case COLUMN_TEST_ON_RETURN: case COLUMN_TEST_WHILE_IDLE: + key = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, entry.getKey()); + entryValue = entry.getValue(); + if (StringUtil.isBlank(entryValue) || (!StringUtil.equalsIgnoreCase(entryValue, Boolean.FALSE.toString()) && !StringUtil.equalsIgnoreCase(entryValue, Boolean.TRUE.toString()))) { + throw new ConfigException("Column '" + entry.getKey() + "' values only support 'false' or 'true'."); + } + propertyList.add(new Property(entryValue, key)); + break; case COLUMN_CONNECTION_TIMEOUT: case COLUMN_CONNECTION_HEARTBEAT_TIMEOUT: case COLUMN_TIME_BETWEEN_EVICTION_RUNS_MILLIS: @@ -477,8 +486,12 @@ public class DbleDbInstance extends ManagerWritableTable { case COLUMN_EVICTOR_SHUTDOWN_TIMEOUT_MILLIS: case COLUMN_FLOW_HIGH_LEVEL: case COLUMN_FLOW_LOW_LEVEL: - String key = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, entry.getKey()); - propertyList.add(new Property(entry.getValue(), key)); + key = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, entry.getKey()); + entryValue = entry.getValue(); + if (StringUtil.isBlank(entryValue) || IntegerUtil.parseInt(entryValue) <= 0) { + throw new ConfigException("Column '" + entry.getKey() + "' should be an integer greater than 0!"); + } + propertyList.add(new Property(entryValue, key)); break; default: break; From 7daa18578380e5ad5f2d9721bde614a752080207 Mon Sep 17 00:00:00 2001 From: guoaomen Date: Mon, 10 Jul 2023 17:03:08 +0800 Subject: [PATCH 6/7] fix[inner-2283]: heartbeat_keep_alive add null value judgment --- .../information/tables/DbleDbGroup.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java b/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java index beeab2053..f34664a41 100644 --- a/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java +++ b/src/main/java/com/actiontech/dble/services/manager/information/tables/DbleDbGroup.java @@ -289,30 +289,30 @@ public class DbleDbGroup extends ManagerWritableTable { } } } - String delayThresholdStr = row.get(COLUMN_DELAY_THRESHOLD); - String heartbeatTimeoutStr = row.get(COLUMN_HEARTBEAT_TIMEOUT); - String heartbeatRetryStr = row.get(COLUMN_HEARTBEAT_RETRY); - if (StringUtil.isBlank(delayThresholdStr) || IntegerUtil.parseInt(delayThresholdStr) < -1) { - throw new ConfigException("Column '" + COLUMN_DELAY_THRESHOLD + "' should be an integer greater than or equal to -1!"); - } - if (StringUtil.isBlank(heartbeatTimeoutStr) || IntegerUtil.parseInt(heartbeatTimeoutStr) < 0) { - throw new ConfigException("Column '" + COLUMN_HEARTBEAT_TIMEOUT + "' should be an integer greater than or equal to 0!"); - } - if (StringUtil.isBlank(heartbeatRetryStr) || IntegerUtil.parseInt(heartbeatRetryStr) < 0) { - throw new ConfigException("Column '" + COLUMN_HEARTBEAT_RETRY + "' should be an integer greater than or equal to 0!"); - } - String heartbeatKeepAliveStr = row.get(COLUMN_KEEP_ALIVE); - if (!StringUtil.isBlank(heartbeatKeepAliveStr) && IntegerUtil.parseInt(heartbeatKeepAliveStr) < 0) { - throw new ConfigException("Column '" + COLUMN_KEEP_ALIVE + "' should be an integer greater than or equal to 0!"); - } - String delayPeriodMillis = row.get(DELAY_PERIOD_MILLIS); - delayDetectionCheck(delayPeriodMillis); + checkInterValue(row); } } - private void delayDetectionCheck(String delayPeriodMillis) { - if (!StringUtil.isBlank(delayPeriodMillis) && IntegerUtil.parseInt(delayPeriodMillis) < -1) { - throw new ConfigException("Column '" + COLUMN_DELAY_THRESHOLD + "' should be an integer greater than -1!"); + private void checkInterValue(LinkedHashMap row) { + String delayThresholdStr = row.get(COLUMN_DELAY_THRESHOLD); + String heartbeatTimeoutStr = row.get(COLUMN_HEARTBEAT_TIMEOUT); + String heartbeatRetryStr = row.get(COLUMN_HEARTBEAT_RETRY); + if (row.containsKey(COLUMN_DELAY_THRESHOLD) && (StringUtil.isBlank(delayThresholdStr) || IntegerUtil.parseInt(delayThresholdStr) < -1)) { + throw new ConfigException("Column '" + COLUMN_DELAY_THRESHOLD + "' should be an integer greater than or equal to -1!"); + } + if (row.containsKey(COLUMN_HEARTBEAT_TIMEOUT) && (StringUtil.isBlank(heartbeatTimeoutStr) || IntegerUtil.parseInt(heartbeatTimeoutStr) < 0)) { + throw new ConfigException("Column '" + COLUMN_HEARTBEAT_TIMEOUT + "' should be an integer greater than or equal to 0!"); + } + if (row.containsKey(COLUMN_HEARTBEAT_RETRY) && (StringUtil.isBlank(heartbeatRetryStr) || IntegerUtil.parseInt(heartbeatRetryStr) < 0)) { + throw new ConfigException("Column '" + COLUMN_HEARTBEAT_RETRY + "' should be an integer greater than or equal to 0!"); + } + String heartbeatKeepAliveStr = row.get(COLUMN_KEEP_ALIVE); + if (row.containsKey(COLUMN_KEEP_ALIVE) && (StringUtil.isBlank(heartbeatKeepAliveStr) || IntegerUtil.parseInt(heartbeatKeepAliveStr) < 0)) { + throw new ConfigException("Column '" + COLUMN_KEEP_ALIVE + "' should be an integer greater than or equal to 0!"); + } + String delayPeriodMillis = row.get(DELAY_PERIOD_MILLIS); + if (row.containsKey(DELAY_PERIOD_MILLIS) && (StringUtil.isBlank(delayPeriodMillis) || IntegerUtil.parseInt(delayPeriodMillis) < -1)) { + throw new ConfigException("Column '" + DELAY_PERIOD_MILLIS + "' should be an integer greater than or equal to -1!"); } } From 181d1b42c395077fa01199d105d585cf15057cb4 Mon Sep 17 00:00:00 2001 From: wenyh1 <2365151147@qq.com> Date: Tue, 11 Jul 2023 16:28:11 +0800 Subject: [PATCH 7/7] [inner-2276] adjust conf_template --- src/main/resources/user_template.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/user_template.xml b/src/main/resources/user_template.xml index 86cd38a4e..e66dab78f 100644 --- a/src/main/resources/user_template.xml +++ b/src/main/resources/user_template.xml @@ -33,7 +33,7 @@ - +