Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
野花太放肆
oceanbase
提交
17bea01c
O
oceanbase
项目概览
野花太放肆
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oceanbase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
17bea01c
编写于
2月 15, 2023
作者:
C
chinaxing
提交者:
ob-robot
2月 15, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[master][tx-route] fix implicit-start tx push extra-state version
上级
6597151e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
14 addition
and
9 deletion
+14
-9
src/sql/engine/cmd/ob_variable_set_executor.cpp
src/sql/engine/cmd/ob_variable_set_executor.cpp
+5
-5
src/sql/ob_sql_trans_control.cpp
src/sql/ob_sql_trans_control.cpp
+5
-0
src/storage/tx/ob_trans_define_v4.cpp
src/storage/tx/ob_trans_define_v4.cpp
+1
-1
src/storage/tx/ob_tx_free_route.cpp
src/storage/tx/ob_tx_free_route.cpp
+3
-3
未找到文件。
src/sql/engine/cmd/ob_variable_set_executor.cpp
浏览文件 @
17bea01c
...
...
@@ -908,16 +908,15 @@ int ObVariableSetExecutor::process_session_autocommit_hook(ObExecContext &exec_c
{
int
ret
=
OB_SUCCESS
;
ObSQLSessionInfo
*
my_session
=
GET_MY_SESSION
(
exec_ctx
);
bool
orig_ac
=
true
;
int64_t
autocommit
=
0
;
if
(
OB_ISNULL
(
my_session
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"session is NULL"
,
K
(
ret
));
}
else
{
int64_t
autocommit
=
0
;
auto
tx_desc
=
my_session
->
get_tx_desc
();
bool
in_trans
=
OB_NOT_NULL
(
tx_desc
)
&&
tx_desc
->
in_tx_or_has_state
();
bool
ac
=
true
;
if
(
OB_FAIL
(
my_session
->
get_autocommit
(
ac
)))
{
if
(
OB_FAIL
(
my_session
->
get_autocommit
(
orig_ac
)))
{
LOG_WARN
(
"fail to get autocommit"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
val
.
get_int
(
autocommit
)))
{
LOG_WARN
(
"fail get commit val"
,
K
(
val
),
K
(
ret
));
...
...
@@ -928,7 +927,7 @@ int ObVariableSetExecutor::process_session_autocommit_hook(ObExecContext &exec_c
(
int
)
strlen
(
autocommit_str
),
autocommit_str
);
}
else
{
// skip commit txn if this is txn free route temporary node
if
(
false
==
ac
&&
true
==
in_trans
&&
1
==
autocommit
&&
!
my_session
->
is_txn_free_route_temp
())
{
if
(
false
==
orig_
ac
&&
true
==
in_trans
&&
1
==
autocommit
&&
!
my_session
->
is_txn_free_route_temp
())
{
if
(
OB_FAIL
(
ObSqlTransControl
::
implicit_end_trans
(
exec_ctx
,
false
)))
{
LOG_WARN
(
"fail implicit commit trans"
,
K
(
ret
));
}
...
...
@@ -937,6 +936,7 @@ int ObVariableSetExecutor::process_session_autocommit_hook(ObExecContext &exec_c
}
}
}
LOG_INFO
(
"set var: autocommit"
,
K
(
ret
),
K
(
orig_ac
),
"to"
,
autocommit
);
return
ret
;
}
...
...
src/sql/ob_sql_trans_control.cpp
浏览文件 @
17bea01c
...
...
@@ -1088,6 +1088,11 @@ int ObSqlTransControl::check_ls_readable(const uint64_t tenant_id,
session.reset_tx_variable(); \
} \
LOG_DEBUG("update-txn-state", K(ret), K(session), K(prev_tx_id), KPC(tx_desc)); \
if (OB_FAIL(ret)) { \
LOG_WARN("update txn state fail", K(ret), "state", #name, \
K(session.get_txn_free_route_ctx()), \
K(session), K(prev_tx_id), KPC(tx_desc)); \
} \
return ret; \
} \
int ObSqlTransControl::serialize_txn_##name##_state(ObSQLSessionInfo &session, char* buf, const int64_t len, int64_t &pos) \
...
...
src/storage/tx/ob_trans_define_v4.cpp
浏览文件 @
17bea01c
...
...
@@ -568,7 +568,7 @@ void ObTxDesc::implicit_start_tx_()
active_ts_
=
ObClockGenerator
::
getClock
();
expire_ts_
=
active_ts_
+
timeout_us_
;
active_scn_
=
ObSequence
::
get_max_seq_no
();
state_change_flags_
.
STATIC_CHANGED_
=
true
;
state_change_flags_
.
mark_all
()
;
}
}
...
...
src/storage/tx/ob_tx_free_route.cpp
浏览文件 @
17bea01c
...
...
@@ -143,15 +143,15 @@ inline int ObTransService::txn_state_update_verify_by_version_(const ObTxnFreeRo
if
(
ctx
.
is_txn_switch_
)
{
if
(
ctx
.
global_version_water_mark_
>
version
)
{
ret
=
OB_ERR_UNEXPECTED
;
TRANS_LOG
(
ERROR
,
"the state is stale"
,
K
(
ret
),
K
(
version
),
K
_
(
ctx
.
global_version_water_mark
));
TRANS_LOG
(
ERROR
,
"the state is stale"
,
K
(
ret
),
K
(
version
),
K
(
ctx
));
}
// otherwise, the new state's version should be > water_mark
}
else
if
(
ctx
.
global_version_water_mark_
==
version
)
{
ret
=
OB_ERR_UNEXPECTED
;
TRANS_LOG
(
ERROR
,
"duplicated state sync"
,
K
(
ret
),
K
(
version
));
TRANS_LOG
(
ERROR
,
"duplicated state sync"
,
K
(
ret
),
K
(
version
)
,
K
(
ctx
)
);
}
else
if
(
ctx
.
global_version_water_mark_
>
version
)
{
ret
=
OB_ERR_UNEXPECTED
;
TRANS_LOG
(
ERROR
,
"the state is stale"
,
K
(
ret
),
K
(
version
),
K
_
(
ctx
.
global_version_water_mark
));
TRANS_LOG
(
ERROR
,
"the state is stale"
,
K
(
ret
),
K
(
version
),
K
(
ctx
));
}
return
ret
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录