diff --git a/core/src/main/java/org/zstack/core/config/GlobalConfigFacadeImpl.java b/core/src/main/java/org/zstack/core/config/GlobalConfigFacadeImpl.java index 3b9e489eaf7..75e560a814a 100755 --- a/core/src/main/java/org/zstack/core/config/GlobalConfigFacadeImpl.java +++ b/core/src/main/java/org/zstack/core/config/GlobalConfigFacadeImpl.java @@ -661,6 +661,7 @@ public void validateGlobalConfig(String category, String name, String oldValue, } } + boolean isInteger = Integer.class.getName().equals(config.getType()); config.installQueryExtension(new GlobalConfigQueryExtensionPoint() { @Override public GlobalConfigOptions getConfigOptions() { @@ -669,18 +670,24 @@ public GlobalConfigOptions getConfigOptions() { if (at.validValues().length > 0) { options.setValidValue(Arrays.asList(at.validValues())); } else if (at.inNumberRange().length == 2){ - options.setNumberLessThan(at.inNumberRange()[1] + 1); - options.setNumberGreaterThan(at.inNumberRange()[0] - 1); + options.setNumberLessThanOrEqual(at.inNumberRange()[1]); + options.setNumberGreaterThanOrEqual(at.inNumberRange()[0]); } else if (at.numberLessThan() != Long.MAX_VALUE || at.numberGreaterThan() != Long.MIN_VALUE) { - options.setNumberLessThan(Long.MAX_VALUE); - options.setNumberGreaterThan(Long.MIN_VALUE); + if (isInteger) { + options.setNumberLessThanOrEqual((long) Integer.MAX_VALUE); + options.setNumberGreaterThanOrEqual((long) Integer.MIN_VALUE); + } else { + options.setNumberLessThanOrEqual(Long.MAX_VALUE); + options.setNumberGreaterThanOrEqual(Long.MIN_VALUE); + } } if (at.numberLessThan() != Long.MAX_VALUE) { - options.setNumberLessThan(at.numberLessThan()); + options.setNumberLessThanOrEqual(at.numberLessThan()); } + if (at.numberGreaterThan() != Long.MIN_VALUE) { - options.setNumberGreaterThan(at.numberGreaterThan()); + options.setNumberGreaterThanOrEqual(at.numberGreaterThan()); } return options; diff --git a/core/src/main/java/org/zstack/core/config/GlobalConfigOptions.java b/core/src/main/java/org/zstack/core/config/GlobalConfigOptions.java index 2c35ac6d646..ddb62a08367 100755 --- a/core/src/main/java/org/zstack/core/config/GlobalConfigOptions.java +++ b/core/src/main/java/org/zstack/core/config/GlobalConfigOptions.java @@ -6,6 +6,8 @@ public class GlobalConfigOptions { private List validValue; private Long numberGreaterThan; private Long numberLessThan; + private Long numberGreaterThanOrEqual; + private Long numberLessThanOrEqual; public List getValidValue() { return validValue; @@ -30,4 +32,20 @@ public Long getNumberLessThan() { public void setNumberLessThan(Long numberLessThan) { this.numberLessThan = numberLessThan; } + + public Long getNumberGreaterThanOrEqual() { + return numberGreaterThanOrEqual; + } + + public void setNumberGreaterThanOrEqual(Long numberGreaterThanOrEqual) { + this.numberGreaterThanOrEqual = numberGreaterThanOrEqual; + } + + public Long getNumberLessThanOrEqual() { + return numberLessThanOrEqual; + } + + public void setNumberLessThanOrEqual(Long numberLessThanOrEqual) { + this.numberLessThanOrEqual = numberLessThanOrEqual; + } } diff --git a/core/src/main/java/org/zstack/core/config/GlobalConfigOptionsDoc_zh_cn.groovy b/core/src/main/java/org/zstack/core/config/GlobalConfigOptionsDoc_zh_cn.groovy index 8a2be4db42c..76c01d72be2 100644 --- a/core/src/main/java/org/zstack/core/config/GlobalConfigOptionsDoc_zh_cn.groovy +++ b/core/src/main/java/org/zstack/core/config/GlobalConfigOptionsDoc_zh_cn.groovy @@ -25,4 +25,16 @@ doc { type "Long" since "4.4.0" } + field { + name "numberGreaterThanOrEqual" + desc "大于等于" + type "Long" + since "5.2.0" + } + field { + name "numberLessThanOrEqual" + desc "小于等于" + type "Long" + since "5.2.0" + } } diff --git a/sdk/src/main/java/org/zstack/sdk/GlobalConfigOptions.java b/sdk/src/main/java/org/zstack/sdk/GlobalConfigOptions.java index 3decce47cdf..a2ec7413473 100644 --- a/sdk/src/main/java/org/zstack/sdk/GlobalConfigOptions.java +++ b/sdk/src/main/java/org/zstack/sdk/GlobalConfigOptions.java @@ -28,4 +28,20 @@ public java.lang.Long getNumberLessThan() { return this.numberLessThan; } + public java.lang.Long numberGreaterThanOrEqual; + public void setNumberGreaterThanOrEqual(java.lang.Long numberGreaterThanOrEqual) { + this.numberGreaterThanOrEqual = numberGreaterThanOrEqual; + } + public java.lang.Long getNumberGreaterThanOrEqual() { + return this.numberGreaterThanOrEqual; + } + + public java.lang.Long numberLessThanOrEqual; + public void setNumberLessThanOrEqual(java.lang.Long numberLessThanOrEqual) { + this.numberLessThanOrEqual = numberLessThanOrEqual; + } + public java.lang.Long getNumberLessThanOrEqual() { + return this.numberLessThanOrEqual; + } + } diff --git a/test/src/test/groovy/org/zstack/test/integration/core/config/GlobalConfigCase.groovy b/test/src/test/groovy/org/zstack/test/integration/core/config/GlobalConfigCase.groovy index d39c025a1c4..b14b2c494a2 100755 --- a/test/src/test/groovy/org/zstack/test/integration/core/config/GlobalConfigCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/core/config/GlobalConfigCase.groovy @@ -92,9 +92,9 @@ class GlobalConfigCase extends SubCase { name = KVMGlobalConfig.VM_CREATE_CONCURRENCY.name } as GetGlobalConfigOptionsResult - // number range for this category is {1, 10} - assert configOptions.options.numberGreaterThan == 0 - assert configOptions.options.numberLessThan == 11 + // number range for this category is {1, 10}, 1 <= value <= 10 + assert configOptions.options.numberGreaterThanOrEqual == 1 + assert configOptions.options.numberLessThanOrEqual == 10 } void testGetNumberBoundary() { @@ -103,9 +103,9 @@ class GlobalConfigCase extends SubCase { name = KVMGlobalConfig.HOST_SYNC_LEVEL.name } as GetGlobalConfigOptionsResult - // number boundary for this category is > 2 - assert configOptions.options.numberGreaterThan == 2 - assert configOptions.options.numberLessThan == Long.MAX_VALUE + // number boundary for this category is >=2 , range [2, 2147483647] + assert configOptions.options.numberGreaterThanOrEqual == 2 + assert configOptions.options.numberLessThanOrEqual == (long) Integer.MAX_VALUE } void testFloatPointNumberTolerance() {