From 2f92accaa3c0d4907fdd4ff04f96a08391406cba Mon Sep 17 00:00:00 2001 From: yiguolei Date: Mon, 13 Jul 2026 17:27:24 +0800 Subject: [PATCH 1/3] [bugfix](memory) should force refresh workload group's config when memlimit changed --- be/src/runtime/workload_group/workload_group.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/be/src/runtime/workload_group/workload_group.cpp b/be/src/runtime/workload_group/workload_group.cpp index 0c0bdf5f74c512..0e8494615db0b0 100644 --- a/be/src/runtime/workload_group/workload_group.cpp +++ b/be/src/runtime/workload_group/workload_group.cpp @@ -162,7 +162,9 @@ void WorkloadGroup::check_and_update(const WorkloadGroupInfo& wg_info) { } { std::lock_guard wl {_mutex}; - if (wg_info.version > _version) { + // In serverless mode, user may modify cgroup's memory limit directly and workload group's config + // is not changed. So that we should update workload group's config ignore version. + if (wg_info.version > _version || _memory_limit != wg_info.memory_limit) { _name = wg_info.name; _version = wg_info.version; _min_cpu_percent = wg_info.min_cpu_percent; From 3b3edf214a75a7db135c3c21f60b5561cdd8c7e2 Mon Sep 17 00:00:00 2001 From: yiguolei Date: Tue, 14 Jul 2026 10:14:49 +0800 Subject: [PATCH 2/3] f --- .../runtime/workload_group/workload_group.cpp | 57 ++++++++----------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/be/src/runtime/workload_group/workload_group.cpp b/be/src/runtime/workload_group/workload_group.cpp index 0e8494615db0b0..a716d16febe596 100644 --- a/be/src/runtime/workload_group/workload_group.cpp +++ b/be/src/runtime/workload_group/workload_group.cpp @@ -154,40 +154,29 @@ void WorkloadGroup::check_and_update(const WorkloadGroupInfo& wg_info) { if (UNLIKELY(wg_info.id != _id)) { return; } - { - std::shared_lock rl {_mutex}; - if (LIKELY(wg_info.version <= _version)) { - return; - } - } - { - std::lock_guard wl {_mutex}; - // In serverless mode, user may modify cgroup's memory limit directly and workload group's config - // is not changed. So that we should update workload group's config ignore version. - if (wg_info.version > _version || _memory_limit != wg_info.memory_limit) { - _name = wg_info.name; - _version = wg_info.version; - _min_cpu_percent = wg_info.min_cpu_percent; - _max_cpu_percent = wg_info.max_cpu_percent; - _memory_limit = wg_info.memory_limit; - _min_memory_percent = wg_info.min_memory_percent; - _max_memory_percent = wg_info.max_memory_percent; - _scan_thread_num = wg_info.scan_thread_num; - _max_remote_scan_thread_num = wg_info.max_remote_scan_thread_num; - _min_remote_scan_thread_num = wg_info.min_remote_scan_thread_num; - _memory_low_watermark = wg_info.memory_low_watermark; - _memory_high_watermark = wg_info.memory_high_watermark; - _scan_bytes_per_second = wg_info.read_bytes_per_second; - _remote_scan_bytes_per_second = wg_info.remote_read_bytes_per_second; - _total_query_slot_count = wg_info.total_query_slot_count; - _slot_mem_policy = wg_info.slot_mem_policy; - if (_max_memory_percent > 0) { - _min_memory_limit = static_cast( - static_cast(_memory_limit * _min_memory_percent) / - _max_memory_percent); - } - } else { - return; + std::lock_guard wl {_mutex}; + // In serverless mode, user may modify cgroup's memory limit directly and workload group's config + // is not changed. So that we should update workload group's config ignore version. + if (wg_info.version > _version || _memory_limit != wg_info.memory_limit) { + _name = wg_info.name; + _version = wg_info.version; + _min_cpu_percent = wg_info.min_cpu_percent; + _max_cpu_percent = wg_info.max_cpu_percent; + _memory_limit = wg_info.memory_limit; + _min_memory_percent = wg_info.min_memory_percent; + _max_memory_percent = wg_info.max_memory_percent; + _scan_thread_num = wg_info.scan_thread_num; + _max_remote_scan_thread_num = wg_info.max_remote_scan_thread_num; + _min_remote_scan_thread_num = wg_info.min_remote_scan_thread_num; + _memory_low_watermark = wg_info.memory_low_watermark; + _memory_high_watermark = wg_info.memory_high_watermark; + _scan_bytes_per_second = wg_info.read_bytes_per_second; + _remote_scan_bytes_per_second = wg_info.remote_read_bytes_per_second; + _total_query_slot_count = wg_info.total_query_slot_count; + _slot_mem_policy = wg_info.slot_mem_policy; + if (_max_memory_percent > 0) { + _min_memory_limit = static_cast( + static_cast(_memory_limit * _min_memory_percent) / _max_memory_percent); } } } From da0cfff7fa21ee5e8aadacb98416f2e45285b514 Mon Sep 17 00:00:00 2001 From: yiguolei Date: Tue, 14 Jul 2026 11:33:16 +0800 Subject: [PATCH 3/3] f --- be/src/runtime/workload_group/workload_group.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/be/src/runtime/workload_group/workload_group.cpp b/be/src/runtime/workload_group/workload_group.cpp index a716d16febe596..51d15297699010 100644 --- a/be/src/runtime/workload_group/workload_group.cpp +++ b/be/src/runtime/workload_group/workload_group.cpp @@ -157,7 +157,8 @@ void WorkloadGroup::check_and_update(const WorkloadGroupInfo& wg_info) { std::lock_guard wl {_mutex}; // In serverless mode, user may modify cgroup's memory limit directly and workload group's config // is not changed. So that we should update workload group's config ignore version. - if (wg_info.version > _version || _memory_limit != wg_info.memory_limit) { + if (wg_info.version > _version || + (wg_info.version == _version && _memory_limit != wg_info.memory_limit)) { _name = wg_info.name; _version = wg_info.version; _min_cpu_percent = wg_info.min_cpu_percent;