diff --git a/src/pl/sys_package/ob_pl_dbms_resource_manager.cpp b/src/pl/sys_package/ob_pl_dbms_resource_manager.cpp index 03e92db856..5e805cb3a7 100644 --- a/src/pl/sys_package/ob_pl_dbms_resource_manager.cpp +++ b/src/pl/sys_package/ob_pl_dbms_resource_manager.cpp @@ -133,6 +133,10 @@ int ObPlDBMSResourceManager::create_consumer_group( LOG_WARN("name of consumer group cannot be null or empty", K(ret)); // consumer_group 肯定存在,所以可以 get_string 读取, // COMMENT 是可选的可能为 null,所以传入 ObObj + } else if (!GCTX.cgroup_ctrl_->is_valid_group_name(consumer_group)) { + ret = OB_INVALID_ARGUMENT; + LOG_USER_ERROR(OB_INVALID_ARGUMENT, "invalid consumer group name"); + LOG_WARN("invalid consumer group name", K(ret), K(consumer_group)); } else if (OB_FAIL(proxy.create_consumer_group(tenant_id, consumer_group, params.at(COMMENT)))) { LOG_WARN("fail create consumer_group", K(tenant_id), K(consumer_group), K(ret)); } diff --git a/src/share/resource_manager/ob_cgroup_ctrl.cpp b/src/share/resource_manager/ob_cgroup_ctrl.cpp index 89af785eba..ddbd0d3ebe 100644 --- a/src/share/resource_manager/ob_cgroup_ctrl.cpp +++ b/src/share/resource_manager/ob_cgroup_ctrl.cpp @@ -59,6 +59,26 @@ bool OBGroupIOInfo::is_valid() const return min_percent_ >= 0 && max_percent_ >= min_percent_ && max_percent_ <= 100 && weight_percent_ >= 0 && weight_percent_ <= 100; } +bool ObCgroupCtrl::is_valid_group_name(ObString &group_name) +{ + bool bool_ret = true; + const char *group_name_ptr = group_name.ptr(); + if (group_name.length() < 0 || group_name.length() > GROUP_NAME_BUFSIZE) { + bool_ret = false; + } else { + for(int i = 0; i < group_name.length() && bool_ret; i++) { + // only support [a-zA-Z0-9_] + if (!((group_name_ptr[i] >= 'a' && group_name_ptr[i] <= 'z') || + (group_name_ptr[i] >= 'A' && group_name_ptr[i] <= 'Z') || + (group_name_ptr[i] >= '0' && group_name_ptr[i] <= '9') || + (group_name_ptr[i] == '_'))) { + bool_ret = false; + } + } + } + return bool_ret; +} + // 创建cgroup初始目录结构,将所有线程加入other组 int ObCgroupCtrl::init() { diff --git a/src/share/resource_manager/ob_cgroup_ctrl.h b/src/share/resource_manager/ob_cgroup_ctrl.h index 83187e8fc6..aaa2e1aba3 100644 --- a/src/share/resource_manager/ob_cgroup_ctrl.h +++ b/src/share/resource_manager/ob_cgroup_ctrl.h @@ -143,6 +143,8 @@ public: void destroy() { /* 进程退出后tid会自动从cgroup tasks中删除 */ } bool is_valid() { return valid_; } + bool is_valid_group_name(common::ObString &group_name); + // 删除租户cgroup规则 int remove_tenant_cgroup(const uint64_t tenant_id);