Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7d3dd776
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7d3dd776
编写于
4月 28, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
test: add unitest for sdb
上级
46af79b9
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
203 addition
and
36 deletion
+203
-36
include/dnode/mnode/sdb/sdb.h
include/dnode/mnode/sdb/sdb.h
+0
-1
source/dnode/mnode/impl/test/sdb/sdbTest.cpp
source/dnode/mnode/impl/test/sdb/sdbTest.cpp
+199
-33
source/dnode/mnode/sdb/inc/sdbInt.h
source/dnode/mnode/sdb/inc/sdbInt.h
+2
-0
source/os/src/osDir.c
source/os/src/osDir.c
+2
-2
未找到文件。
include/dnode/mnode/sdb/sdb.h
浏览文件 @
7d3dd776
...
...
@@ -331,7 +331,6 @@ int32_t sdbGetRawSoftVer(SSdbRaw *pRaw, int8_t *sver);
int32_t
sdbGetRawTotalSize
(
SSdbRaw
*
pRaw
);
SSdbRow
*
sdbAllocRow
(
int32_t
objSize
);
void
sdbFreeRow
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
,
bool
callFunc
);
void
*
sdbGetRowObj
(
SSdbRow
*
pRow
);
typedef
struct
SSdb
{
...
...
source/dnode/mnode/impl/test/sdb/sdbTest.cpp
浏览文件 @
7d3dd776
...
...
@@ -73,32 +73,39 @@ SSdbRaw *strEncode(SStrObj *pObj) {
dataPos
+=
sizeof
(
pObj
->
v32
);
sdbSetRawInt64
(
pRaw
,
dataPos
,
pObj
->
v64
);
dataPos
+=
sizeof
(
pObj
->
v64
);
sdbSetRawBinary
(
pRaw
,
dataPos
,
pObj
->
key
,
sizeof
(
pObj
->
vstr
));
dataPos
+=
sizeof
(
pObj
->
key
);
sdbSetRawBinary
(
pRaw
,
dataPos
,
pObj
->
vstr
,
sizeof
(
pObj
->
vstr
));
dataPos
+=
sizeof
(
pObj
->
vstr
);
sdbSetRawDataLen
(
pRaw
,
dataPos
);
return
pRaw
;
}
SSdbRaw
*
strDecode
(
SStrObj
*
pObj
)
{
int32_t
dataPos
=
0
;
SSdbRaw
*
pRaw
=
sdbAllocRaw
(
SDB_USER
,
1
,
sizeof
(
SStrObj
));
SSdbRow
*
strDecode
(
SSdbRaw
*
pRaw
)
{
int8_t
sver
=
0
;
if
(
sdbGetRawSoftVer
(
pRaw
,
&
sver
)
!=
0
)
return
NULL
;
if
(
sver
!=
1
)
return
NULL
;
sdbSetRawBinary
(
pRaw
,
dataPos
,
pObj
->
key
,
sizeof
(
pObj
->
key
));
SSdbRow
*
pRow
=
sdbAllocRow
(
sizeof
(
SStrObj
));
if
(
pRow
==
NULL
)
return
NULL
;
SStrObj
*
pObj
=
(
SStrObj
*
)
sdbGetRowObj
(
pRow
);
if
(
pObj
==
NULL
)
return
NULL
;
int32_t
dataPos
=
0
;
sdbGetRawBinary
(
pRaw
,
dataPos
,
pObj
->
key
,
sizeof
(
pObj
->
key
));
dataPos
+=
sizeof
(
pObj
->
key
);
sdb
SetRawInt8
(
pRaw
,
dataPos
,
pObj
->
v8
);
sdb
GetRawInt8
(
pRaw
,
dataPos
,
&
pObj
->
v8
);
dataPos
+=
sizeof
(
pObj
->
v8
);
sdb
SetRawInt16
(
pRaw
,
dataPos
,
pObj
->
v16
);
sdb
GetRawInt16
(
pRaw
,
dataPos
,
&
pObj
->
v16
);
dataPos
+=
sizeof
(
pObj
->
v16
);
sdb
SetRawInt32
(
pRaw
,
dataPos
,
pObj
->
v32
);
sdb
GetRawInt32
(
pRaw
,
dataPos
,
&
pObj
->
v32
);
dataPos
+=
sizeof
(
pObj
->
v32
);
sdb
SetRawInt64
(
pRaw
,
dataPos
,
pObj
->
v64
);
sdb
GetRawInt64
(
pRaw
,
dataPos
,
&
pObj
->
v64
);
dataPos
+=
sizeof
(
pObj
->
v64
);
sdbSetRawBinary
(
pRaw
,
dataPos
,
pObj
->
key
,
sizeof
(
pObj
->
vstr
));
dataPos
+=
sizeof
(
pObj
->
key
);
sdbSetRawDataLen
(
pRaw
,
dataPos
);
sdbGetRawBinary
(
pRaw
,
dataPos
,
pObj
->
vstr
,
sizeof
(
pObj
->
vstr
));
dataPos
+=
sizeof
(
pObj
->
vstr
);
return
pR
a
w
;
return
pR
o
w
;
}
int32_t
strInsert
(
SSdb
*
pSdb
,
SStrObj
*
pObj
)
{
return
0
;
}
...
...
@@ -110,39 +117,196 @@ int32_t strUpdate(SSdb *pSdb, SStrObj *pOld, SStrObj *pNew) {
pOld
->
v16
=
pNew
->
v16
;
pOld
->
v32
=
pNew
->
v32
;
pOld
->
v64
=
pNew
->
v64
;
strcpy
(
pOld
->
vstr
,
pNew
->
vstr
);
return
0
;
}
void
strSetDefault
(
SStrObj
*
pObj
,
int32_t
index
)
{
memset
(
pObj
,
0
,
sizeof
(
SStrObj
));
snprintf
(
pObj
->
key
,
sizeof
(
pObj
->
key
),
"k%d"
,
index
*
1000
);
pObj
->
v8
=
index
;
pObj
->
v16
=
index
;
pObj
->
v32
=
index
*
1000
;
pObj
->
v64
=
index
*
1000
;
snprintf
(
pObj
->
vstr
,
sizeof
(
pObj
->
vstr
),
"v%d"
,
index
*
1000
);
}
int32_t
strDefault
(
SMnode
*
pMnode
)
{
SStrObj
strObj
=
{
0
};
strcpy
(
strObj
.
key
,
"k1000"
);
strObj
.
v8
=
1
;
strObj
.
v16
=
1
;
strObj
.
v32
=
1000
;
strObj
.
v64
=
1000
;
strcpy
(
strObj
.
vstr
,
"v1000"
);
SSdbRaw
*
pRaw
=
strEncode
(
&
strObj
);
SStrObj
strObj
;
SSdbRaw
*
pRaw
=
NULL
;
strSetDefault
(
&
strObj
,
1
);
pRaw
=
strEncode
(
&
strObj
);
sdbSetRawStatus
(
pRaw
,
SDB_STATUS_READY
);
if
(
sdbWrite
(
pMnode
->
pSdb
,
pRaw
)
!=
0
)
return
-
1
;
strSetDefault
(
&
strObj
,
2
);
pRaw
=
strEncode
(
&
strObj
);
sdbSetRawStatus
(
pRaw
,
SDB_STATUS_READY
);
return
sdbWrite
(
pMnode
->
pSdb
,
pRaw
);
if
(
sdbWriteWithoutFree
(
pMnode
->
pSdb
,
pRaw
)
!=
0
)
return
-
1
;
sdbFreeRaw
(
pRaw
);
return
0
;
}
bool
sdbTraverseSucc1
(
SMnode
*
pMnode
,
SStrObj
*
pObj
,
int32_t
*
p1
,
int32_t
*
p2
,
int32_t
*
p3
)
{
if
(
pObj
->
v8
==
1
)
{
*
p1
=
*
p2
+
*
p3
+
pObj
->
v8
;
}
return
true
;
}
TEST_F
(
MndTestSdb
,
01
_Basic
)
{
SMnode
mnode
;
bool
sdbTraverseSucc2
(
SMnode
*
pMnode
,
SStrObj
*
pObj
,
int32_t
*
p1
,
int32_t
*
p2
,
int32_t
*
p3
)
{
*
p1
=
*
p2
+
*
p3
+
pObj
->
v8
;
return
true
;
}
bool
sdbTraverseFail
(
SMnode
*
pMnode
,
SStrObj
*
pObj
,
int32_t
*
p1
,
int32_t
*
p2
,
int32_t
*
p3
)
{
*
p1
=
*
p2
+
*
p3
;
return
false
;
}
TEST_F
(
MndTestSdb
,
01
_Write
)
{
void
*
pIter
;
int32_t
num
;
SStrObj
*
pObj
;
SMnode
mnode
;
SSdb
*
pSdb
;
SSdbOpt
opt
=
{
0
};
int32_t
p1
=
0
;
int32_t
p2
=
111
;
int32_t
p3
=
222
;
mnode
.
v100
=
100
;
mnode
.
v200
=
200
;
SSdbOpt
opt
=
{
0
};
opt
.
pMnode
=
&
mnode
;
opt
.
path
=
"/tmp/mnode_test_sdb"
;
taosRemoveDir
(
opt
.
path
);
SSdbTable
strTable
=
{
.
sdbType
=
SDB_USER
,
.
keyType
=
SDB_KEY_BINARY
,
.
deployFp
=
(
SdbDeployFp
)
strDefault
,
.
encodeFp
=
(
SdbEncodeFp
)
strEncode
,
.
decodeFp
=
(
SdbDecodeFp
)
strDecode
,
.
insertFp
=
(
SdbInsertFp
)
strInsert
,
.
updateFp
=
(
SdbUpdateFp
)
strUpdate
,
.
deleteFp
=
(
SdbDeleteFp
)
strDelete
,
};
pSdb
=
sdbInit
(
&
opt
);
mnode
.
pSdb
=
pSdb
;
ASSERT_NE
(
pSdb
,
nullptr
);
ASSERT_EQ
(
sdbSetTable
(
pSdb
,
strTable
),
0
);
ASSERT_EQ
(
sdbDeploy
(
pSdb
),
0
);
#if 0
pObj = (SStrObj *)sdbAcquire(pSdb, SDB_USER, "k1000");
ASSERT_NE(pObj, nullptr);
EXPECT_STREQ(pObj->key, "k1000");
EXPECT_STREQ(pObj->vstr, "v1000");
EXPECT_EQ(pObj->v8, 1);
EXPECT_EQ(pObj->v16, 1);
EXPECT_EQ(pObj->v32, 1000);
EXPECT_EQ(pObj->v64, 1000);
sdbRelease(pSdb, pObj);
pObj = (SStrObj *)sdbAcquire(pSdb, SDB_USER, "k2000");
ASSERT_NE(pObj, nullptr);
EXPECT_STREQ(pObj->key, "k2000");
EXPECT_STREQ(pObj->vstr, "v2000");
EXPECT_EQ(pObj->v8, 2);
EXPECT_EQ(pObj->v16, 2);
EXPECT_EQ(pObj->v32, 2000);
EXPECT_EQ(pObj->v64, 2000);
sdbRelease(pSdb, pObj);
pObj = (SStrObj *)sdbAcquire(pSdb, SDB_USER, "k200");
ASSERT_EQ(pObj, nullptr);
pIter = NULL;
num = 0;
do {
pIter = sdbFetch(pSdb, SDB_USER, pIter, (void **)&pObj);
if (pIter == NULL) break;
ASSERT_NE(pObj, nullptr);
num++;
sdbRelease(pSdb, pObj);
} while (1);
EXPECT_EQ(num, 2);
do {
pIter = sdbFetch(pSdb, SDB_USER, pIter, (void **)&pObj);
if (pIter == NULL) break;
if (strcmp(pObj->key, "k1000") == 0) {
sdbCancelFetch(pSdb, pIter);
break;
}
} while (1);
EXPECT_STREQ(pObj->key, "k1000");
p1 = 0;
p2 = 111;
p3 = 222;
sdbTraverse(pSdb, SDB_USER, (sdbTraverseFp)sdbTraverseSucc2, &p1, &p2, &p3);
EXPECT_EQ(p1, 334);
p1 = 0;
p2 = 111;
p3 = 222;
sdbTraverse(pSdb, SDB_USER, (sdbTraverseFp)sdbTraverseSucc2, &p1, &p2, &p3);
EXPECT_EQ(p1, 669);
p1 = 0;
p2 = 111;
p3 = 222;
sdbTraverse(pSdb, SDB_USER, (sdbTraverseFp)sdbTraverseFail, &p1, &p2, &p3);
EXPECT_EQ(p1, 333);
SSdb
*
pSdb
=
sdbInit
(
&
opt
);
EXPECT_NE
(
pSdb
,
nullptr
);
EXPECT_EQ(sdbGetSize(pSdb, SDB_USER), 2);
EXPECT_EQ(sdbGetMaxId(pSdb, SDB_USER), -1);
EXPECT_EQ(sdbGetTableVer(pSdb, SDB_USER), 2);
EXPECT_EQ(sdbUpdateVer(pSdb, 0), 2);
EXPECT_EQ(sdbUpdateVer(pSdb, 1), 3);
EXPECT_EQ(sdbUpdateVer(pSdb, -1), 2);
// insert, call func
// update, call func
// delete, call func 2
// write version
// sdb Write ver
// sdbRead
#endif
ASSERT_EQ
(
sdbWriteFile
(
pSdb
),
0
);
sdbCleanup
(
pSdb
);
}
TEST_F
(
MndTestSdb
,
01
_Read
)
{
void
*
pIter
;
int32_t
num
;
SStrObj
*
pObj
;
SMnode
mnode
;
SSdb
*
pSdb
;
SSdbOpt
opt
=
{
0
};
int32_t
p1
=
0
;
int32_t
p2
=
111
;
int32_t
p3
=
222
;
mnode
.
v100
=
100
;
mnode
.
v200
=
200
;
opt
.
pMnode
=
&
mnode
;
opt
.
path
=
"/tmp/mnode_test_sdb"
;
taosRemoveDir
(
opt
.
path
);
SSdbTable
strTable
=
{
.
sdbType
=
SDB_USER
,
.
keyType
=
SDB_KEY_BINARY
,
.
deployFp
=
(
SdbDeployFp
)
str
Encode
,
.
deployFp
=
(
SdbDeployFp
)
str
Default
,
.
encodeFp
=
(
SdbEncodeFp
)
strEncode
,
.
decodeFp
=
(
SdbDecodeFp
)
strDecode
,
.
insertFp
=
(
SdbInsertFp
)
strInsert
,
...
...
@@ -150,7 +314,9 @@ TEST_F(MndTestSdb, 01_Basic) {
.
deleteFp
=
(
SdbDeleteFp
)
strUpdate
,
};
sdbSetTable
(
pSdb
,
strTable
);
pSdb
=
sdbInit
(
&
opt
);
mnode
.
pSdb
=
pSdb
;
ASSERT_EQ
(
sdbReadFile
(
pSdb
),
0
);
sdbCleanup
(
pSdb
);
}
}
\ No newline at end of file
source/dnode/mnode/sdb/inc/sdbInt.h
浏览文件 @
7d3dd776
...
...
@@ -52,6 +52,8 @@ typedef struct SSdbRow {
const
char
*
sdbTableName
(
ESdbType
type
);
void
sdbPrintOper
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
,
const
char
*
oper
);
void
sdbFreeRow
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
,
bool
callFunc
);
#ifdef __cplusplus
}
#endif
...
...
source/os/src/osDir.c
浏览文件 @
7d3dd776
...
...
@@ -72,8 +72,8 @@ void taosRemoveDir(const char *dirname) {
while
((
de
=
taosReadDir
(
pDir
))
!=
NULL
)
{
if
(
strcmp
(
taosGetDirEntryName
(
de
),
"."
)
==
0
||
strcmp
(
taosGetDirEntryName
(
de
),
".."
)
==
0
)
continue
;
char
filename
[
1024
];
snprintf
(
filename
,
sizeof
(
filename
),
"%s
/%s"
,
dirname
,
taosGetDirEntryName
(
de
));
char
filename
[
1024
]
=
{
0
}
;
snprintf
(
filename
,
sizeof
(
filename
),
"%s
%s%s"
,
dirname
,
TD_DIRSEP
,
taosGetDirEntryName
(
de
));
if
(
taosDirEntryIsDir
(
de
))
{
taosRemoveDir
(
filename
);
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录