Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
43822106
T
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
43822106
编写于
5月 05, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
test: add unitest for transaction
上级
0218def4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
85 addition
and
26 deletion
+85
-26
source/dnode/mnode/impl/test/trans/trans2.cpp
source/dnode/mnode/impl/test/trans/trans2.cpp
+85
-26
未找到文件。
source/dnode/mnode/impl/test/trans/trans2.cpp
浏览文件 @
43822106
...
@@ -114,7 +114,7 @@ class MndTestTrans2 : public ::testing::Test {
...
@@ -114,7 +114,7 @@ class MndTestTrans2 : public ::testing::Test {
return
code
;
return
code
;
}
}
int32_t
CreateUserAction
(
const
char
*
acct
,
const
char
*
user
,
bool
hasUndoAction
)
{
int32_t
CreateUserAction
(
const
char
*
acct
,
const
char
*
user
,
bool
hasUndoAction
,
ETrnPolicy
policy
)
{
SUserObj
userObj
=
{
0
};
SUserObj
userObj
=
{
0
};
taosEncryptPass_c
((
uint8_t
*
)
"taosdata"
,
strlen
(
"taosdata"
),
userObj
.
pass
);
taosEncryptPass_c
((
uint8_t
*
)
"taosdata"
,
strlen
(
"taosdata"
),
userObj
.
pass
);
tstrncpy
(
userObj
.
user
,
user
,
TSDB_USER_LEN
);
tstrncpy
(
userObj
.
user
,
user
,
TSDB_USER_LEN
);
...
@@ -124,7 +124,7 @@ class MndTestTrans2 : public ::testing::Test {
...
@@ -124,7 +124,7 @@ class MndTestTrans2 : public ::testing::Test {
userObj
.
superUser
=
1
;
userObj
.
superUser
=
1
;
SRpcMsg
rpcMsg
=
{
0
};
SRpcMsg
rpcMsg
=
{
0
};
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_ROLLBACK
,
TRN_TYPE_CREATE_USER
,
&
rpcMsg
);
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
policy
,
TRN_TYPE_CREATE_USER
,
&
rpcMsg
);
SSdbRaw
*
pRedoRaw
=
mndUserActionEncode
(
&
userObj
);
SSdbRaw
*
pRedoRaw
=
mndUserActionEncode
(
&
userObj
);
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
);
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
);
sdbSetRawStatus
(
pRedoRaw
,
SDB_STATUS_READY
);
sdbSetRawStatus
(
pRedoRaw
,
SDB_STATUS_READY
);
...
@@ -209,41 +209,100 @@ TEST_F(MndTestTrans2, 02_Action) {
...
@@ -209,41 +209,100 @@ TEST_F(MndTestTrans2, 02_Action) {
SUserObj
*
pUser1
=
NULL
;
SUserObj
*
pUser1
=
NULL
;
SUserObj
*
pUser2
=
NULL
;
SUserObj
*
pUser2
=
NULL
;
STrans
*
pTrans
=
NULL
;
STrans
*
pTrans
=
NULL
;
int32_t
transId
=
4
;
int32_t
transId
=
0
;
int32_t
action
=
0
;
int32_t
action
=
0
;
ASSERT_NE
(
pMnode
,
nullptr
);
ASSERT_NE
(
pMnode
,
nullptr
);
// failed to create user and rollback
// failed to create user and rollback
EXPECT_EQ
(
CreateUserAction
(
acct
,
user1
,
false
),
0
);
EXPECT_EQ
(
CreateUserAction
(
acct
,
user1
,
false
,
TRN_POLICY_ROLLBACK
),
0
);
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
ASSERT_EQ
(
pUser1
,
nullptr
);
ASSERT_EQ
(
pUser1
,
nullptr
);
mndReleaseUser
(
pMnode
,
pUser1
);
mndReleaseUser
(
pMnode
,
pUser1
);
// create user, and fake a response
// create user, and fake a response
EXPECT_EQ
(
CreateUserAction
(
acct
,
user1
,
true
),
0
);
{
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
EXPECT_EQ
(
CreateUserAction
(
acct
,
user1
,
true
,
TRN_POLICY_ROLLBACK
),
0
);
ASSERT_NE
(
pUser1
,
nullptr
);
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
mndReleaseUser
(
pMnode
,
pUser1
);
ASSERT_NE
(
pUser1
,
nullptr
);
mndReleaseUser
(
pMnode
,
pUser1
);
pTrans
=
mndAcquireTrans
(
pMnode
,
transId
);
EXPECT_EQ
(
pTrans
->
code
,
TSDB_CODE_INVALID_PTR
);
transId
=
4
;
EXPECT_EQ
(
pTrans
->
stage
,
TRN_STAGE_UNDO_ACTION
);
pTrans
=
mndAcquireTrans
(
pMnode
,
transId
);
EXPECT_EQ
(
pTrans
->
failedTimes
,
1
);
EXPECT_EQ
(
pTrans
->
code
,
TSDB_CODE_INVALID_PTR
);
EXPECT_EQ
(
pTrans
->
stage
,
TRN_STAGE_UNDO_ACTION
);
EXPECT_EQ
(
pTrans
->
failedTimes
,
1
);
STransAction
*
pAction
=
(
STransAction
*
)
taosArrayGet
(
pTrans
->
undoActions
,
action
);
pAction
->
msgSent
=
1
;
SNodeMsg
rspMsg
=
{
0
};
rspMsg
.
pNode
=
pMnode
;
int64_t
signature
=
transId
;
signature
=
(
signature
<<
32
);
signature
+=
action
;
rspMsg
.
rpcMsg
.
ahandle
=
(
void
*
)
signature
;
mndTransProcessRsp
(
&
rspMsg
);
mndReleaseTrans
(
pMnode
,
pTrans
);
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
ASSERT_EQ
(
pUser1
,
nullptr
);
mndReleaseUser
(
pMnode
,
pUser1
);
}
STransAction
*
pAction
=
(
STransAction
*
)
taosArrayGet
(
pTrans
->
undoActions
,
action
);
{
pAction
->
msgSent
=
1
;
EXPECT_EQ
(
CreateUserAction
(
acct
,
user1
,
false
,
TRN_POLICY_RETRY
),
0
);
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
ASSERT_NE
(
pUser1
,
nullptr
);
mndReleaseUser
(
pMnode
,
pUser1
);
SNodeMsg
rspMsg
=
{
0
};
{
rspMsg
.
pNode
=
pMnode
;
transId
=
5
;
int64_t
signature
=
transId
;
pTrans
=
mndAcquireTrans
(
pMnode
,
transId
);
signature
=
(
signature
<<
32
);
EXPECT_EQ
(
pTrans
->
code
,
TSDB_CODE_INVALID_PTR
);
signature
+=
action
;
EXPECT_EQ
(
pTrans
->
stage
,
TRN_STAGE_REDO_ACTION
);
rspMsg
.
rpcMsg
.
ahandle
=
(
void
*
)
signature
;
EXPECT_EQ
(
pTrans
->
failedTimes
,
1
);
mndTransProcessRsp
(
&
rspMsg
);
mndReleaseTrans
(
pMnode
,
pTrans
);
STransAction
*
pAction
=
(
STransAction
*
)
taosArrayGet
(
pTrans
->
redoActions
,
action
);
pAction
->
msgSent
=
1
;
SNodeMsg
rspMsg
=
{
0
};
rspMsg
.
pNode
=
pMnode
;
int64_t
signature
=
transId
;
signature
=
(
signature
<<
32
);
signature
+=
action
;
rspMsg
.
rpcMsg
.
ahandle
=
(
void
*
)
signature
;
rspMsg
.
rpcMsg
.
code
=
TSDB_CODE_RPC_NETWORK_UNAVAIL
;
mndTransProcessRsp
(
&
rspMsg
);
mndReleaseTrans
(
pMnode
,
pTrans
);
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
ASSERT_NE
(
pUser1
,
nullptr
);
mndReleaseUser
(
pMnode
,
pUser1
);
}
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
{
ASSERT_EQ
(
pUser1
,
nullptr
);
transId
=
5
;
mndReleaseUser
(
pMnode
,
pUser1
);
pTrans
=
mndAcquireTrans
(
pMnode
,
transId
);
EXPECT_EQ
(
pTrans
->
code
,
TSDB_CODE_RPC_NETWORK_UNAVAIL
);
EXPECT_EQ
(
pTrans
->
stage
,
TRN_STAGE_REDO_ACTION
);
EXPECT_EQ
(
pTrans
->
failedTimes
,
2
);
STransAction
*
pAction
=
(
STransAction
*
)
taosArrayGet
(
pTrans
->
redoActions
,
action
);
pAction
->
msgSent
=
1
;
SNodeMsg
rspMsg
=
{
0
};
rspMsg
.
pNode
=
pMnode
;
int64_t
signature
=
transId
;
signature
=
(
signature
<<
32
);
signature
+=
action
;
rspMsg
.
rpcMsg
.
ahandle
=
(
void
*
)
signature
;
mndTransProcessRsp
(
&
rspMsg
);
mndReleaseTrans
(
pMnode
,
pTrans
);
pUser1
=
mndAcquireUser
(
pMnode
,
user1
);
ASSERT_NE
(
pUser1
,
nullptr
);
mndReleaseUser
(
pMnode
,
pUser1
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录