[CP] add consumer group name check

This commit is contained in:
zhjc1124
2024-03-28 10:16:04 +00:00
committed by ob-robot
parent 123296d3fc
commit 01f456d73d
3 changed files with 26 additions and 0 deletions

View File

@ -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));
}

View File

@ -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()
{

View File

@ -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);