[CP] Fix invalid mclock and Execute resource_manager related sql in transaction lock
This commit is contained in:
parent
627c87191f
commit
d60182837a
@ -357,7 +357,7 @@ int ObAllVirtualIOQuota::record_user_group(const uint64_t tenant_id, ObIOUsage &
|
||||
io_usage.calculate_io_usage();
|
||||
io_usage.get_io_usage(avg_iops, avg_size, avg_rt);
|
||||
for (int64_t i = 0; i < io_config.group_num_; ++i) {
|
||||
if (io_config.group_configs_.at(i).deleted_) {
|
||||
if (io_config.group_configs_.at(i).deleted_ || io_config.group_configs_.at(i).cleared_) {
|
||||
continue;
|
||||
}
|
||||
for (int64_t j = 0; OB_SUCC(ret) && j < static_cast<int>(ObIOMode::MAX_MODE); ++j) {
|
||||
@ -608,7 +608,7 @@ int ObAllVirtualIOScheduler::init(const common::ObAddr &addr)
|
||||
const ObTenantIOConfig &io_config = tenant_holder.get_ptr()->get_io_config();
|
||||
int64_t group_num = tenant_holder.get_ptr()->get_group_num();
|
||||
for (int64_t index = 0; OB_SUCC(ret) && index < group_num; ++index) {
|
||||
if (io_config.group_configs_.at(index).deleted_) {
|
||||
if (io_config.group_configs_.at(index).deleted_ || io_config.group_configs_.at(i).cleared_) {
|
||||
continue;
|
||||
}
|
||||
ScheduleInfo item;
|
||||
|
@ -436,7 +436,7 @@ int ObTenantIOClock::update_io_clock(const int64_t index, const ObTenantIOConfig
|
||||
const ObTenantIOConfig::GroupConfig &cur_config = io_config.group_configs_.at(index);
|
||||
if (!group_clocks_.at(index).is_inited()) {
|
||||
LOG_WARN("clock is not init", K(ret), K(index), K(group_clocks_.at(index)));
|
||||
} else if (group_clocks_.at(index).is_stop() || cur_config.deleted_) {
|
||||
} else if (group_clocks_.at(index).is_stop() || cur_config.deleted_ || cur_config.cleared_) {
|
||||
// group has been deleted, ignore
|
||||
} else if (!cur_config.is_valid()) {
|
||||
LOG_WARN("config is not valid", K(ret), K(index), K(cur_config), K(group_clocks_.at(index)));
|
||||
|
@ -1149,7 +1149,7 @@ bool ObTenantIOConfig::is_valid() const
|
||||
int64_t sum_min_percent = 0;
|
||||
int64_t sum_weight_percent = 0;
|
||||
for (int64_t i = 0; i < group_num_; ++i) {
|
||||
if (group_configs_.at(i).is_valid() && !group_configs_.at(i).deleted_) {
|
||||
if (group_configs_.at(i).is_valid() && !group_configs_.at(i).deleted_ && !group_configs_.at(i).cleared_) {
|
||||
sum_min_percent += group_configs_.at(i).min_percent_;
|
||||
sum_weight_percent += group_configs_.at(i).weight_percent_;
|
||||
}
|
||||
|
@ -1202,6 +1202,7 @@ int ObTenantIOManager::delete_consumer_group_config(const int64_t group_id)
|
||||
} else if (OB_STATE_NOT_MATCH == ret) {
|
||||
// group delete twice
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("group delete twice", K(ret), K(index), K(group_id));
|
||||
} else {
|
||||
LOG_WARN("get index from map failed", K(ret), K(group_id), K(index));
|
||||
}
|
||||
|
@ -133,41 +133,43 @@ int ObResourceManagerProxy::delete_plan(
|
||||
const common::ObString &plan)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObMySQLTransaction trans;
|
||||
TransGuard trans_guard(trans, tenant_id, ret);
|
||||
if (trans_guard.ready()) {
|
||||
int64_t affected_rows = 0;
|
||||
ObSqlString sql;
|
||||
// 删除 plan 时要级联删除 directive
|
||||
const char *tname_directive = OB_ALL_RES_MGR_DIRECTIVE_TNAME;
|
||||
const char *tname_plan = OB_ALL_RES_MGR_PLAN_TNAME;
|
||||
if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_PLAN */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND PLAN = '%.*s'",
|
||||
tname_plan, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
plan.length(), plan.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
} else if (1 != affected_rows) {
|
||||
ret = OB_ERR_RES_PLAN_NOT_EXIST;
|
||||
LOG_USER_ERROR(OB_ERR_RES_PLAN_NOT_EXIST, plan.length(), plan.ptr());
|
||||
} else if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_PLAN */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND PLAN = '%.*s'",
|
||||
tname_directive, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
plan.length(), plan.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
{
|
||||
ObMySQLTransaction trans;
|
||||
TransGuard trans_guard(trans, tenant_id, ret);
|
||||
if (trans_guard.ready()) {
|
||||
int64_t affected_rows = 0;
|
||||
ObSqlString sql;
|
||||
// 删除 plan 时要级联删除 directive
|
||||
const char *tname_directive = OB_ALL_RES_MGR_DIRECTIVE_TNAME;
|
||||
const char *tname_plan = OB_ALL_RES_MGR_PLAN_TNAME;
|
||||
if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_PLAN */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND PLAN = '%.*s'",
|
||||
tname_plan, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
plan.length(), plan.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
} else if (1 != affected_rows) {
|
||||
ret = OB_ERR_RES_PLAN_NOT_EXIST;
|
||||
LOG_USER_ERROR(OB_ERR_RES_PLAN_NOT_EXIST, plan.length(), plan.ptr());
|
||||
} else if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_PLAN */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND PLAN = '%.*s'",
|
||||
tname_directive, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
plan.length(), plan.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
@ -306,43 +308,46 @@ int ObResourceManagerProxy::delete_consumer_group(
|
||||
const common::ObString &consumer_group)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObMySQLTransaction trans;
|
||||
TransGuard trans_guard(trans, tenant_id, ret);
|
||||
if (trans_guard.ready()) {
|
||||
int64_t affected_rows = 0;
|
||||
ObSqlString sql;
|
||||
// 删除 group 时要级联删除 directive
|
||||
const char *tname_consumer_group = OB_ALL_RES_MGR_CONSUMER_GROUP_TNAME;
|
||||
const char *tname_directive = OB_ALL_RES_MGR_DIRECTIVE_TNAME;
|
||||
if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_CONSUMER_GROUP */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND CONSUMER_GROUP = '%.*s'",
|
||||
tname_consumer_group, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
consumer_group.length(), consumer_group.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
} else if (1 != affected_rows) {
|
||||
ret = OB_ERR_CONSUMER_GROUP_NOT_EXIST;
|
||||
LOG_USER_ERROR(OB_ERR_CONSUMER_GROUP_NOT_EXIST, consumer_group.length(), consumer_group.ptr());
|
||||
} else if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_CONSUMER_GROUP */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND GROUP_OR_SUBPLAN = '%.*s'",
|
||||
tname_directive, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
consumer_group.length(), consumer_group.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
{
|
||||
ObMySQLTransaction trans;
|
||||
TransGuard trans_guard(trans, tenant_id, ret);
|
||||
if (trans_guard.ready()) {
|
||||
int64_t affected_rows = 0;
|
||||
ObSqlString sql;
|
||||
// 删除 group 时要级联删除 directive
|
||||
const char *tname_consumer_group = OB_ALL_RES_MGR_CONSUMER_GROUP_TNAME;
|
||||
const char *tname_directive = OB_ALL_RES_MGR_DIRECTIVE_TNAME;
|
||||
if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_CONSUMER_GROUP */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND CONSUMER_GROUP = '%.*s'",
|
||||
tname_consumer_group, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
consumer_group.length(), consumer_group.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
} else if (1 != affected_rows) {
|
||||
ret = OB_ERR_CONSUMER_GROUP_NOT_EXIST;
|
||||
LOG_USER_ERROR(OB_ERR_CONSUMER_GROUP_NOT_EXIST, consumer_group.length(), consumer_group.ptr());
|
||||
} else if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_RES_CONSUMER_GROUP */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND GROUP_OR_SUBPLAN = '%.*s'",
|
||||
tname_directive, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
consumer_group.length(), consumer_group.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(
|
||||
tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret)) {
|
||||
// 在这里inner sql之后就stop io_control的原因是,无法从内部表读到被删除group的信息
|
||||
if (OB_FAIL(GCTX.cgroup_ctrl_->delete_group_iops(tenant_id, 1, consumer_group))) {
|
||||
@ -986,7 +991,7 @@ int ObResourceManagerProxy::update_plan_directive(
|
||||
!min_iops.is_null() &&
|
||||
OB_SUCC(get_percentage("NEW_MIN_IOPS", min_iops, v))) {
|
||||
new_iops_minimum = v;
|
||||
ret = sql.append_fmt("%s MIN_IOPS=%ld", comma, v);
|
||||
ret = sql.append_fmt("%s MIN_IOPS=%ld", comma, new_iops_minimum);
|
||||
comma = ",";
|
||||
}
|
||||
if (OB_SUCC(ret) &&
|
||||
@ -1002,7 +1007,7 @@ int ObResourceManagerProxy::update_plan_directive(
|
||||
ret = OB_INVALID_CONFIG;
|
||||
LOG_WARN("invalid iops config", K(ret), K(tenant_id), K(new_iops_minimum), K(new_iops_maximum));
|
||||
} else {
|
||||
ret = sql.append_fmt("%s MAX_IOPS=%ld", comma, v);
|
||||
ret = sql.append_fmt("%s MAX_IOPS=%ld", comma, new_iops_maximum);
|
||||
comma = ",";
|
||||
}
|
||||
}
|
||||
@ -1043,35 +1048,38 @@ int ObResourceManagerProxy::delete_plan_directive(
|
||||
const ObString &group)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObMySQLTransaction trans;
|
||||
TransGuard trans_guard(trans, tenant_id, ret);
|
||||
if (trans_guard.ready()) {
|
||||
int64_t affected_rows = 0;
|
||||
ObSqlString sql;
|
||||
const char *tname = OB_ALL_RES_MGR_DIRECTIVE_TNAME;
|
||||
bool exist = false;
|
||||
if (OB_FAIL(check_if_plan_directive_exist(trans, tenant_id, plan, group, exist))) {
|
||||
LOG_WARN("fail check if plan exist", K(tenant_id), K(plan), K(group), K(ret));
|
||||
} else if (!exist) {
|
||||
ret = OB_ERR_PLAN_DIRECTIVE_NOT_EXIST;
|
||||
LOG_USER_ERROR(OB_ERR_PLAN_DIRECTIVE_NOT_EXIST,
|
||||
plan.length(), plan.ptr(), group.length(), group.ptr());
|
||||
} else if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_PLAN_DIRECTIVE */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND PLAN = '%.*s' AND GROUP_OR_SUBPLAN = '%.*s'",
|
||||
tname, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
plan.length(), plan.ptr(), group.length(), group.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
} else if (affected_rows != 1) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("affected row value not expected", K(affected_rows), K(ret));
|
||||
{
|
||||
ObMySQLTransaction trans;
|
||||
TransGuard trans_guard(trans, tenant_id, ret);
|
||||
if (trans_guard.ready()) {
|
||||
int64_t affected_rows = 0;
|
||||
ObSqlString sql;
|
||||
const char *tname = OB_ALL_RES_MGR_DIRECTIVE_TNAME;
|
||||
bool exist = false;
|
||||
if (OB_FAIL(check_if_plan_directive_exist(trans, tenant_id, plan, group, exist))) {
|
||||
LOG_WARN("fail check if plan exist", K(tenant_id), K(plan), K(group), K(ret));
|
||||
} else if (!exist) {
|
||||
ret = OB_ERR_PLAN_DIRECTIVE_NOT_EXIST;
|
||||
LOG_USER_ERROR(OB_ERR_PLAN_DIRECTIVE_NOT_EXIST,
|
||||
plan.length(), plan.ptr(), group.length(), group.ptr());
|
||||
} else if (OB_FAIL(sql.assign_fmt(
|
||||
"DELETE /* REMOVE_PLAN_DIRECTIVE */ FROM %s "
|
||||
"WHERE TENANT_ID = %ld AND PLAN = '%.*s' AND GROUP_OR_SUBPLAN = '%.*s'",
|
||||
tname, ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id),
|
||||
plan.length(), plan.ptr(), group.length(), group.ptr()))) {
|
||||
LOG_WARN("fail append value", K(ret));
|
||||
} else if (OB_FAIL(trans.write(tenant_id,
|
||||
sql.ptr(),
|
||||
affected_rows))) {
|
||||
trans.reset_last_error();
|
||||
LOG_WARN("fail to execute sql", K(sql), K(ret));
|
||||
} else if (affected_rows != 1) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("affected row value not expected", K(affected_rows), K(ret));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret)) {
|
||||
// 在这里inner sql之后就stop的原因是, 无法从内部表读到被删除group的信息
|
||||
if (OB_FAIL(GCTX.cgroup_ctrl_->reset_group_iops(
|
||||
|
Loading…
x
Reference in New Issue
Block a user