Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lihongda1002
oceanbase
提交
9bbbb315
O
oceanbase
项目概览
lihongda1002
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oceanbase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9bbbb315
编写于
7月 28, 2021
作者:
W
wanhong.wwh
提交者:
wangzelin.wzl
7月 29, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
WRS: add weak read version verification
上级
60c37863
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
40 addition
and
25 deletion
+40
-25
src/share/ob_define.h
src/share/ob_define.h
+6
-0
src/storage/transaction/ob_tenant_weak_read_cluster_service.cpp
...orage/transaction/ob_tenant_weak_read_cluster_service.cpp
+5
-6
src/storage/transaction/ob_tenant_weak_read_server_version_mgr.cpp
...ge/transaction/ob_tenant_weak_read_server_version_mgr.cpp
+10
-5
src/storage/transaction/ob_tenant_weak_read_service.cpp
src/storage/transaction/ob_tenant_weak_read_service.cpp
+3
-2
src/storage/transaction/ob_weak_read_service.cpp
src/storage/transaction/ob_weak_read_service.cpp
+16
-12
未找到文件。
src/share/ob_define.h
浏览文件 @
9bbbb315
...
...
@@ -193,6 +193,12 @@ OB_INLINE bool is_valid_membership_version(const int64_t membership_version)
return
membership_version
>=
0
;
}
OB_INLINE
bool
is_valid_read_snapshot_version
(
const
int64_t
read_snapshot_version
)
{
// read snapshot version should be greater than 0 and should not be INT64_MAX
return
read_snapshot_version
>
0
&&
INT64_MAX
!=
read_snapshot_version
;
}
inline
bool
is_schema_error
(
int
err
)
{
bool
ret
=
false
;
...
...
src/storage/transaction/ob_tenant_weak_read_cluster_service.cpp
浏览文件 @
9bbbb315
...
...
@@ -663,13 +663,12 @@ int ObTenantWeakReadClusterService::update_version(int64_t& affected_rows)
}
else
if
(
OB_UNLIKELY
(
cur_leader_epoch
!=
leader_epoch_
))
{
ret
=
OB_NOT_MASTER
;
CLUSTER_ISTAT
(
"WRS leader changed when update CLUSTER version, need stop CLUSTER weak read service"
,
"tenant_id"
,
wrs_pkey_
.
get_tenant_id
(),
K
(
cur_leader_epoch
),
K
(
leader_epoch_
));
}
else
if
(
!
check_can_update_version_
())
{
"tenant_id"
,
wrs_pkey_
.
get_tenant_id
(),
K
(
cur_leader_epoch
),
K
(
leader_epoch_
));
}
else
if
(
!
check_can_update_version_
())
{
// check if can update version or not
}
else
if
(
OB_UNLIKELY
((
new_version
=
compute_version_
(
skipped_server_count
,
need_print
))
<=
0
))
{
}
else
if
(
FALSE_IT
(
new_version
=
compute_version_
(
skipped_server_count
,
need_print
)))
{
// nothing to do
}
else
if
(
OB_UNLIKELY
(
!
is_valid_read_snapshot_version
(
new_version
)))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"invalid CLUSTER weak read version"
,
K
(
new_version
),
KR
(
ret
));
}
else
{
...
...
src/storage/transaction/ob_tenant_weak_read_server_version_mgr.cpp
浏览文件 @
9bbbb315
...
...
@@ -15,6 +15,8 @@
#include "share/ob_errno.h"
#include "ob_tenant_weak_read_server_version_mgr.h"
#include "share/ob_define.h" // is_valid_read_snapshot_version
using
namespace
oceanbase
::
common
;
namespace
oceanbase
{
namespace
transaction
{
...
...
@@ -64,7 +66,8 @@ int ObTenantWeakReadServerVersionMgr::update_with_part_info(const uint64_t tenan
const
bool
need_skip
,
const
bool
is_user_part
,
const
int64_t
version
)
{
int
ret
=
OB_SUCCESS
;
if
(
OB_UNLIKELY
(
epoch_tstamp
<=
0
)
||
OB_UNLIKELY
(
!
need_skip
&&
version
<=
0
))
{
if
(
OB_UNLIKELY
(
epoch_tstamp
<=
0
)
||
OB_UNLIKELY
(
!
need_skip
&&
!
is_valid_read_snapshot_version
(
version
)))
{
ret
=
OB_INVALID_ARGUMENT
;
LOG_WARN
(
"invalid argument, epoch or version"
,
K
(
ret
),
...
...
@@ -84,8 +87,9 @@ int ObTenantWeakReadServerVersionMgr::generate_new_version(const uint64_t tenant
const
int64_t
base_version_when_no_valid_partition
,
const
bool
need_print_status
)
{
int
ret
=
OB_SUCCESS
;
if
(
OB_UNLIKELY
(
epoch_tstamp
<=
0
)
||
OB_UNLIKELY
(
OB_INVALID_ID
==
tenant_id
)
||
OB_UNLIKELY
(
base_version_when_no_valid_partition
<=
0
))
{
if
(
OB_UNLIKELY
(
epoch_tstamp
<=
0
)
||
OB_UNLIKELY
(
OB_INVALID_ID
==
tenant_id
)
||
OB_UNLIKELY
(
!
is_valid_read_snapshot_version
(
base_version_when_no_valid_partition
)))
{
ret
=
OB_INVALID_ARGUMENT
;
LOG_WARN
(
"invalid argument"
,
KR
(
ret
),
K
(
epoch_tstamp
),
K
(
tenant_id
),
K
(
base_version_when_no_valid_partition
));
}
...
...
@@ -214,8 +218,9 @@ int ObTenantWeakReadServerVersionMgr::ServerVersionInner::amend(
int
ObTenantWeakReadServerVersionMgr
::
ServerVersionInner
::
update
(
const
ServerVersionInner
&
new_version
)
{
int
ret
=
OB_SUCCESS
;
if
(
OB_UNLIKELY
(
0
==
new_version
.
epoch_tstamp_
)
||
OB_UNLIKELY
(
epoch_tstamp_
>=
new_version
.
epoch_tstamp_
)
||
OB_UNLIKELY
(
new_version
.
version_
<=
0
))
{
if
(
OB_UNLIKELY
(
0
==
new_version
.
epoch_tstamp_
)
||
OB_UNLIKELY
(
epoch_tstamp_
>=
new_version
.
epoch_tstamp_
)
||
OB_UNLIKELY
(
!
is_valid_read_snapshot_version
(
new_version
.
version_
)))
{
ret
=
OB_INVALID_ARGUMENT
;
LOG_WARN
(
"invalid new server version"
,
KR
(
ret
),
K
(
new_version
),
KPC
(
this
));
}
else
{
...
...
src/storage/transaction/ob_tenant_weak_read_service.cpp
浏览文件 @
9bbbb315
...
...
@@ -221,8 +221,9 @@ int ObTenantWeakReadService::get_cluster_version_by_rpc_(int64_t& version)
}
else
if
(
OB_SUCCESS
!=
resp
.
err_code_
)
{
LOG_WARN
(
"get weak read cluster version RPC return error"
,
K
(
resp
),
K
(
tenant_id_
),
K
(
cluster_service_master
));
ret
=
resp
.
err_code_
;
}
else
if
(
OB_UNLIKELY
(
resp
.
version_
<=
0
))
{
LOG_WARN
(
"invalid weak read cluster version from RPC"
,
K
(
resp
),
K
(
tenant_id_
),
K
(
cluster_service_master
));
}
else
if
(
OB_UNLIKELY
(
!
is_valid_read_snapshot_version
(
resp
.
version_
)))
{
LOG_WARN
(
"invalid weak read cluster version from RPC"
,
K
(
resp
),
K
(
tenant_id_
),
K
(
cluster_service_master
));
ret
=
OB_INVALID_ERROR
;
}
else
{
version
=
resp
.
version_
;
...
...
src/storage/transaction/ob_weak_read_service.cpp
浏览文件 @
9bbbb315
...
...
@@ -99,11 +99,11 @@ int ObWeakReadService::get_server_version(const uint64_t tenant_id, int64_t& ver
LOG_WARN
(
"change tenant context fail when get weak read service server version"
,
KR
(
ret
),
K
(
tenant_id
));
}
if
(
OB_SUCC
(
ret
)
&&
version
<=
0
)
{
if
(
OB_SUCC
(
ret
)
&&
!
is_valid_read_snapshot_version
(
version
)
)
{
int
old_ret
=
ret
;
ret
=
OB_ERR_UNEXPECTED
;
LOG_ERROR
(
"get server version succ, but version not bigger than zero"
,
K
(
ret
),
K
(
old_ret
),
K
(
tenant_id
),
K
(
version
));
LOG_ERROR
(
"get server version succ, but version is not valid snapshot version"
,
K
(
ret
),
K
(
old_ret
),
K
(
tenant_id
),
K
(
version
));
}
LOG_DEBUG
(
"[WRS] get_server_version"
,
K
(
ret
),
K
(
tenant_id
),
K
(
version
));
...
...
@@ -131,11 +131,11 @@ int ObWeakReadService::get_cluster_version(const uint64_t tenant_id, int64_t& ve
LOG_WARN
(
"change tenant context fail when get weak read service cluster version"
,
KR
(
ret
),
K
(
tenant_id
));
}
if
(
OB_SUCC
(
ret
)
&&
version
<=
0
)
{
if
(
OB_SUCC
(
ret
)
&&
!
is_valid_read_snapshot_version
(
version
)
)
{
int
old_ret
=
ret
;
ret
=
OB_ERR_UNEXPECTED
;
LOG_ERROR
(
"get cluster version succ, but version not bigger than zero"
,
K
(
ret
),
K
(
old_ret
),
K
(
tenant_id
),
K
(
version
));
LOG_ERROR
(
"get cluster version succ, but version is not valid snapshot version"
,
K
(
ret
),
K
(
old_ret
),
K
(
tenant_id
),
K
(
version
));
}
LOG_DEBUG
(
"[WRS] get_cluster_version"
,
K
(
ret
),
K
(
tenant_id
),
K
(
version
));
...
...
@@ -328,15 +328,19 @@ int ObWeakReadService::handle_partition_(ObIPartitionGroup& part, bool& need_ski
ObTenantWeakReadService
*
twrs
=
NULL
;
const
ObPartitionKey
&
pkey
=
part
.
get_partition_key
();
uint64_t
tenant_id
=
pkey
.
get_tenant_id
();
ObPartitionService
&
ps
=
ObPartitionService
::
get_instance
();
ObPartitionService
&
ps
=
ObPartitionService
::
get_instance
();
// tenant maybe not exist, pass second parameter to ignore WARN log
int64_t
max_stale_time
=
ObWeakReadUtil
::
max_stale_time_for_weak_consistency
(
tenant_id
,
ObWeakReadUtil
::
IGNORE_TENANT_EXIST_WARN
);
int64_t
max_stale_time
=
ObWeakReadUtil
::
max_stale_time_for_weak_consistency
(
tenant_id
,
ObWeakReadUtil
::
IGNORE_TENANT_EXIST_WARN
);
// generate partition level weak read snapshot version
if
(
OB_FAIL
(
ps
.
generate_partition_weak_read_snapshot_version
(
part
,
need_skip
,
is_user_part
,
version
,
max_stale_time
)))
{
LOG_WARN
(
"generate partition weak read snapshot version fail"
,
K
(
ret
),
K
(
pkey
));
if
(
OB_FAIL
(
ps
.
generate_partition_weak_read_snapshot_version
(
part
,
need_skip
,
is_user_part
,
version
,
max_stale_time
)))
{
LOG_WARN
(
"generate partition weak read snapshot version fail"
,
KR
(
ret
),
K
(
pkey
));
}
else
if
(
OB_UNLIKELY
(
!
need_skip
&&
!
is_valid_read_snapshot_version
(
version
)))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_ERROR
(
"unexpected generated partitoin weak read snapshot version"
,
KR
(
ret
),
"pkey"
,
part
.
get_partition_key
(),
K
(
is_user_part
),
K
(
version
));
}
else
{
// switch tenant, get tenant weak read service
FETCH_ENTITY
(
TENANT_SPACE
,
tenant_id
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录