fix ps cache access out of mtl lock
This commit is contained in:
parent
8d8c7bd53d
commit
6525b0514a
@ -40,11 +40,13 @@ int ObAllVirtualPsItemInfo::inner_get_next_row()
|
||||
tenant_id_array_idx_ = 0;
|
||||
} else {
|
||||
uint64_t tenant_id = tenant_id_array_.at(tenant_id_array_idx_);
|
||||
if (OB_FAIL(get_next_row_from_specified_tenant(tenant_id, is_sub_end))) {
|
||||
SERVER_LOG(WARN, "get_next_row_from_specified_tenant failed", K(ret), K(tenant_id));
|
||||
} else {
|
||||
if (is_sub_end) {
|
||||
++tenant_id_array_idx_;
|
||||
MTL_SWITCH(tenant_id) {
|
||||
if (OB_FAIL(get_next_row_from_specified_tenant(tenant_id, is_sub_end))) {
|
||||
SERVER_LOG(WARN, "get_next_row_from_specified_tenant failed", K(ret), K(tenant_id));
|
||||
} else {
|
||||
if (is_sub_end) {
|
||||
++tenant_id_array_idx_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -185,16 +187,14 @@ int ObAllVirtualPsItemInfo::get_next_row_from_specified_tenant(uint64_t tenant_i
|
||||
int ret = OB_SUCCESS;
|
||||
is_end = false;
|
||||
if (OB_INVALID_ID == stmt_id_array_idx_) {
|
||||
MTL_SWITCH(tenant_id) {
|
||||
ps_cache_ = MTL(ObPsCache*);
|
||||
if (false == ps_cache_->is_inited()) {
|
||||
is_end = true;
|
||||
SERVER_LOG(DEBUG, "ps cache is not ready, ignore this", K(ret), K(ps_cache_->is_inited()));
|
||||
} else if (OB_FAIL(ps_cache_->get_all_stmt_id(&stmt_id_array_))) {
|
||||
SERVER_LOG(WARN, "get_all_stmt_id failed", K(ret));
|
||||
} else {
|
||||
stmt_id_array_idx_ = 0;
|
||||
}
|
||||
ps_cache_ = MTL(ObPsCache*);
|
||||
if (false == ps_cache_->is_inited()) {
|
||||
is_end = true;
|
||||
SERVER_LOG(DEBUG, "ps cache is not ready, ignore this", K(ret), K(ps_cache_->is_inited()));
|
||||
} else if (OB_FAIL(ps_cache_->get_all_stmt_id(&stmt_id_array_))) {
|
||||
SERVER_LOG(WARN, "get_all_stmt_id failed", K(ret));
|
||||
} else {
|
||||
stmt_id_array_idx_ = 0;
|
||||
}
|
||||
}
|
||||
if (OB_SUCCESS == ret && false == is_end) {
|
||||
|
@ -80,17 +80,15 @@ int ObGVSql::get_row_from_specified_tenant(uint64_t tenant_id, bool &is_end)
|
||||
ObReqTimeGuard req_timeinfo_guard;
|
||||
is_end = false;
|
||||
if (OB_INVALID_ID == static_cast<uint64_t>(plan_id_array_idx_)) {
|
||||
MTL_SWITCH(tenant_id) {
|
||||
plan_cache_ = MTL(ObPlanCache*);
|
||||
NG_TRACE(trav_ps_map_start);
|
||||
ObGetAllCacheIdOp plan_id_op(&plan_id_array_);
|
||||
if (OB_FAIL(plan_cache_->foreach_cache_obj(plan_id_op))) {
|
||||
SERVER_LOG(WARN, "fail to traverse id2stat_map");
|
||||
} else {
|
||||
plan_id_array_idx_ = 0;
|
||||
}
|
||||
NG_TRACE(trav_ps_map_end);
|
||||
plan_cache_ = MTL(ObPlanCache*);
|
||||
NG_TRACE(trav_ps_map_start);
|
||||
ObGetAllCacheIdOp plan_id_op(&plan_id_array_);
|
||||
if (OB_FAIL(plan_cache_->foreach_cache_obj(plan_id_op))) {
|
||||
SERVER_LOG(WARN, "fail to traverse id2stat_map");
|
||||
} else {
|
||||
plan_id_array_idx_ = 0;
|
||||
}
|
||||
NG_TRACE(trav_ps_map_end);
|
||||
}
|
||||
if (NULL == plan_cache_) {
|
||||
// do nothing
|
||||
@ -899,17 +897,20 @@ int ObGVSql::get_row_from_tenants()
|
||||
ret = OB_ITER_END;
|
||||
tenant_id_array_idx_ = 0;
|
||||
} else {
|
||||
if (OB_FAIL(get_row_from_specified_tenant(tenant_id_array_.at(tenant_id_array_idx_),
|
||||
is_sub_end))) {
|
||||
SERVER_LOG(WARN,
|
||||
"fail to insert plan by tenant id",
|
||||
K(ret),
|
||||
"tenant id",
|
||||
tenant_id_array_.at(tenant_id_array_idx_),
|
||||
K(tenant_id_array_idx_));
|
||||
} else {
|
||||
if (is_sub_end) {
|
||||
++tenant_id_array_idx_;
|
||||
uint64_t tenant_id = tenant_id_array_.at(tenant_id_array_idx_);
|
||||
MTL_SWITCH(tenant_id) {
|
||||
if (OB_FAIL(get_row_from_specified_tenant(tenant_id,
|
||||
is_sub_end))) {
|
||||
SERVER_LOG(WARN,
|
||||
"fail to insert plan by tenant id",
|
||||
K(ret),
|
||||
"tenant id",
|
||||
tenant_id_array_.at(tenant_id_array_idx_),
|
||||
K(tenant_id_array_idx_));
|
||||
} else {
|
||||
if (is_sub_end) {
|
||||
++tenant_id_array_idx_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -165,14 +165,12 @@ int ObVirtualSqlPlanStatistics::get_row_from_specified_tenant(uint64_t tenant_id
|
||||
is_end = false;
|
||||
sql::ObPlanCache *plan_cache = NULL;
|
||||
if (OB_INVALID_ID == static_cast<uint64_t>(operator_stat_array_idx_)) {
|
||||
MTL_SWITCH(tenant_id) {
|
||||
plan_cache = MTL(ObPlanCache*);
|
||||
ObGetAllOperatorStatOp operator_stat_op(&operator_stat_array_);
|
||||
if (OB_FAIL(plan_cache->foreach_cache_obj(operator_stat_op))) {
|
||||
SERVER_LOG(WARN, "fail to traverse id2stat_map");
|
||||
} else {
|
||||
operator_stat_array_idx_ = 0;
|
||||
}
|
||||
plan_cache = MTL(ObPlanCache*);
|
||||
ObGetAllOperatorStatOp operator_stat_op(&operator_stat_array_);
|
||||
if (OB_FAIL(plan_cache->foreach_cache_obj(operator_stat_op))) {
|
||||
SERVER_LOG(WARN, "fail to traverse id2stat_map");
|
||||
} else {
|
||||
operator_stat_array_idx_ = 0;
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
@ -310,17 +308,20 @@ int ObVirtualSqlPlanStatistics::inner_get_next_row(common::ObNewRow *&row)
|
||||
ret = OB_ITER_END;
|
||||
tenant_id_array_idx_ = 0;
|
||||
} else {
|
||||
if (OB_FAIL(get_row_from_specified_tenant(tenant_id_array_.at(tenant_id_array_idx_),
|
||||
is_sub_end))) {
|
||||
SERVER_LOG(WARN,
|
||||
"fail to insert plan by tenant id",
|
||||
K(ret),
|
||||
"tenant id",
|
||||
tenant_id_array_.at(tenant_id_array_idx_),
|
||||
K(tenant_id_array_idx_));
|
||||
} else {
|
||||
if (is_sub_end) {
|
||||
++tenant_id_array_idx_;
|
||||
uint64_t tenant_id = tenant_id_array_.at(tenant_id_array_idx_);
|
||||
MTL_SWITCH(tenant_id) {
|
||||
if (OB_FAIL(get_row_from_specified_tenant(tenant_id,
|
||||
is_sub_end))) {
|
||||
SERVER_LOG(WARN,
|
||||
"fail to insert plan by tenant id",
|
||||
K(ret),
|
||||
"tenant id",
|
||||
tenant_id_array_.at(tenant_id_array_idx_),
|
||||
K(tenant_id_array_idx_));
|
||||
} else {
|
||||
if (is_sub_end) {
|
||||
++tenant_id_array_idx_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user