[CP] Fix: fix memory leak induced by foreign key casacde delete check duplicate rowkey

This commit is contained in:
obdev
2024-03-27 04:15:38 +00:00
committed by ob-robot
parent c169610149
commit 62eb9bd22b
10 changed files with 68 additions and 193 deletions

View File

@ -139,8 +139,6 @@ ObBasicSessionInfo::ObBasicSessionInfo(const uint64_t tenant_id)
inf_pc_configs_(),
curr_trans_last_stmt_end_time_(0),
check_sys_variable_(true),
is_foreign_key_cascade_(false),
is_foreign_key_check_exist_(false),
acquire_from_pool_(false),
release_to_pool_(true),
is_tenant_killed_(0),
@ -431,8 +429,6 @@ void ObBasicSessionInfo::reset(bool skip_sys_var)
curr_trans_last_stmt_end_time_ = 0;
reserved_read_snapshot_version_.reset();
check_sys_variable_ = true;
is_foreign_key_cascade_ = false;
is_foreign_key_check_exist_ = false;
acquire_from_pool_ = false;
// 不要重置release_to_pool_,原因见属性声明位置的注释。
is_tenant_killed_ = 0;
@ -4416,6 +4412,9 @@ OB_DEF_SERIALIZE(ObBasicSessionInfo)
bool need_serial_exec = false;
uint64_t sql_scope_flags = sql_scope_flags_.get_flags();
// No meaningful field for serialization compatibility
bool is_foreign_key_cascade = false;
bool is_foreign_key_check_exist = false;
LST_DO_CODE(OB_UNIS_ENCODE,
sys_vars_cache_.inc_data_,
unused_safe_weak_read_snapshot,
@ -4439,10 +4438,10 @@ OB_DEF_SERIALIZE(ObBasicSessionInfo)
labels_,
total_stmt_tables_,
cur_stmt_tables_,
is_foreign_key_cascade_,
is_foreign_key_cascade,
sys_var_in_pc_str_,
config_in_pc_str_,
is_foreign_key_check_exist_,
is_foreign_key_check_exist,
need_serial_exec,
sql_scope_flags,
stmt_type_,
@ -4620,6 +4619,9 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
flt_vars_.last_flt_trace_id_.reset();
flt_vars_.last_flt_span_id_.reset();
const ObTZInfoMap *tz_info_map = tz_info_wrap_.get_tz_info_offset().get_tz_info_map();
// No meaningful field for serialization compatibility
bool is_foreign_key_cascade = false;
bool is_foreign_key_check_exist = false;
LST_DO_CODE(OB_UNIS_DECODE,
sys_vars_cache_.inc_data_,
unused_safe_weak_read_snapshot,
@ -4643,10 +4645,10 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
labels_,
total_stmt_tables_,
cur_stmt_tables_,
is_foreign_key_cascade_,
is_foreign_key_cascade,
sys_var_in_pc_str_,
config_in_pc_str_,
is_foreign_key_check_exist_,
is_foreign_key_check_exist,
need_serial_exec,
sql_scope_flags,
stmt_type_,
@ -4952,7 +4954,9 @@ OB_DEF_SERIALIZE_SIZE(ObBasicSessionInfo)
int64_t unused_safe_weak_read_snapshot = 0;
bool need_serial_exec = false;
uint64_t sql_scope_flags = sql_scope_flags_.get_flags();
// No meaningful field for serialization compatibility
bool is_foreign_key_cascade = false;
bool is_foreign_key_check_exist = false;
LST_DO_CODE(OB_UNIS_ADD_LEN,
sys_vars_cache_.inc_data_,
unused_safe_weak_read_snapshot,
@ -4976,10 +4980,10 @@ OB_DEF_SERIALIZE_SIZE(ObBasicSessionInfo)
labels_,
total_stmt_tables_,
cur_stmt_tables_,
is_foreign_key_cascade_,
is_foreign_key_cascade,
sys_var_in_pc_str_,
config_in_pc_str_,
is_foreign_key_check_exist_,
is_foreign_key_check_exist,
need_serial_exec,
sql_scope_flags,
stmt_type_,
@ -5955,10 +5959,6 @@ int ObBasicSessionInfo::base_save_session(BaseSavedValue &saved_value, bool skip
OX (cur_stmt_tables_.reset());
OX (sys_vars_cache_.get_autocommit_info(saved_value.inc_autocommit_));
OX (sys_vars_cache_.set_autocommit_info(false));
OX (saved_value.is_foreign_key_cascade_ = is_foreign_key_cascade_);
OX (is_foreign_key_cascade_ = false);
OX (saved_value.is_foreign_key_check_exist_ = is_foreign_key_check_exist_);
OX (is_foreign_key_check_exist_ = false);
return ret;
}
@ -5989,8 +5989,6 @@ int ObBasicSessionInfo::begin_nested_session(StmtSavedValue &saved_value, bool s
int ObBasicSessionInfo::base_restore_session(BaseSavedValue &saved_value)
{
int ret = OB_SUCCESS;
OX (is_foreign_key_check_exist_ = saved_value.is_foreign_key_check_exist_);
OX (is_foreign_key_cascade_ = saved_value.is_foreign_key_cascade_);
OX (sys_vars_cache_.set_autocommit_info(saved_value.inc_autocommit_));
OZ (cur_stmt_tables_.assign(saved_value.cur_stmt_tables_));
OZ (total_stmt_tables_.assign(saved_value.total_stmt_tables_));

View File

@ -316,7 +316,6 @@ public:
cur_stmt_tables_.reset();
read_uncommited_ = false;
inc_autocommit_ = false;
is_foreign_key_cascade_ = false;
need_serial_exec_ = false;
}
public:
@ -331,8 +330,6 @@ public:
// bool in_transaction_; // 对应TransSavedValue的trans_flags_,不放在基类中。
bool read_uncommited_;
bool inc_autocommit_;
bool is_foreign_key_cascade_;
bool is_foreign_key_check_exist_;
bool need_serial_exec_;
public:
// 原TransSavedValue的属性
@ -1352,11 +1349,6 @@ public:
void set_tenant_killed() { ATOMIC_STORE(&is_tenant_killed_, 1); }
bool is_use_inner_allocator() const;
int64_t get_reused_count() const { return reused_count_; }
bool is_foreign_key_cascade() const { return is_foreign_key_cascade_; }
void set_foreign_key_casecade(bool value) { is_foreign_key_cascade_ = value; }
bool is_foreign_key_check_exist() const { return is_foreign_key_check_exist_; }
void set_foreign_key_check_exist(bool value) { is_foreign_key_check_exist_ = value; }
bool reuse_cur_sql_no() const { return is_foreign_key_cascade() || is_foreign_key_check_exist(); }
inline void set_first_need_txn_stmt_type(stmt::StmtType stmt_type)
{
if (stmt::T_NONE == first_need_txn_stmt_type_) {
@ -2287,8 +2279,6 @@ private:
int64_t curr_trans_last_stmt_end_time_;
bool check_sys_variable_;
bool is_foreign_key_cascade_;
bool is_foreign_key_check_exist_;
bool acquire_from_pool_;
// 在构造函数中初始化为true,在一些特定错误情况下被设为false,表示session不能释放回session pool。
// 所以reset接口中不需要、并且也不能重置release_to_pool_。