[CP] Fix: fix memory leak induced by foreign key casacde delete check duplicate rowkey
This commit is contained in:
@ -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_));
|
||||
|
||||
@ -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_。
|
||||
|
||||
Reference in New Issue
Block a user