[CP] [Bugfix] on update current_timestamp bug & TbSessNodeVal memory leak

This commit is contained in:
obdev
2024-02-06 23:13:50 +00:00
committed by ob-robot
parent 44dface5e9
commit c7ee677377
4 changed files with 6 additions and 14 deletions

View File

@ -226,7 +226,7 @@ int ObTableExprCgService::generate_current_timestamp_expr(ObTableCtx &ctx,
int ret = OB_SUCCESS;
ObSysFunRawExpr *tmp_expr = NULL;
if (!IS_DEFAULT_NOW_OBJ(item.default_value_)) {
if ((!IS_DEFAULT_NOW_OBJ(item.default_value_)) && (!item.auto_filled_timestamp_)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid column item", K(ret), K(item));
} else if (OB_ISNULL(item.expr_)) {
@ -440,7 +440,7 @@ int ObTableExprCgService::generate_assign_expr(ObTableCtx &ctx, ObTableAssignmen
if (OB_FAIL(generate_autoinc_nextval_expr(ctx, *item, tmp_expr))) {
LOG_WARN("fail to generate autoinc nextval expr", K(ret));
}
} else if (IS_DEFAULT_NOW_OBJ(item->default_value_)) { // defualt current time
} else if (IS_DEFAULT_NOW_OBJ(item->default_value_) || item->auto_filled_timestamp_) { // defualt current time or on update current_timestamp
if (OB_FAIL(generate_current_timestamp_expr(ctx, *item, tmp_expr))) {
LOG_WARN("fail to generate autoinc nextval expr", K(ret));
}

View File

@ -570,8 +570,7 @@ int ObTableApiSessPool::replace_sess_node_safe(ObTableApiCredential &credential)
void ObTableApiSessNodeVal::destroy()
{
sess_info_.destroy();
allocator_.reset();
sess_info_.~ObSQLSessionInfo();
is_inited_ = false;
owner_node_ = nullptr;
}
@ -592,7 +591,6 @@ int ObTableApiSessNodeVal::init_sess_info()
LOG_WARN("tenant schema is null", K(ret));
} else if (OB_FAIL(ObTableApiSessUtil::init_sess_info(MTL_ID(),
tenant_schema->get_tenant_name_str(),
&allocator_,
schema_guard,
sess_info_))) {
LOG_WARN("fail to init sess info", K(ret), K(MTL_ID()));
@ -790,16 +788,12 @@ int ObTableApiSessForeachOp::operator()(MapKV &entry)
int ObTableApiSessUtil::init_sess_info(uint64_t tenant_id,
const common::ObString &tenant_name,
ObIAllocator *allocator,
ObSchemaGetterGuard &schema_guard,
sql::ObSQLSessionInfo &sess_info)
{
int ret = OB_SUCCESS;
if (OB_ISNULL(allocator)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("allocator is null", K(ret));
} else if (OB_FAIL(sess_info.init(0, 0, allocator))) {
if (OB_FAIL(sess_info.init(0, 0, nullptr))) {
LOG_WARN("fail to init session into", K(ret));
} else if (OB_FAIL(sess_info.init_tenant(tenant_name, tenant_id))) {
LOG_WARN("fail to init session tenant", K(ret), K(tenant_id));

View File

@ -128,8 +128,7 @@ friend class ObTableApiSessNode;
friend class ObTableApiSessGuard;
public:
explicit ObTableApiSessNodeVal(ObTableApiSessNode *owner)
: allocator_("TbSessNodeVal", OB_MALLOC_NORMAL_BLOCK_SIZE, MTL_ID()),
is_inited_(false),
: is_inited_(false),
owner_node_(owner)
{}
TO_STRING_KV(K_(is_inited),
@ -144,7 +143,6 @@ public:
}
void give_back_to_free_list();
private:
common::ObArenaAllocator allocator_;
bool is_inited_;
sql::ObSQLSessionInfo sess_info_;
ObTableApiSessNode *owner_node_;
@ -312,7 +310,6 @@ class ObTableApiSessUtil final
public:
static int init_sess_info(uint64_t tenant_id,
const common::ObString &tenant_name,
common::ObIAllocator *allocator,
share::schema::ObSchemaGetterGuard &schema_guard,
sql::ObSQLSessionInfo &sess_info);
private:

View File

@ -143,6 +143,7 @@ TEST_F(TestTableSessPool, mgr_get_session)
const ObTableApiCredential *cred = nullptr;
ASSERT_EQ(OB_SUCCESS, guard.get_credential(cred));
ASSERT_NE(nullptr, cred);
mgr->destroy();
}
TEST_F(TestTableSessPool, mgr_update_session)