adjust flush stat cache failed process

This commit is contained in:
wangt1xiuyi
2023-02-24 16:43:43 +00:00
committed by ob-robot
parent b0a216b002
commit d628e83584
3 changed files with 28 additions and 21 deletions

View File

@ -2993,7 +2993,7 @@ int ObDbmsStats::update_stat_cache(const uint64_t rpc_tenant_id,
LOG_TRACE("update stat cache", K(stat_arg));
bool evict_plan_failed = false;
int64_t timeout = -1;
ObSEArray<ObServerLocality, 8> all_server_arr;
ObSEArray<ObServerLocality, 4> all_server_arr;
bool has_read_only_zone = false; // UNUSED;
if (OB_ISNULL(GCTX.srv_rpc_proxy_) || OB_ISNULL(GCTX.locality_manager_)) {
ret = OB_INVALID_ARGUMENT;
@ -3002,6 +3002,7 @@ int ObDbmsStats::update_stat_cache(const uint64_t rpc_tenant_id,
has_read_only_zone))) {
LOG_WARN("fail to get server locality", K(ret));
} else {
ObSEArray<ObServerLocality, 4> failed_server_arr;
for (int64_t i = 0; OB_SUCC(ret) && i < all_server_arr.count(); i++) {
if (!all_server_arr.at(i).is_active()
|| ObServerStatus::OB_SERVER_ACTIVE != all_server_arr.at(i).get_server_status()
@ -3015,24 +3016,15 @@ int ObDbmsStats::update_stat_cache(const uint64_t rpc_tenant_id,
.timeout(timeout)
.by(rpc_tenant_id)
.update_local_stat_cache(stat_arg))) {
// OB_SQL_PC_NOT_EXIST represent evict plan failed
if (OB_SQL_PC_NOT_EXIST == ret) {
ret = OB_SUCCESS;
evict_plan_failed = true;
} else {
LOG_WARN("failed to update local stat cache", K(ret));
LOG_WARN("failed to update local stat cache caused by unknow error",
K(ret), K(all_server_arr.at(i).get_addr()), K(stat_arg));
//ignore flush cache failed, TODO @jiangxiu.wt can aduit it and flush cache manually later
if (OB_FAIL(failed_server_arr.push_back(all_server_arr.at(i)))) {
LOG_WARN("failed to push back", K(ret));
}
}
}
if (OB_SUCC(ret) && evict_plan_failed) {
ret = OB_ERR_DBMS_STATS_PL;
LOG_USER_ERROR(OB_ERR_DBMS_STATS_PL,
"Evict plan cache failed. SQL execution will use origin plan. " \
"Try flush plan cache manually if you want to generate plan with " \
"latest statistics.");
} else {
LOG_TRACE("Succeed to update stat cache", K(param), K(stat_arg), K(all_server_arr));
}
LOG_TRACE("update stat cache", K(param), K(stat_arg), K(failed_server_arr), K(all_server_arr));
}
}
return ret;
@ -4982,9 +4974,15 @@ int ObDbmsStats::flush_database_monitoring_info(sql::ObExecContext &ctx,
int ret = OB_SUCCESS;
UNUSED(params);
UNUSED(result);
bool is_flush_col_usage = true;
bool is_flush_dml_stat = true;
bool ignore_failed = false;
if (OB_FAIL(check_statistic_table_writeable(ctx))) {
LOG_WARN("failed to check tenant is restore", K(ret));
} else if (OB_FAIL(ObOptStatMonitorManager::flush_database_monitoring_info(ctx))) {
} else if (OB_FAIL(ObOptStatMonitorManager::flush_database_monitoring_info(ctx,
is_flush_col_usage,
is_flush_dml_stat,
ignore_failed))) {
LOG_WARN("failed to do flush database monitoring info", K(ret));
}
return ret;

View File

@ -169,11 +169,12 @@ ObOptStatMonitorManager &ObOptStatMonitorManager::get_instance()
int ObOptStatMonitorManager::flush_database_monitoring_info(sql::ObExecContext &ctx,
const bool is_flush_col_usage,
const bool is_flush_dml_stat)
const bool is_flush_dml_stat,
const bool ignore_failed)
{
int ret = OB_SUCCESS;
int64_t timeout = -1;
ObSEArray<ObServerLocality, 8> all_server_arr;
ObSEArray<ObServerLocality, 4> all_server_arr;
bool has_read_only_zone = false; // UNUSED;
if (OB_ISNULL(ctx.get_my_session()) ||
OB_ISNULL(GCTX.srv_rpc_proxy_) ||
@ -189,6 +190,7 @@ int ObOptStatMonitorManager::flush_database_monitoring_info(sql::ObExecContext &
has_read_only_zone))) {
LOG_WARN("fail to get server locality", K(ret));
} else {
ObSEArray<ObServerLocality, 4> failed_server_arr;
for (int64_t i = 0; OB_SUCC(ret) && i < all_server_arr.count(); i++) {
if (!all_server_arr.at(i).is_active()
|| ObServerStatus::OB_SERVER_ACTIVE != all_server_arr.at(i).get_server_status()
@ -202,9 +204,15 @@ int ObOptStatMonitorManager::flush_database_monitoring_info(sql::ObExecContext &
.timeout(timeout)
.by(ctx.get_my_session()->get_rpc_tenant_id())
.flush_local_opt_stat_monitoring_info(arg))) {
LOG_WARN("failed to flush opt stat monitoring info", K(ret));
LOG_WARN("failed to flush opt stat monitoring info caused by unknow error",
K(ret), K(all_server_arr.at(i).get_addr()), K(arg));
//ignore flush cache failed, TODO @jiangxiu.wt can aduit it and flush cache manually later.
if (ignore_failed && OB_FAIL(failed_server_arr.push_back(all_server_arr.at(i)))) {
LOG_WARN("failed to push back", K(ret));
}
}
}
LOG_TRACE("flush database monitoring info cache", K(arg), K(failed_server_arr), K(all_server_arr));
}
}
return ret;

View File

@ -149,7 +149,8 @@ public:
public:
static int flush_database_monitoring_info(sql::ObExecContext &ctx,
const bool is_flush_col_usage = true,
const bool is_flush_dml_stat = true);
const bool is_flush_dml_stat = true,
const bool ignore_failed = true);
int update_opt_stat_monitoring_info(const bool with_check);
int update_opt_stat_monitoring_info(const obrpc::ObFlushOptStatArg &arg);
int update_local_cache(uint64_t tenant_id, common::ObIArray<ColumnUsageArg> &args);