Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
clmforever
oceanbase
提交
46579b86
O
oceanbase
项目概览
clmforever
/
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,体验更适合开发者的 AI 搜索 >>
提交
46579b86
编写于
3月 03, 2023
作者:
H
Hongqin-Li
提交者:
ob-robot
3月 03, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix fetch tablet autoinc hang after leader switch
上级
170ebd9b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
30 deletion
+21
-30
src/share/ob_tablet_autoincrement_service.cpp
src/share/ob_tablet_autoincrement_service.cpp
+21
-30
未找到文件。
src/share/ob_tablet_autoincrement_service.cpp
浏览文件 @
46579b86
...
...
@@ -151,40 +151,31 @@ int ObTabletAutoincMgr::fetch_new_range(const ObTabletAutoincParam ¶m,
arg
.
tenant_id_
=
param
.
tenant_id_
;
arg
.
tablet_id_
=
tablet_id
;
arg
.
ls_id_
=
ls_id
;
if
(
OB_FAIL
(
srv_rpc_proxy
->
to
(
leader_addr
).
fetch_tablet_autoinc_seq_cache
(
arg
,
res
)))
{
LOG_WARN
(
"fail to fetch autoinc cache for tablets"
,
K
(
ret
),
K
(
arg
));
}
if
(
OB_FAIL
(
ret
))
{
int
tmp_ret
=
OB_SUCCESS
;
int64_t
retry_times
=
0
;
if
(
OB_NOT_MASTER
==
ret
)
{
if
(
OB_TMP_FAIL
(
location_service
->
get
(
param
.
tenant_id_
,
tablet_id
,
INT64_MAX
/*expire_renew_time*/
,
is_cache_hit
,
ls_id
)))
{
LOG_WARN
(
"fail to get log stream id"
,
K
(
tmp_ret
),
K
(
ret
),
K
(
tablet_id
));
}
else
if
(
OB_TMP_FAIL
(
location_service
->
get_leader
(
GCONF
.
cluster_id
,
param
.
tenant_id_
,
ls_id
,
true
/*force_renew*/
,
leader_addr
)))
{
LOG_WARN
(
"force get leader failed"
,
K
(
tmp_ret
),
K
(
ret
),
K
(
ls_id
));
}
bool
finish
=
false
;
for
(
int64_t
retry_times
=
0
;
OB_SUCC
(
ret
)
&&
!
finish
;
retry_times
++
)
{
if
(
OB_FAIL
(
srv_rpc_proxy
->
to
(
leader_addr
).
fetch_tablet_autoinc_seq_cache
(
arg
,
res
)))
{
LOG_WARN
(
"fail to fetch autoinc cache for tablets"
,
K
(
ret
),
K
(
retry_times
),
K
(
arg
));
}
else
{
finish
=
true
;
}
if
(
OB_SUCCESS
==
tmp_ret
)
{
bool
worker_err
=
false
;
while
(
OB_FAIL
(
ret
)
&&
!
worker_err
&&
is_retryable
(
ret
))
{
++
retry_times
;
ob_usleep
<
common
::
ObWaitEventIds
::
STORAGE_AUTOINC_FETCH_RETRY_SLEEP
>
(
RETRY_INTERVAL
);
res
.
reset
();
if
(
OB_FAIL
(
THIS_WORKER
.
check_status
()))
{
worker_err
=
true
;
LOG_WARN
(
"failed to check status"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
srv_rpc_proxy
->
to
(
leader_addr
).
fetch_tablet_autoinc_seq_cache
(
arg
,
res
)))
{
LOG_WARN
(
"fail to fetch autoinc cache for tablets"
,
K
(
ret
),
K
(
retry_times
),
K
(
arg
));
if
(
OB_FAIL
(
ret
)
&&
is_retryable
(
ret
))
{
const
bool
need_refresh_leader
=
OB_NOT_MASTER
==
ret
;
ob_usleep
<
common
::
ObWaitEventIds
::
STORAGE_AUTOINC_FETCH_RETRY_SLEEP
>
(
RETRY_INTERVAL
);
res
.
reset
();
if
(
OB_FAIL
(
THIS_WORKER
.
check_status
()))
{
// overwrite ret
LOG_WARN
(
"failed to check status"
,
K
(
ret
));
}
else
if
(
need_refresh_leader
)
{
if
(
OB_FAIL
(
location_service
->
get
(
param
.
tenant_id_
,
tablet_id
,
INT64_MAX
/*expire_renew_time*/
,
is_cache_hit
,
ls_id
)))
{
LOG_WARN
(
"fail to get log stream id"
,
K
(
ret
),
K
(
ret
),
K
(
tablet_id
));
}
else
if
(
OB_FAIL
(
location_service
->
get_leader
(
GCONF
.
cluster_id
,
param
.
tenant_id_
,
ls_id
,
true
/*force_renew*/
,
leader_addr
)))
{
LOG_WARN
(
"force get leader failed"
,
K
(
ret
),
K
(
ret
),
K
(
ls_id
));
}
}
}
else
{
LOG_WARN
(
"fetch new range from leader failed"
,
K
(
ret
),
K
(
tmp_ret
));
ret
=
tmp_ret
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录