Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
oceanbase
oceanbase
提交
33d4fae5
O
oceanbase
项目概览
oceanbase
/
oceanbase
2 年多 前同步成功
通知
262
Star
6084
Fork
1301
代码
文件
提交
分支
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看板
提交
33d4fae5
编写于
11月 12, 2025
作者:
L
leftgeek
提交者:
ob-robot
11月 12, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix the bug of inc major merge when rec_scn is included in major sstable
上级
4d366728
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
32 addition
and
19 deletion
+32
-19
src/storage/ddl/ob_inc_ddl_merge_helper.cpp
src/storage/ddl/ob_inc_ddl_merge_helper.cpp
+32
-19
未找到文件。
src/storage/ddl/ob_inc_ddl_merge_helper.cpp
浏览文件 @
33d4fae5
...
...
@@ -780,30 +780,31 @@ int ObIncMajorDDLMergeHelper::assemble_sstable(ObDDLTabletMergeDagParamV2 &merge
ObDDLTabletContext
::
MergeCtx
*
merge_ctx
=
nullptr
;
ObTabletHandle
tablet_handle
;
ObSSTable
*
major_sstable
=
nullptr
;
ObSSTable
*
inc_
major_sstable
=
nullptr
;
ObDDLKvMgrHandle
ddl_kv_mgr_handle
;
ObTablesHandleArray
co_sstable_array
;
ObTableStoreIterator
inc_major_iter
;
bool
major_already_included
=
false
;
bool
inc_major_already_exist
=
false
;
bool
is_
sstables_empty
=
false
;
bool
sstables_empty
=
false
;
/* check param and get ctx */
if
(
!
merge_param
.
is_valid
())
{
ret
=
OB_INVALID_ARGUMENT
;
LOG_WARN
(
"invalid argument"
,
K
(
ret
),
K
(
merge_param
));
}
else
if
(
OB_FAIL
(
merge_param
.
get_tablet_param
(
target_ls_id
,
target_tablet_id
,
tablet_param
)))
{
LOG_WARN
(
"failed to get tablet param"
,
K
(
ret
));
LOG_WARN
(
"failed to get tablet param"
,
K
(
ret
)
,
K
(
tablet_param
)
);
}
else
if
(
OB_FAIL
(
merge_param
.
get_merge_ctx
(
merge_ctx
)))
{
LOG_WARN
(
"failed to get merge ctx"
,
K
(
ret
));
LOG_WARN
(
"failed to get merge ctx"
,
K
(
ret
)
,
K
(
merge_param
)
);
}
else
if
(
OB_ISNULL
(
merge_ctx
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"merge ctx should not be null"
,
K
(
ret
),
K
(
merge_param
));
LOG_WARN
(
"merge ctx should not be null"
,
K
(
ret
),
K
P
(
merge_ctx
),
K
(
merge_param
));
}
/* check inc major sstable exist and build sstable */
if
(
OB_FAIL
(
ret
))
{
}
else
if
(
OB_FAIL
(
ObDirectLoadMgrUtil
::
get_tablet_handle
(
target_ls_id
,
target_tablet_id
,
tablet_handle
)))
{
LOG_WARN
(
"failed to get tablet handle"
,
K
(
ret
));
LOG_WARN
(
"failed to get tablet handle"
,
K
(
ret
)
,
K
(
target_ls_id
),
K
(
target_tablet_id
)
);
}
else
if
(
OB_FAIL
(
tablet_handle
.
get_obj
()
->
get_inc_major_sstables
(
inc_major_iter
,
merge_param
.
trans_id_
,
merge_param
.
seq_no_
)))
{
LOG_WARN
(
"failed to get inc major sstables"
,
K
(
ret
),
K
(
merge_param
));
...
...
@@ -811,24 +812,36 @@ int ObIncMajorDDLMergeHelper::assemble_sstable(ObDDLTabletMergeDagParamV2 &merge
inc_major_already_exist
=
true
;
FLOG_INFO
(
"no need to build sstable because inc major sstable already exist"
,
K
(
inc_major_iter
),
K
(
inc_major_already_exist
),
K
(
merge_param
));
}
else
if
(
OB_FAIL
(
ObDDLMergeTaskUtils
::
build_sstable
(
merge_param
,
co_sstable_array
,
major_sstable
)))
{
}
else
if
(
OB_FAIL
(
ObDDLMergeTaskUtils
::
build_sstable
(
merge_param
,
co_sstable_array
,
inc_major_sstable
)))
{
LOG_WARN
(
"failed to build sstable"
,
KR
(
ret
),
K
(
merge_param
));
}
else
if
(
for_major
)
{
if
(
OB_FAIL
(
check_sstables_empty
(
merge_param
,
co_sstable_array
,
is_sstables_empty
)))
{
ObTabletMemberWrapper
<
ObTabletTableStore
>
table_store_wrapper
;
const
ObSSTable
*
first_major_sstable
=
nullptr
;
if
(
OB_FAIL
(
tablet_handle
.
get_obj
()
->
fetch_table_store
(
table_store_wrapper
)))
{
LOG_WARN
(
"fail to fetch table store"
,
K
(
ret
));
}
else
if
(
OB_FALSE_IT
(
first_major_sstable
=
static_cast
<
ObSSTable
*>
(
table_store_wrapper
.
get_member
()
->
get_major_sstables
().
get_boundary_table
(
false
/*first*/
))))
{
}
else
if
(
OB_NOT_NULL
(
first_major_sstable
)
&&
OB_UNLIKELY
(
first_major_sstable
->
get_snapshot_version
()
>=
merge_param
.
rec_scn_
.
get_val_for_tx
()))
{
major_already_included
=
true
;
FLOG_INFO
(
"rec_scn is already included in major sstable"
,
K
(
major_already_included
),
KPC
(
first_major_sstable
),
K
(
merge_param
));
}
else
if
(
OB_FAIL
(
check_sstables_empty
(
merge_param
,
co_sstable_array
,
sstables_empty
)))
{
LOG_WARN
(
"failed to check sstables empty"
,
KR
(
ret
),
K
(
co_sstable_array
));
}
else
if
(
is_sstables_empty
)
{
// do not record empty inc major sstables to tablet table store
major_sstable
=
nullptr
;
FLOG_INFO
(
"merge empty inc major sstable"
,
K
(
target_ls_id
),
K
(
target_tablet_id
),
K
(
is_sstables_empty
),
K
(
for_major
),
K
(
co_sstable_array
),
KP
(
major_sstable
));
}
if
(
OB_FAIL
(
ret
))
{
}
else
if
(
major_already_included
||
sstables_empty
)
{
inc_major_sstable
=
nullptr
;
FLOG_INFO
(
"no need to record inc major sstable to tablet table store"
,
K
(
target_ls_id
),
K
(
target_tablet_id
),
K
(
major_already_included
),
K
(
sstables_empty
),
K
(
co_sstable_array
),
KP
(
inc_major_sstable
),
K
(
merge_param
));
}
}
/* update tablet table store */
if
(
OB_FAIL
(
ret
))
{
}
else
if
(
OB_NOT_NULL
(
major_sstable
)
&&
OB_FAIL
(
verify_inc_major_sstable
(
*
major_sstable
,
tablet_handle
)))
{
LOG_WARN
(
"failed to verify inc major sstable"
,
KR
(
ret
),
KPC
(
major_sstable
),
K
(
tablet_handle
));
}
else
if
(
OB_FAIL
(
update_tablet_table_store
(
merge_param
,
co_sstable_array
,
major_sstable
)))
{
}
else
if
(
OB_NOT_NULL
(
inc_major_sstable
)
&&
OB_FAIL
(
verify_inc_major_sstable
(
*
inc_
major_sstable
,
tablet_handle
)))
{
LOG_WARN
(
"failed to verify inc major sstable"
,
KR
(
ret
),
KPC
(
inc_
major_sstable
),
K
(
tablet_handle
));
}
else
if
(
OB_FAIL
(
update_tablet_table_store
(
merge_param
,
co_sstable_array
,
inc_
major_sstable
)))
{
LOG_WARN
(
"failed to update tablet table store"
,
K
(
ret
),
K
(
merge_param
));
}
...
...
@@ -845,7 +858,7 @@ int ObIncMajorDDLMergeHelper::assemble_sstable(ObDDLTabletMergeDagParamV2 &merge
}
char
extra_info
[
512
];
snprintf
(
extra_info
,
sizeof
(
extra_info
),
"table_key:{table_type:%s, column_group_idx:%ld, slice_range:{start_slice_idx:%ld, end_slice_idx:%ld}, scn_range:{start_scn:%ld, end_scn:%ld}}, for_major:%s,
is_
sstables_empty:%s, start_scn:%ld, rec_scn:%ld"
,
snprintf
(
extra_info
,
sizeof
(
extra_info
),
"table_key:{table_type:%s, column_group_idx:%ld, slice_range:{start_slice_idx:%ld, end_slice_idx:%ld}, scn_range:{start_scn:%ld, end_scn:%ld}}, for_major:%s, sstables_empty:%s, start_scn:%ld, rec_scn:%ld"
,
ObITable
::
get_table_type_name
(
merge_param
.
table_key_
.
table_type_
),
merge_param
.
table_key_
.
column_group_idx_
,
merge_param
.
table_key_
.
slice_range_
.
start_slice_idx_
,
...
...
@@ -853,7 +866,7 @@ int ObIncMajorDDLMergeHelper::assemble_sstable(ObDDLTabletMergeDagParamV2 &merge
merge_param
.
table_key_
.
scn_range_
.
start_scn_
.
get_val_for_tx
(),
merge_param
.
table_key_
.
scn_range_
.
end_scn_
.
get_val_for_tx
(),
for_major
?
"true"
:
"false"
,
is_
sstables_empty
?
"true"
:
"false"
,
sstables_empty
?
"true"
:
"false"
,
merge_param
.
start_scn_
.
get_val_for_tx
(),
merge_param
.
rec_scn_
.
get_val_for_tx
());
SERVER_EVENT_ADD
(
"direct_load"
,
"ddl merge inc major sstable"
,
...
...
@@ -866,7 +879,7 @@ int ObIncMajorDDLMergeHelper::assemble_sstable(ObDDLTabletMergeDagParamV2 &merge
extra_info
);
FLOG_INFO
(
"[INC_MAJOR_DDL_MERGE_TASK][ASSEMBLE_SSTABLE]"
,
KR
(
ret
),
K
(
target_ls_id
),
K
(
target_tablet_id
),
K
(
inc_major_already_exist
),
K
(
is_sstables_empty
),
K
(
merge_param
),
KP
(
major_sstable
));
K
(
major_already_included
),
K
(
inc_major_already_exist
),
K
(
sstables_empty
),
K
(
merge_param
),
KP
(
inc_
major_sstable
));
return
ret
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录