Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
大炮V587
oceanbase
提交
fbc39031
O
oceanbase
项目概览
大炮V587
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
0
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,发现更多精彩内容 >>
提交
fbc39031
编写于
2月 08, 2023
作者:
O
obdev
提交者:
ob-robot
2月 08, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
try to notify abort in forcing kill tx
上级
5b942b3e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
52 addition
and
22 deletion
+52
-22
src/storage/tx/ob_ctx_tx_data.cpp
src/storage/tx/ob_ctx_tx_data.cpp
+8
-8
src/storage/tx/ob_trans_define.h
src/storage/tx/ob_trans_define.h
+19
-1
src/storage/tx/ob_trans_part_ctx.cpp
src/storage/tx/ob_trans_part_ctx.cpp
+23
-12
src/storage/tx/ob_trans_part_ctx.h
src/storage/tx/ob_trans_part_ctx.h
+2
-1
未找到文件。
src/storage/tx/ob_ctx_tx_data.cpp
浏览文件 @
fbc39031
...
...
@@ -266,13 +266,13 @@ int ObCtxTxData::set_commit_version(const SCN &commit_version)
int
ObCtxTxData
::
set_start_log_ts
(
const
SCN
&
start_ts
)
{
int
ret
=
OB_SUCCESS
;
const
SCN
tmp_start_ts
=
(
start_ts
.
is_valid
()
?
start_ts
:
SCN
::
max_scn
());
//
const SCN tmp_start_ts = (start_ts.is_valid() ? start_ts : SCN::max_scn());
RLockGuard
guard
(
lock_
);
if
(
OB_FAIL
(
check_tx_data_writable_
()))
{
TRANS_LOG
(
WARN
,
"tx data is not writeable"
,
K
(
ret
),
K
(
*
this
));
}
else
{
tx_data_guard_
.
tx_data
()
->
start_scn_
.
atomic_store
(
tmp_
start_ts
);
tx_data_guard_
.
tx_data
()
->
start_scn_
.
atomic_store
(
start_ts
);
}
return
ret
;
...
...
@@ -311,9 +311,9 @@ const SCN ObCtxTxData::get_start_log_ts() const
RLockGuard
guard
(
lock_
);
const
ObTxData
*
tx_data
=
tx_data_guard_
.
tx_data
();
SCN
ctx_scn
=
(
NULL
!=
tx_data
?
tx_data
->
start_scn_
.
atomic_load
()
:
tx_commit_data_
.
start_scn_
.
atomic_load
());
if
(
ctx_scn
.
is_max
())
{
ctx_scn
.
reset
();
}
//
if (ctx_scn.is_max()) {
//
ctx_scn.reset();
//
}
return
ctx_scn
;
}
...
...
@@ -322,9 +322,9 @@ const SCN ObCtxTxData::get_end_log_ts() const
RLockGuard
guard
(
lock_
);
const
ObTxData
*
tx_data
=
tx_data_guard_
.
tx_data
();
SCN
ctx_scn
=
(
NULL
!=
tx_data
?
tx_data
->
end_scn_
.
atomic_load
()
:
tx_commit_data_
.
end_scn_
.
atomic_load
());
if
(
ctx_scn
.
is_max
())
{
ctx_scn
.
reset
();
}
//
if (ctx_scn.is_max()) {
//
ctx_scn.reset();
//
}
return
ctx_scn
;
}
...
...
src/storage/tx/ob_trans_define.h
浏览文件 @
fbc39031
...
...
@@ -1683,13 +1683,31 @@ struct ObMulSourceDataNotifyArg
bool
redo_submitted_
;
bool
redo_synced_
;
// force kill trans without abort scn
bool
is_force_kill_
;
ObMulSourceDataNotifyArg
()
{
reset
();
}
void
reset
()
{
tx_id_
.
reset
();
scn_
.
reset
();
trans_version_
.
reset
();
for_replay_
=
false
;
notify_type_
=
NotifyType
::
ON_ABORT
;
redo_submitted_
=
false
;
redo_synced_
=
false
;
is_force_kill_
=
false
;
}
TO_STRING_KV
(
K_
(
tx_id
),
K_
(
scn
),
K_
(
trans_version
),
K_
(
for_replay
),
K_
(
notify_type
),
K_
(
redo_submitted
),
K_
(
redo_synced
));
K_
(
redo_synced
),
K_
(
is_force_kill
));
// The redo log of current buf_node has been submitted;
bool
is_redo_submitted
()
const
;
...
...
src/storage/tx/ob_trans_part_ctx.cpp
浏览文件 @
fbc39031
...
...
@@ -5647,7 +5647,8 @@ int ObPartTransCtx::prepare_mul_data_source_tx_end_(bool is_commit)
int
ObPartTransCtx
::
notify_data_source_
(
const
NotifyType
notify_type
,
const
SCN
&
log_ts
,
const
bool
for_replay
,
const
ObTxBufferNodeArray
&
notify_array
)
const
ObTxBufferNodeArray
&
notify_array
,
const
bool
is_force_kill
)
{
int
ret
=
OB_SUCCESS
;
ObMulSourceDataNotifyArg
arg
;
...
...
@@ -5656,6 +5657,7 @@ int ObPartTransCtx::notify_data_source_(const NotifyType notify_type,
arg
.
trans_version_
=
ctx_tx_data_
.
get_commit_version
();
arg
.
for_replay_
=
for_replay
;
arg
.
notify_type_
=
notify_type
;
arg
.
is_force_kill_
=
is_force_kill
;
int64_t
total_time
=
0
;
...
...
@@ -6432,18 +6434,27 @@ int ObPartTransCtx::do_force_kill_tx_()
{
int
ret
=
OB_SUCCESS
;
trans_kill_
();
// Force kill cannot guarantee the consistency, so we just set end_log_ts
// to zero
end_log_ts_
.
set_min
();
(
void
)
trans_clear_
();
if
(
OB_FAIL
(
unregister_timeout_task_
()))
{
TRANS_LOG
(
WARN
,
"unregister timer task error"
,
KR
(
ret
),
"context"
,
*
this
);
}
// Ignore ret
set_exiting_
();
TRANS_LOG
(
INFO
,
"transaction killed success"
,
"context"
,
*
this
);
ObTxBufferNodeArray
tmp_array
;
if
(
OB_FAIL
(
gen_total_mds_array_
(
tmp_array
)))
{
TRANS_LOG
(
WARN
,
"gen total mds array failed"
,
KR
(
ret
),
K
(
*
this
));
// } else if (OB_FAIL(notify_data_source_(NotifyType::ON_ABORT,
// ctx_tx_data_.get_end_log_ts() /*invalid_scn*/, false,
// tmp_array, true /*is_force_kill*/))) {
// TRANS_LOG(WARN, "notify data source failed", KR(ret), K(*this));
}
else
{
trans_kill_
();
// Force kill cannot guarantee the consistency, so we just set end_log_ts
// to zero
end_log_ts_
.
set_min
();
(
void
)
trans_clear_
();
if
(
OB_FAIL
(
unregister_timeout_task_
()))
{
TRANS_LOG
(
WARN
,
"unregister timer task error"
,
KR
(
ret
),
"context"
,
*
this
);
}
// Ignore ret
set_exiting_
();
TRANS_LOG
(
INFO
,
"transaction killed success"
,
"context"
,
*
this
);
}
return
ret
;
}
...
...
src/storage/tx/ob_trans_part_ctx.h
浏览文件 @
fbc39031
...
...
@@ -497,7 +497,8 @@ private:
int
notify_data_source_
(
const
NotifyType
type
,
const
share
::
SCN
&
log_ts
,
const
bool
for_replay
,
const
ObTxBufferNodeArray
&
notify_array
);
const
ObTxBufferNodeArray
&
notify_array
,
const
bool
is_force_kill
=
false
);
int
gen_final_mds_array_
(
ObTxBufferNodeArray
&
array
,
bool
is_committing
=
true
)
const
;
int
gen_total_mds_array_
(
ObTxBufferNodeArray
&
mds_array
)
const
;
int
deep_copy_mds_array
(
const
ObTxBufferNodeArray
&
mds_array
,
bool
need_replace
=
false
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录