This is an automated email from the ASF dual-hosted git repository.
wangbo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new e4a7464fced [Improment]Reset workload group's default value (#43942)
e4a7464fced is described below
commit e4a7464fced94d34dbf56e4c1bd41a7210f0a2e8
Author: wangbo <[email protected]>
AuthorDate: Mon Nov 18 15:29:39 2024 +0800
[Improment]Reset workload group's default value (#43942)
1 set cpu_share and memory_limit's default value to -1.
2 unify error message when workload group's value is invalid.
---
be/src/runtime/workload_group/workload_group.cpp | 12 +-
.../resource/workloadgroup/WorkloadGroup.java | 223 +++++++++++----------
.../resource/workloadgroup/WorkloadGroupMgr.java | 12 +-
.../resource/workloadgroup/WorkloadGroupTest.java | 4 +-
.../data/workload_manager_p0/test_curd_wlg.out | 26 ++-
.../workload_manager_p0/test_curd_wlg.groovy | 107 +++++++---
6 files changed, 229 insertions(+), 155 deletions(-)
diff --git a/be/src/runtime/workload_group/workload_group.cpp
b/be/src/runtime/workload_group/workload_group.cpp
index f62179273cf..4a98a4fa8d8 100644
--- a/be/src/runtime/workload_group/workload_group.cpp
+++ b/be/src/runtime/workload_group/workload_group.cpp
@@ -345,19 +345,19 @@ WorkloadGroupInfo WorkloadGroupInfo::parse_topic_info(
// 4 cpu_share
uint64_t cpu_share = CgroupCpuCtl::cpu_soft_limit_default_value();
- if (tworkload_group_info.__isset.cpu_share) {
+ if (tworkload_group_info.__isset.cpu_share &&
tworkload_group_info.cpu_share > 0) {
cpu_share = tworkload_group_info.cpu_share;
}
// 5 cpu hard limit
int cpu_hard_limit = CPU_HARD_LIMIT_DEFAULT_VALUE;
- if (tworkload_group_info.__isset.cpu_hard_limit) {
+ if (tworkload_group_info.__isset.cpu_hard_limit &&
tworkload_group_info.cpu_hard_limit > 0) {
cpu_hard_limit = tworkload_group_info.cpu_hard_limit;
}
// 6 mem_limit
std::string mem_limit_str = MEMORY_LIMIT_DEFAULT_VALUE;
- if (tworkload_group_info.__isset.mem_limit) {
+ if (tworkload_group_info.__isset.mem_limit &&
tworkload_group_info.mem_limit != "-1") {
mem_limit_str = tworkload_group_info.mem_limit;
}
bool is_percent = true;
@@ -410,13 +410,15 @@ WorkloadGroupInfo WorkloadGroupInfo::parse_topic_info(
// 14 scan io
int read_bytes_per_second = -1;
- if (tworkload_group_info.__isset.read_bytes_per_second) {
+ if (tworkload_group_info.__isset.read_bytes_per_second &&
+ tworkload_group_info.read_bytes_per_second > 0) {
read_bytes_per_second = tworkload_group_info.read_bytes_per_second;
}
// 15 remote scan io
int remote_read_bytes_per_second = -1;
- if (tworkload_group_info.__isset.remote_read_bytes_per_second) {
+ if (tworkload_group_info.__isset.remote_read_bytes_per_second &&
+ tworkload_group_info.remote_read_bytes_per_second > 0) {
remote_read_bytes_per_second =
tworkload_group_info.remote_read_bytes_per_second;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroup.java
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroup.java
index 7d5e792ef71..0d5df7ef1cb 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroup.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroup.java
@@ -35,6 +35,7 @@ import org.apache.doris.thrift.TopicInfo;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
import com.google.gson.annotations.SerializedName;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
@@ -105,6 +106,26 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
public static final int SPILL_LOW_WATERMARK_DEFAULT_VALUE = 50;
public static final int SPILL_HIGH_WATERMARK_DEFAULT_VALUE = 80;
+ private static final Map<String, String> ALL_PROPERTIES_DEFAULT_VALUE_MAP
= Maps.newHashMap();
+
+ static {
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(CPU_SHARE, "-1");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(CPU_HARD_LIMIT, "-1");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(MEMORY_LIMIT, "-1");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(ENABLE_MEMORY_OVERCOMMIT, "true");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(MAX_CONCURRENCY,
String.valueOf(Integer.MAX_VALUE));
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(MAX_QUEUE_SIZE, "0");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(QUEUE_TIMEOUT, "0");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(SCAN_THREAD_NUM, "-1");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(MAX_REMOTE_SCAN_THREAD_NUM, "-1");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(MIN_REMOTE_SCAN_THREAD_NUM, "-1");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(SPILL_THRESHOLD_LOW_WATERMARK,
"50%");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(SPILL_THRESHOLD_HIGH_WATERMARK,
"80%");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(TAG, "");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(READ_BYTES_PER_SECOND, "-1");
+ ALL_PROPERTIES_DEFAULT_VALUE_MAP.put(REMOTE_READ_BYTES_PER_SECOND,
"-1");
+ }
+
@SerializedName(value = "id")
private long id;
@@ -135,9 +156,7 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
this.properties = properties;
this.version = version;
if (properties.containsKey(MEMORY_LIMIT)) {
- String memoryLimitString = properties.get(MEMORY_LIMIT);
- this.memoryLimitPercent = Double.parseDouble(
- memoryLimitString.substring(0, memoryLimitString.length()
- 1));
+ setMemLimitPercent(properties);
}
if (properties.containsKey(ENABLE_MEMORY_OVERCOMMIT)) {
properties.put(ENABLE_MEMORY_OVERCOMMIT,
properties.get(ENABLE_MEMORY_OVERCOMMIT).toLowerCase());
@@ -221,15 +240,22 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
}
if (properties.containsKey(CPU_SHARE)) {
- String cpuShare = properties.get(CPU_SHARE);
- if (!StringUtils.isNumeric(cpuShare) || Long.parseLong(cpuShare)
<= 0) {
- throw new DdlException(CPU_SHARE + " " + cpuShare + " requires
a positive integer.");
+ String inputValue = properties.get(CPU_SHARE);
+ try {
+ int cpuShareI = Integer.parseInt(inputValue);
+ if (cpuShareI <= 0 && cpuShareI != -1) {
+ throw new NumberFormatException();
+ }
+ } catch (NumberFormatException e) {
+ throw new DdlException(
+ "The allowed " + CPU_SHARE + " value is -1 or a
positive integer, but input value is "
+ + inputValue);
}
}
if (properties.containsKey(CPU_HARD_LIMIT)) {
- String cpuHardLimit = properties.get(CPU_HARD_LIMIT);
- String originValue = cpuHardLimit;
+ String inputValue = properties.get(CPU_HARD_LIMIT);
+ String cpuHardLimit = inputValue;
try {
boolean endWithSign = false;
if (cpuHardLimit.endsWith("%")) {
@@ -246,33 +272,39 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
}
} catch (NumberFormatException e) {
throw new DdlException(
- "workload group's " + WorkloadGroup.CPU_HARD_LIMIT
- + " must be a positive integer[1,100] or -1,
but input value is " + originValue);
+ "The allowed " + WorkloadGroup.CPU_HARD_LIMIT
+ + " value is -1 or a positive integer between
1 and 100, but input value is "
+ + inputValue);
}
}
if (properties.containsKey(MEMORY_LIMIT)) {
- String memoryLimit = properties.get(MEMORY_LIMIT);
- if (!memoryLimit.endsWith("%")) {
- throw new DdlException(MEMORY_LIMIT + " " + memoryLimit + "
requires a percentage and ends with a '%'");
+ String memoryLimitStr = properties.get(MEMORY_LIMIT);
+ if (!memoryLimitStr.endsWith("%") && !"-1".equals(memoryLimitStr))
{
+ throw new DdlException(
+ MEMORY_LIMIT + " requires a percentage value which
ends with a '%' or -1, but input value is "
+ + memoryLimitStr);
}
- String memLimitErr = MEMORY_LIMIT + " " + memoryLimit + " requires
a positive floating point number.";
- try {
- if (Double.parseDouble(memoryLimit.substring(0,
memoryLimit.length() - 1)) <= 0) {
- throw new DdlException(memLimitErr);
- }
- } catch (NumberFormatException e) {
- if (LOG.isDebugEnabled()) {
- LOG.debug(memLimitErr, e);
+ if (!"-1".equals(memoryLimitStr)) {
+ try {
+ double memLimitD =
Double.parseDouble(memoryLimitStr.substring(0, memoryLimitStr.length() - 1));
+ if (memLimitD <= 0) {
+ throw new NumberFormatException();
+ }
+ } catch (NumberFormatException e) {
+ throw new DdlException("The allowed " + MEMORY_LIMIT
+ + " value is a positive floating point number, but
input value is " + memoryLimitStr);
}
- throw new DdlException(memLimitErr);
}
}
if (properties.containsKey(ENABLE_MEMORY_OVERCOMMIT)) {
- String value =
properties.get(ENABLE_MEMORY_OVERCOMMIT).toLowerCase();
+ String inputValue = properties.get(ENABLE_MEMORY_OVERCOMMIT);
+ String value = inputValue.toLowerCase();
if (!("true".equals(value) || "false".equals(value))) {
- throw new DdlException("The value of '" +
ENABLE_MEMORY_OVERCOMMIT + "' must be true or false.");
+ throw new DdlException(
+ "The value of '" + ENABLE_MEMORY_OVERCOMMIT + "' must
be true or false. but input value is "
+ + inputValue);
}
}
@@ -285,7 +317,8 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
}
} catch (NumberFormatException e) {
throw new DdlException(
- SCAN_THREAD_NUM + " must be a positive integer or -1.
but input value is " + value);
+ "The allowed " + SCAN_THREAD_NUM + " value is -1 or a
positive integer. but input value is "
+ + value);
}
}
@@ -300,7 +333,8 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
maxRemoteScanNum = intValue;
} catch (NumberFormatException e) {
throw new DdlException(
- MAX_REMOTE_SCAN_THREAD_NUM + " must be a positive
integer or -1. but input value is " + value);
+ "The allowed " + MAX_REMOTE_SCAN_THREAD_NUM
+ + " value is -1 or a positive integer. but
input value is " + value);
}
}
@@ -315,7 +349,8 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
minRemoteScanNum = intValue;
} catch (NumberFormatException e) {
throw new DdlException(
- MIN_REMOTE_SCAN_THREAD_NUM + " must be a positive
integer or -1. but input value is " + value);
+ "The allowed " + MIN_REMOTE_SCAN_THREAD_NUM
+ + " value is -1 or a positive integer. but
input value is " + value);
}
}
@@ -328,30 +363,42 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
// check queue property
if (properties.containsKey(MAX_CONCURRENCY)) {
+ String inputValue = properties.get(MAX_CONCURRENCY);
try {
- if (Integer.parseInt(properties.get(MAX_CONCURRENCY)) < 0) {
- throw new DdlException(MAX_CONCURRENCY + " requires a
positive integer");
+ if (Integer.parseInt(inputValue) < 0) {
+ throw new NumberFormatException();
}
} catch (NumberFormatException e) {
- throw new DdlException(MAX_CONCURRENCY + " requires a positive
integer");
+ throw new DdlException(
+ "The allowed " + MAX_CONCURRENCY
+ + " value is an integer greater than or equal
to 0, but input value is "
+ + inputValue);
}
}
if (properties.containsKey(MAX_QUEUE_SIZE)) {
+ String inputValue = properties.get(MAX_QUEUE_SIZE);
try {
- if (Integer.parseInt(properties.get(MAX_QUEUE_SIZE)) < 0) {
- throw new DdlException(MAX_QUEUE_SIZE + " requires a
positive integer");
+ if (Integer.parseInt(inputValue) < 0) {
+ throw new NumberFormatException();
}
} catch (NumberFormatException e) {
- throw new DdlException(MAX_QUEUE_SIZE + " requires a positive
integer");
+ throw new DdlException(
+ "The allowed " + MAX_QUEUE_SIZE
+ + " value is an integer greater than or equal
to 0, but input value is "
+ + inputValue);
}
}
if (properties.containsKey(QUEUE_TIMEOUT)) {
+ String inputValue = properties.get(QUEUE_TIMEOUT);
try {
- if (Integer.parseInt(properties.get(QUEUE_TIMEOUT)) < 0) {
- throw new DdlException(QUEUE_TIMEOUT + " requires a
positive integer");
+ if (Integer.parseInt(inputValue) < 0) {
+ throw new NumberFormatException();
}
} catch (NumberFormatException e) {
- throw new DdlException(QUEUE_TIMEOUT + " requires a positive
integer");
+ throw new DdlException(
+ "The allowed " + QUEUE_TIMEOUT
+ + " value is an integer greater than or equal
to 0, but input value is "
+ + inputValue);
}
}
@@ -363,14 +410,14 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
}
try {
int intValue = Integer.parseInt(lowVal);
- if ((intValue < 1 || intValue > 100) && intValue != -1) {
+ if ((intValue < 1 || intValue > 100)) {
throw new NumberFormatException();
}
lowWaterMark = intValue;
} catch (NumberFormatException e) {
throw new DdlException(
- SPILL_THRESHOLD_LOW_WATERMARK
- + " must be a positive integer(1 ~ 100) or -1.
but input value is "
+ "The allowed " + SPILL_THRESHOLD_LOW_WATERMARK
+ + " value is an integer value between 1 and
100, but input value is "
+ lowVal);
}
}
@@ -389,7 +436,8 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
highWaterMark = intValue;
} catch (NumberFormatException e) {
throw new DdlException(
- SPILL_THRESHOLD_HIGH_WATERMARK + " must be a positive
integer(1 ~ 100). but input value is "
+ "The allowed " + SPILL_THRESHOLD_HIGH_WATERMARK
+ + " value is an integer value between 1 and
100, but input value is "
+ highVal);
}
}
@@ -403,13 +451,13 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
String readBytesVal = properties.get(READ_BYTES_PER_SECOND);
try {
long longVal = Long.parseLong(readBytesVal);
- boolean isValidValue = longVal == -1 || longVal > 0;
- if (!isValidValue) {
+ if (longVal <= 0 && longVal != -1) {
throw new NumberFormatException();
}
} catch (NumberFormatException e) {
throw new DdlException(
- READ_BYTES_PER_SECOND + " should be -1 or an integer
value bigger than 0, but input value is "
+ "The allowed " + READ_BYTES_PER_SECOND
+ + " value should be -1 or an positive integer,
but input value is "
+ readBytesVal);
}
}
@@ -418,13 +466,12 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
String readBytesVal = properties.get(REMOTE_READ_BYTES_PER_SECOND);
try {
long longVal = Long.parseLong(readBytesVal);
- boolean isValidValue = longVal == -1 || longVal > 0;
- if (!isValidValue) {
+ if (longVal <= 0 && longVal != -1) {
throw new NumberFormatException();
}
} catch (NumberFormatException e) {
- throw new DdlException(REMOTE_READ_BYTES_PER_SECOND
- + " should be -1 or an integer value bigger than 0,
but input value is " + readBytesVal);
+ throw new DdlException("The allowed " +
REMOTE_READ_BYTES_PER_SECOND
+ + " value should be -1 or an positive integer, but
input value is " + readBytesVal);
}
}
@@ -476,10 +523,6 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
return version;
}
- public double getMemoryLimitPercent() {
- return memoryLimitPercent;
- }
-
public int getMaxConcurrency() {
return maxConcurrency;
}
@@ -500,70 +543,36 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
// skip id,name,running query,waiting query
for (int i = 2; i <
WorkloadGroupMgr.WORKLOAD_GROUP_PROC_NODE_TITLE_NAMES.size(); i++) {
String key =
WorkloadGroupMgr.WORKLOAD_GROUP_PROC_NODE_TITLE_NAMES.get(i);
- if (CPU_HARD_LIMIT.equals(key)) {
- String val = properties.get(key);
- if (StringUtils.isEmpty(val)) { // cpu_hard_limit is not
required
- row.add("-1");
- } else if ("-1".equals(val)) {
- row.add(val);
- } else {
- row.add(val + "%");
- }
- } else if (CPU_SHARE.equals(key) && !properties.containsKey(key)) {
- row.add("-1");
- } else if (MEMORY_LIMIT.equals(key) &&
!properties.containsKey(key)) {
- row.add("0%");
- } else if (ENABLE_MEMORY_OVERCOMMIT.equals(key) &&
!properties.containsKey(key)) {
- row.add("true");
- } else if (SCAN_THREAD_NUM.equals(key) &&
!properties.containsKey(key)) {
- row.add("-1");
- } else if (MAX_REMOTE_SCAN_THREAD_NUM.equals(key) &&
!properties.containsKey(key)) {
- row.add("-1");
- } else if (MIN_REMOTE_SCAN_THREAD_NUM.equals(key) &&
!properties.containsKey(key)) {
- row.add("-1");
- } else if (SPILL_THRESHOLD_LOW_WATERMARK.equals(key)) {
- String val = properties.get(key);
- if (StringUtils.isEmpty(val)) {
- row.add(SPILL_LOW_WATERMARK_DEFAULT_VALUE + "%");
- } else if ("-1".equals(val)) {
- row.add("-1");
- } else {
- row.add(val + "%");
- }
- } else if (SPILL_THRESHOLD_HIGH_WATERMARK.equals(key)) {
- String val = properties.get(key);
- if (StringUtils.isEmpty(val)) {
- row.add(SPILL_HIGH_WATERMARK_DEFAULT_VALUE + "%");
- } else {
- row.add(val + "%");
- }
- } else if (QueryQueue.RUNNING_QUERY_NUM.equals(key)) {
+ if (QueryQueue.RUNNING_QUERY_NUM.equals(key)) {
row.add(queryQueueDetail == null ? "0" :
String.valueOf(queryQueueDetail.first));
} else if (QueryQueue.WAITING_QUERY_NUM.equals(key)) {
row.add(queryQueueDetail == null ? "0" :
String.valueOf(queryQueueDetail.second));
- } else if (TAG.equals(key)) {
- String val = properties.get(key);
- if (StringUtils.isEmpty(val)) {
- row.add("");
- } else {
- row.add(val);
- }
- } else if (READ_BYTES_PER_SECOND.equals(key) ||
REMOTE_READ_BYTES_PER_SECOND.equals(key)) {
+ } else {
String val = properties.get(key);
if (StringUtils.isEmpty(val)) {
- row.add("-1");
+ row.add(ALL_PROPERTIES_DEFAULT_VALUE_MAP.get(key));
+ } else if ((CPU_HARD_LIMIT.equals(key) && !"-1".equals(val))
+ || SPILL_THRESHOLD_LOW_WATERMARK.equals(key)
+ || SPILL_THRESHOLD_HIGH_WATERMARK.equals(key)) {
+ row.add(val + "%");
} else {
row.add(val);
}
- } else {
- row.add(properties.get(key));
}
}
result.addRow(row);
}
- public int getCpuHardLimit() {
- return cpuHardLimit;
+ public int getCpuHardLimitWhenCalSum() {
+ return cpuHardLimit == -1 ? 0 : cpuHardLimit;
+ }
+
+ public double getMemoryLimitPercentWhenCalSum() {
+ return memoryLimitPercent == -1 ? 0 : memoryLimitPercent;
+ }
+
+ public double getMemoryLimitPercent() {
+ return memoryLimitPercent;
}
public Optional<Set<String>> getTag() {
@@ -684,12 +693,16 @@ public class WorkloadGroup implements Writable,
GsonPostProcessable {
return GsonUtils.GSON.fromJson(json, WorkloadGroup.class);
}
+ void setMemLimitPercent(Map<String, String> props) {
+ String memoryLimitString = props.get(MEMORY_LIMIT);
+ this.memoryLimitPercent = "-1".equals(memoryLimitString) ? -1
+ : Double.parseDouble(memoryLimitString.substring(0,
memoryLimitString.length() - 1));
+ }
+
@Override
public void gsonPostProcess() throws IOException {
if (properties.containsKey(MEMORY_LIMIT)) {
- String memoryLimitString = properties.get(MEMORY_LIMIT);
- this.memoryLimitPercent =
Double.parseDouble(memoryLimitString.substring(0,
- memoryLimitString.length() - 1));
+ setMemLimitPercent(properties);
}
if (properties.containsKey(CPU_HARD_LIMIT)) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
index 26798bb1ec3..31da477912d 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
@@ -434,17 +434,17 @@ public class WorkloadGroupMgr extends MasterDaemon
implements Writable, GsonPost
continue;
}
- if (wg.getCpuHardLimit() > 0) {
- sumOfAllCpuHardLimit += wg.getCpuHardLimit();
+ if (wg.getCpuHardLimitWhenCalSum() > 0) {
+ sumOfAllCpuHardLimit += wg.getCpuHardLimitWhenCalSum();
}
- if (wg.getMemoryLimitPercent() > 0) {
- sumOfAllMemLimit += wg.getMemoryLimitPercent();
+ if (wg.getMemoryLimitPercentWhenCalSum() > 0) {
+ sumOfAllMemLimit += wg.getMemoryLimitPercentWhenCalSum();
}
}
// 2 sum current wg value
- sumOfAllMemLimit += newWg.getMemoryLimitPercent();
- sumOfAllCpuHardLimit += newWg.getCpuHardLimit();
+ sumOfAllMemLimit += newWg.getMemoryLimitPercentWhenCalSum();
+ sumOfAllCpuHardLimit += newWg.getCpuHardLimitWhenCalSum();
// 3 check total sum
if (sumOfAllMemLimit > 100.0 + 1e-6) {
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/resource/workloadgroup/WorkloadGroupTest.java
b/fe/fe-core/src/test/java/org/apache/doris/resource/workloadgroup/WorkloadGroupTest.java
index f99fd4f3526..121f46fe75b 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/resource/workloadgroup/WorkloadGroupTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/resource/workloadgroup/WorkloadGroupTest.java
@@ -62,7 +62,7 @@ public class WorkloadGroupTest {
WorkloadGroup.create(name1, properties1);
Assert.fail();
} catch (DdlException e) {
- Assert.assertTrue(e.getMessage().contains("requires a positive
integer."));
+ Assert.assertTrue(e.getMessage().contains("value is -1 or a
positive integer"));
}
properties1.put(WorkloadGroup.CPU_SHARE, "cpu");
@@ -70,7 +70,7 @@ public class WorkloadGroupTest {
WorkloadGroup.create(name1, properties1);
Assert.fail();
} catch (DdlException e) {
- Assert.assertTrue(e.getMessage().contains("requires a positive
integer."));
+ Assert.assertTrue(e.getMessage().contains("value is -1 or a
positive integer"));
}
}
diff --git a/regression-test/data/workload_manager_p0/test_curd_wlg.out
b/regression-test/data/workload_manager_p0/test_curd_wlg.out
index 0914cd53ea4..aa922615dfe 100644
--- a/regression-test/data/workload_manager_p0/test_curd_wlg.out
+++ b/regression-test/data/workload_manager_p0/test_curd_wlg.out
@@ -11,7 +11,7 @@ test_group 10 10% true 2147483647 0
0 -1 -1 -1 -1
-- !show_del_wg_1 --
normal 20 50% true 2147483647 0 0 1% 16
-test_drop_wg 10 0% true 2147483647 0 0 -1
-1
+test_drop_wg 10 -1 true 2147483647 0 0 -1
-1
test_group 10 10% true 2147483647 0 0 -1
-1
-- !show_del_wg_2 --
@@ -54,24 +54,21 @@ normal 20 50% true 2147483647 0
0 1% 16
test_group 10 11% false 100 0 0 20% -1
-- !show_spill_1 --
-spill_group_test -1 0% true 2147483647 0 0
-1 -1 10% 10%
-
--- !show_spill_1 --
-spill_group_test -1 0% true 2147483647 0 0
-1 -1 -1 10%
+spill_group_test -1 -1 true 2147483647 0 0
-1 -1 10% 10%
-- !show_spill_2 --
-spill_group_test -1 0% true 2147483647 0 0
-1 -1 5% 10%
+spill_group_test -1 -1 true 2147483647 0 0
-1 -1 5% 10%
-- !show_spill_3 --
-spill_group_test -1 0% true 2147483647 0 0
-1 -1 5% 40%
+spill_group_test -1 -1 true 2147483647 0 0
-1 -1 5% 40%
-- !show_wg_tag --
tag1_mem_wg1 50% -1 mem_tag1
tag1_mem_wg2 49% -1 mem_tag1
tag1_mem_wg3 1% -1 mem_tag1
-tag1_wg1 0% 10% tag1
-tag1_wg2 0% 10% tag1
-tag1_wg3 0% 80% tag1
+tag1_wg1 -1 10% tag1
+tag1_wg2 -1 10% tag1
+tag1_wg3 -1 80% tag1
-- !select_remote_scan_num --
20 10
@@ -146,3 +143,12 @@ test_wg_priv_role1 test_wg_priv_g1 Usage_priv NO
-- !select_wgp_12 --
+-- !select_default_val_wg_1 --
+default_val_wg -1 -1 true 2147483647 0 0 -1
-1 -1 -1 50% 80% -1 -1
+
+-- !select_default_val_wg_2 --
+default_val_wg 1024 1% true 100 1 123 1% 1
12 10 50% 80% abc 123 10
+
+-- !select_default_val_wg_3 --
+default_val_wg -1 -1 true 2147483647 0 0 -1
-1 -1 -1 50% 80% -1 -1
+
diff --git a/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
b/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
index 7807578ea81..8eb6b7d92a7 100644
--- a/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
+++ b/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
@@ -31,6 +31,7 @@ suite("test_crud_wlg") {
sql "drop workload group if exists tag1_mem_wg1;"
sql "drop workload group if exists tag1_mem_wg2;"
sql "drop workload group if exists tag1_mem_wg3;"
+ sql "drop workload group if exists tag1_mem_wg4;"
sql "drop workload group if exists bypass_group;"
sql """
@@ -109,13 +110,13 @@ suite("test_crud_wlg") {
test {
sql "alter workload group normal properties ( 'cpu_share'='-2' );"
- exception "requires a positive integer"
+ exception "The allowed cpu_share value is -1 or a positive integer"
}
test {
sql "alter workload group normal properties ( 'scan_thread_num'='0' );"
- exception "scan_thread_num must be a positive integer or -1"
+ exception "The allowed scan_thread_num value is -1 or a positive
integer"
}
sql "drop workload group if exists test_group;"
@@ -165,7 +166,7 @@ suite("test_crud_wlg") {
test {
sql "alter workload group test_group properties (
'cpu_hard_limit'='101%' );"
- exception "must be a positive integer"
+ exception "The allowed cpu_hard_limit value is -1 or a positive
integer"
}
sql "alter workload group test_group properties ( 'cpu_hard_limit'='99%'
);"
@@ -208,39 +209,39 @@ suite("test_crud_wlg") {
test {
sql "alter workload group test_group properties (
'max_concurrency'='-1' );"
- exception "requires a positive integer"
+ exception "The allowed max_concurrency value is an integer greater
than or equal to 0"
}
test {
sql "alter workload group test_group properties (
'max_queue_size'='-1' );"
- exception "requires a positive integer"
+ exception "The allowed max_queue_size value is an integer greater than
or equal to 0"
}
test {
sql "alter workload group test_group properties ( 'queue_timeout'='-1'
);"
- exception "requires a positive integer"
+ exception "The allowed queue_timeout value is an integer greater than
or equal to 0"
}
test {
sql "alter workload group test_group
properties('read_bytes_per_second'='0')"
- exception "an integer value bigger than"
+ exception "The allowed read_bytes_per_second value should be -1 or an
positive integer"
}
test {
sql "alter workload group test_group
properties('read_bytes_per_second'='-2')"
- exception "an integer value bigger than"
+ exception "The allowed read_bytes_per_second value should be -1 or an
positive integer"
}
test {
sql "alter workload group test_group
properties('remote_read_bytes_per_second'='0')"
- exception "an integer value bigger than"
+ exception "The allowed remote_read_bytes_per_second value should be -1
or an positive integer"
}
test {
sql "alter workload group test_group
properties('remote_read_bytes_per_second'='-2')"
- exception "an integer value bigger than"
+ exception "The allowed remote_read_bytes_per_second value should be -1
or an positive integer"
}
sql "alter workload group test_group properties ( 'max_concurrency'='100'
);"
@@ -254,12 +255,12 @@ suite("test_crud_wlg") {
test {
sql "create workload group if not exists test_group2 " +
"properties ( " +
- " 'cpu_share'='-1', " +
+ " 'cpu_share'='-2', " +
" 'memory_limit'='1%', " +
" 'enable_memory_overcommit'='true' " +
");"
- exception "requires a positive integer"
+ exception "The allowed cpu_share value is -1 or a positive integer"
}
// failed for mem_limit
@@ -309,7 +310,7 @@ suite("test_crud_wlg") {
" 'cpu_hard_limit'='120%' " +
");"
- exception "must be a positive integer"
+ exception "a positive integer between 1 and 100"
}
test {
@@ -452,9 +453,6 @@ suite("test_crud_wlg") {
}
// 2 alter low
- sql "alter workload group spill_group_test properties (
'spill_threshold_low_watermark'='-1' );"
- qt_show_spill_1 "select
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num,spill_threshold_low_watermark,spill_threshold_high_watermark
from information_schema.workload_groups where name in ('spill_group_test');"
-
sql "alter workload group spill_group_test properties (
'spill_threshold_low_watermark'='5%' );"
qt_show_spill_2 "select
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num,spill_threshold_low_watermark,spill_threshold_high_watermark
from information_schema.workload_groups where name in ('spill_group_test');"
@@ -465,22 +463,22 @@ suite("test_crud_wlg") {
test {
sql "alter workload group spill_group_test properties (
'spill_threshold_low_watermark'='0%' );"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
test {
sql "alter workload group spill_group_test properties (
'spill_threshold_low_watermark'='101%' );"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
test {
sql "create workload group if not exists spill_group_test2 properties
( 'spill_threshold_low_watermark'='0%')"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
test {
sql "create workload group if not exists spill_group_test2 properties
( 'spill_threshold_low_watermark'='101%')"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
// 3 alter high
@@ -493,22 +491,22 @@ suite("test_crud_wlg") {
test {
sql "alter workload group spill_group_test properties (
'spill_threshold_high_watermark'='0%' );"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
test {
sql "alter workload group spill_group_test properties (
'spill_threshold_high_watermark'='101%' );"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
test {
sql "create workload group if not exists spill_group_test2 properties
( 'spill_threshold_high_watermark'='0%')"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
test {
sql "create workload group if not exists spill_group_test2 properties
( 'spill_threshold_high_watermark'='101%')"
- exception "must be a positive integer"
+ exception "value is an integer value between 1 and 100"
}
sql "drop workload group test_group;"
@@ -523,17 +521,17 @@ suite("test_crud_wlg") {
test {
sql "create workload group if not exists tag1_wg1 properties (
'cpu_hard_limit'='101%', 'tag'='tag1')"
- exception "must be a positive integer"
+ exception "a positive integer between 1 and 100"
}
test {
sql "create workload group if not exists tag1_wg1 properties (
'cpu_hard_limit'='-2%', 'tag'='tag1')"
- exception "must be a positive integer"
+ exception "a positive integer between 1 and 100"
}
test {
sql "create workload group if not exists tag1_wg1 properties (
'cpu_hard_limit'='-1%', 'tag'='tag1')"
- exception "must be a positive integer"
+ exception "a positive integer between 1 and 100"
}
sql "create workload group if not exists tag1_wg1 properties (
'cpu_hard_limit'='10%', 'tag'='tag1');"
@@ -584,6 +582,14 @@ suite("test_crud_wlg") {
sql "alter workload group tag1_mem_wg3 properties ( 'tag'='mem_tag1' );"
+ sql "create workload group tag1_mem_wg4
properties('memory_limit'='-1','tag'='mem_tag1');"
+
+ test {
+ sql "alter workload group tag1_mem_wg4 properties (
'memory_limit'='1%' );"
+ exception "cannot be greater than 100.0%"
+ }
+
+
qt_show_wg_tag "select name,MEMORY_LIMIT,CPU_HARD_LIMIT,TAG from
information_schema.workload_groups where name
in('tag1_wg1','tag1_wg2','tag2_wg1','tag1_wg3','tag1_mem_wg1','tag1_mem_wg2','tag1_mem_wg3')
order by tag,name;"
// test bypass
@@ -668,6 +674,7 @@ suite("test_crud_wlg") {
sql "drop workload group tag1_mem_wg1;"
sql "drop workload group tag1_mem_wg2;"
sql "drop workload group tag1_mem_wg3;"
+ sql "drop workload group tag1_mem_wg4;"
sql "drop workload group bypass_group;"
// test workload group privilege table
@@ -734,4 +741,50 @@ suite("test_crud_wlg") {
qt_select_wgp_12 "select
GRANTEE,WORKLOAD_GROUP_NAME,PRIVILEGE_TYPE,IS_GRANTABLE from
information_schema.workload_group_privileges where grantee like
'%test_wg_priv%' order by
GRANTEE,WORKLOAD_GROUP_NAME,PRIVILEGE_TYPE,IS_GRANTABLE; "
sql "drop workload group test_wg_priv_g1"
+ // test default value
+ sql "drop workload group if exists default_val_wg"
+ sql "create workload group default_val_wg
properties('enable_memory_overcommit'='true');"
+ qt_select_default_val_wg_1 "select
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num,max_remote_scan_thread_num,min_remote_scan_thread_num,spill_threshold_low_watermark,spill_threshold_high_watermark,tag,read_bytes_per_second,remote_read_bytes_per_second
from information_schema.workload_groups where name = 'default_val_wg'"
+
+ sql """
+ alter workload group default_val_wg properties(
+ 'cpu_share'='1024',
+ 'memory_limit'='1%',
+ 'enable_memory_overcommit'='true',
+ 'max_concurrency'='100',
+ 'max_queue_size'='1',
+ 'queue_timeout'='123',
+ 'cpu_hard_limit'='1%',
+ 'scan_thread_num'='1',
+ 'max_remote_scan_thread_num'='12',
+ 'min_remote_scan_thread_num'='10',
+ 'tag'='abc',
+ 'read_bytes_per_second'='123',
+ 'remote_read_bytes_per_second'='10');
+ """
+
+ qt_select_default_val_wg_2 "select
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num,max_remote_scan_thread_num,min_remote_scan_thread_num,spill_threshold_low_watermark,spill_threshold_high_watermark,tag,read_bytes_per_second,remote_read_bytes_per_second
from information_schema.workload_groups where name = 'default_val_wg'"
+
+ sql """
+ alter workload group default_val_wg properties(
+ 'cpu_share'='-1',
+ 'memory_limit'='-1',
+ 'enable_memory_overcommit'='true',
+ 'max_concurrency'='2147483647',
+ 'max_queue_size'='0',
+ 'queue_timeout'='0',
+ 'cpu_hard_limit'='-1',
+ 'scan_thread_num'='-1',
+ 'max_remote_scan_thread_num'='-1',
+ 'min_remote_scan_thread_num'='-1',
+ 'tag'='',
+ 'read_bytes_per_second'='-1',
+ 'remote_read_bytes_per_second'='-1'
+ );
+ """
+
+ qt_select_default_val_wg_3 "select
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num,max_remote_scan_thread_num,min_remote_scan_thread_num,spill_threshold_low_watermark,spill_threshold_high_watermark,tag,read_bytes_per_second,remote_read_bytes_per_second
from information_schema.workload_groups where name = 'default_val_wg'"
+
+ sql "drop workload group if exists default_val_wg"
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]