fix reuse dblink conn pool of dropped tenant bug

This commit is contained in:
sdc
2023-06-13 08:23:36 +00:00
committed by ob-robot
parent a8ce86fac6
commit cb73a34eda
3 changed files with 9 additions and 5 deletions

View File

@ -29,7 +29,7 @@ public:
virtual ~ObCachedAllocator();
T *alloc();
void free(T *obj);
void free(T *obj, bool can_reuse = true);
int32_t get_allocated_count() const {return allocated_count_;};
int32_t get_cached_count() const {return cached_count_;};
private:
@ -88,12 +88,16 @@ T *ObCachedAllocator<T>::alloc()
}
template<typename T>
void ObCachedAllocator<T>::free(T *obj)
void ObCachedAllocator<T>::free(T *obj, bool can_reuse)
{
if (OB_LIKELY(NULL != obj)) {
int ret = OB_SUCCESS;
ObSpinLockGuard guard(lock_);
if (OB_FAIL(cached_objs_.push_back(obj))) {
if (!can_reuse) {
// free directly
obj->~T();
pool_.free(obj);
} else if (OB_FAIL(cached_objs_.push_back(obj))) {
LIB_LOG(ERROR, "failed to push obj into array", K(ret));
// free directly
obj->~T();

View File

@ -446,7 +446,7 @@ int ObDbLinkProxy::create_dblink_pool(uint64_t tenant_id, uint64_t dblink_id, Db
return ret;
}
int ObDbLinkProxy::acquire_dblink(uint64 tenant_id, uint64_t dblink_id,
int ObDbLinkProxy::acquire_dblink(uint64_t tenant_id, uint64_t dblink_id,
DblinkDriverProto dblink_type,
const dblink_param_ctx &param_ctx,
ObISQLConnection *&dblink_conn,

View File

@ -172,7 +172,7 @@ public:
const common::ObString &conn_str,
const common::ObString &cluster_str,
const sqlclient::dblink_param_ctx &param_ctx);
int acquire_dblink(uint64 tenant_id, uint64_t dblink_id,
int acquire_dblink(uint64_t tenant_id, uint64_t dblink_id,
sqlclient::DblinkDriverProto dblink_type,
const sqlclient::dblink_param_ctx &param_ctx,
sqlclient::ObISQLConnection *&dblink_conn,