to issue<53361277>:support flush pl cache single cache object

This commit is contained in:
hanr881
2023-12-28 09:12:48 +00:00
committed by ob-robot
parent 021fbf0335
commit 2882851e54
18 changed files with 281 additions and 25 deletions

View File

@ -1342,6 +1342,8 @@ int ObPlanCache::foreach_cache_evict(CallBack &cb)
}
template int ObPlanCache::foreach_cache_evict<pl::ObGetPLKVEntryOp>(pl::ObGetPLKVEntryOp &);
template int ObPlanCache::foreach_cache_evict<pl::ObGetPLKVEntryBySchemaIdOp>(pl::ObGetPLKVEntryBySchemaIdOp &);
template int ObPlanCache::foreach_cache_evict<pl::ObGetPLKVEntryBySQLIDOp>(pl::ObGetPLKVEntryBySQLIDOp &);
// Remove all cache object in the lib cache
int ObPlanCache::cache_evict_all_obj()
@ -2567,6 +2569,42 @@ int ObPlanCache::flush_lib_cache_by_ns(const ObLibCacheNameSpace ns)
return ret;
}
template<typename GETPLKVEntryOp, typename EvictAttr>
int ObPlanCache::flush_pl_cache_single_cache_obj(uint64_t db_id, EvictAttr &attr)
{
int ret = OB_SUCCESS;
observer::ObReqTimeGuard req_timeinfo_guard;
if (OB_FAIL(ObPLCacheMgr::cache_evict_pl_cache_single<GETPLKVEntryOp>(this, db_id, attr))) {
SQL_PC_LOG(ERROR, "Plan cache evict failed, please check", K(ret));
}
ObArray<AllocCacheObjInfo> deleted_objs;
int64_t safe_timestamp = INT64_MAX;
if (OB_FAIL(ret)) {
// do nothing
} else if (OB_FAIL(observer::ObGlobalReqTimeService::get_instance()
.get_global_safe_timestamp(safe_timestamp))) {
SQL_PC_LOG(ERROR, "failed to get global safe timestamp", K(ret));
} else if (OB_FAIL(dump_deleted_objs<DUMP_PL>(deleted_objs, safe_timestamp))) {
SQL_PC_LOG(WARN, "failed to get deleted sql objs", K(ret));
} else {
int tmp_ret = OB_SUCCESS;
tmp_ret = OB_E(EventTable::EN_FLUSH_PC_NOT_CLEANUP_LEAK_MEM_ERROR) OB_SUCCESS;
if (OB_SUCCESS == tmp_ret) {
LOG_INFO("Deleted Cache Objs", K(deleted_objs));
for (int64_t i = 0; i < deleted_objs.count(); i++) { // ignore error code and continue
if (OB_FAIL(ObCacheObjectFactory::destroy_cache_obj(true,
deleted_objs.at(i).obj_id_,
this))) {
LOG_WARN("failed to destroy cache obj", K(ret));
}
}
}
}
return ret;
}
template int ObPlanCache::flush_pl_cache_single_cache_obj<ObGetPLKVEntryBySchemaIdOp, uint64_t>(uint64_t db_id, uint64_t &schema_id);
template int ObPlanCache::flush_pl_cache_single_cache_obj<ObGetPLKVEntryBySQLIDOp, common::ObString>(uint64_t db_id, common::ObString &sql_id);
int ObPlanCache::flush_pl_cache()
{

View File

@ -424,6 +424,8 @@ public:
public:
int flush_plan_cache();
int flush_plan_cache_by_sql_id(uint64_t db_id, common::ObString sql_id);
template<typename GETPLKVEntryOp, typename EvictAttr>
int flush_pl_cache_single_cache_obj(uint64_t db_id, EvictAttr &attr);
int flush_lib_cache();
int flush_lib_cache_by_ns(const ObLibCacheNameSpace ns);
int flush_pl_cache();