Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2ee38b94
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2ee38b94
编写于
5月 19, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor: change lockfree to rwlock
上级
38078033
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
64 addition
and
62 deletion
+64
-62
include/dnode/mnode/sdb/sdb.h
include/dnode/mnode/sdb/sdb.h
+17
-17
source/dnode/mnode/sdb/src/sdb.c
source/dnode/mnode/sdb/src/sdb.c
+4
-2
source/dnode/mnode/sdb/src/sdbFile.c
source/dnode/mnode/sdb/src/sdbFile.c
+3
-3
source/dnode/mnode/sdb/src/sdbHash.c
source/dnode/mnode/sdb/src/sdbHash.c
+40
-40
未找到文件。
include/dnode/mnode/sdb/sdb.h
浏览文件 @
2ee38b94
...
...
@@ -333,23 +333,23 @@ SSdbRow *sdbAllocRow(int32_t objSize);
void
*
sdbGetRowObj
(
SSdbRow
*
pRow
);
typedef
struct
SSdb
{
SMnode
*
pMnode
;
char
*
currDir
;
char
*
syncDir
;
char
*
tmpDir
;
int64_t
lastCommitVer
;
int64_t
curVer
;
int64_t
tableVer
[
SDB_MAX
];
int64_t
maxId
[
SDB_MAX
];
EKeyType
keyTypes
[
SDB_MAX
];
SHashObj
*
hashObjs
[
SDB_MAX
];
SRWLatch
locks
[
SDB_MAX
];
SdbInsertFp
insertFps
[
SDB_MAX
];
SdbUpdateFp
updateFps
[
SDB_MAX
];
SdbDeleteFp
deleteFps
[
SDB_MAX
];
SdbDeployFp
deployFps
[
SDB_MAX
];
SdbEncodeFp
encodeFps
[
SDB_MAX
];
SdbDecodeFp
decodeFps
[
SDB_MAX
];
SMnode
*
pMnode
;
char
*
currDir
;
char
*
syncDir
;
char
*
tmpDir
;
int64_t
lastCommitVer
;
int64_t
curVer
;
int64_t
tableVer
[
SDB_MAX
];
int64_t
maxId
[
SDB_MAX
];
EKeyType
keyTypes
[
SDB_MAX
];
SHashObj
*
hashObjs
[
SDB_MAX
];
TdThreadRwlock
locks
[
SDB_MAX
];
SdbInsertFp
insertFps
[
SDB_MAX
];
SdbUpdateFp
updateFps
[
SDB_MAX
];
SdbDeleteFp
deleteFps
[
SDB_MAX
];
SdbDeployFp
deployFps
[
SDB_MAX
];
SdbEncodeFp
encodeFps
[
SDB_MAX
];
SdbDecodeFp
decodeFps
[
SDB_MAX
];
}
SSdb
;
#ifdef __cplusplus
...
...
source/dnode/mnode/sdb/src/sdb.c
浏览文件 @
2ee38b94
...
...
@@ -48,7 +48,7 @@ SSdb *sdbInit(SSdbOpt *pOption) {
}
for
(
ESdbType
i
=
0
;
i
<
SDB_MAX
;
++
i
)
{
taos
InitRWLatch
(
&
pSdb
->
locks
[
i
]
);
taos
ThreadRwlockInit
(
&
pSdb
->
locks
[
i
],
NULL
);
pSdb
->
maxId
[
i
]
=
0
;
pSdb
->
tableVer
[
i
]
=
0
;
pSdb
->
keyTypes
[
i
]
=
SDB_KEY_INT32
;
...
...
@@ -98,7 +98,10 @@ void sdbCleanup(SSdb *pSdb) {
taosHashClear
(
hash
);
taosHashCleanup
(
hash
);
taosThreadRwlockDestroy
(
&
pSdb
->
locks
[
i
]);
pSdb
->
hashObjs
[
i
]
=
NULL
;
memset
(
&
pSdb
->
locks
[
i
],
0
,
sizeof
(
pSdb
->
locks
[
i
]));
mDebug
(
"sdb table:%s is cleaned up"
,
sdbTableName
(
i
));
}
...
...
@@ -134,7 +137,6 @@ int32_t sdbSetTable(SSdb *pSdb, SSdbTable table) {
pSdb
->
maxId
[
sdbType
]
=
0
;
pSdb
->
hashObjs
[
sdbType
]
=
hash
;
taosInitRWLatch
(
&
pSdb
->
locks
[
sdbType
]);
mDebug
(
"sdb table:%s is initialized"
,
sdbTableName
(
sdbType
));
return
0
;
...
...
source/dnode/mnode/sdb/src/sdbFile.c
浏览文件 @
2ee38b94
...
...
@@ -257,8 +257,8 @@ static int32_t sdbWriteFileImp(SSdb *pSdb) {
mTrace
(
"write %s to file, total %d rows"
,
sdbTableName
(
i
),
sdbGetSize
(
pSdb
,
i
));
SHashObj
*
hash
=
pSdb
->
hashObjs
[
i
];
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
i
];
taos
WLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
i
];
taos
ThreadRwlockWrlock
(
pLock
);
SSdbRow
**
ppRow
=
taosHashIterate
(
hash
,
NULL
);
while
(
ppRow
!=
NULL
)
{
...
...
@@ -303,7 +303,7 @@ static int32_t sdbWriteFileImp(SSdb *pSdb) {
sdbFreeRaw
(
pRaw
);
ppRow
=
taosHashIterate
(
hash
,
ppRow
);
}
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
}
if
(
code
==
0
)
{
...
...
source/dnode/mnode/sdb/src/sdbHash.c
浏览文件 @
2ee38b94
...
...
@@ -129,12 +129,12 @@ static int32_t sdbGetkeySize(SSdb *pSdb, ESdbType type, const void *pKey) {
}
static
int32_t
sdbInsertRow
(
SSdb
*
pSdb
,
SHashObj
*
hash
,
SSdbRaw
*
pRaw
,
SSdbRow
*
pRow
,
int32_t
keySize
)
{
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
WLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
ThreadRwlockWrlock
(
pLock
);
SSdbRow
*
pOldRow
=
taosHashGet
(
hash
,
pRow
->
pObj
,
keySize
);
if
(
pOldRow
!=
NULL
)
{
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
sdbFreeRow
(
pSdb
,
pRow
,
false
);
terrno
=
TSDB_CODE_SDB_OBJ_ALREADY_THERE
;
return
terrno
;
...
...
@@ -145,13 +145,13 @@ static int32_t sdbInsertRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
sdbPrintOper
(
pSdb
,
pRow
,
"insert"
);
if
(
taosHashPut
(
hash
,
pRow
->
pObj
,
keySize
,
&
pRow
,
sizeof
(
void
*
))
!=
0
)
{
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
sdbFreeRow
(
pSdb
,
pRow
,
false
);
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
terrno
;
}
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
int32_t
code
=
0
;
SdbInsertFp
insertFp
=
pSdb
->
insertFps
[
pRow
->
type
];
...
...
@@ -159,9 +159,9 @@ static int32_t sdbInsertRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
code
=
(
*
insertFp
)(
pSdb
,
pRow
->
pObj
);
if
(
code
!=
0
)
{
code
=
terrno
;
taos
WLockLatch
(
pLock
);
taos
ThreadRwlockWrlock
(
pLock
);
taosHashRemove
(
hash
,
pRow
->
pObj
,
keySize
);
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
sdbFreeRow
(
pSdb
,
pRow
,
false
);
terrno
=
code
;
return
terrno
;
...
...
@@ -180,19 +180,19 @@ static int32_t sdbInsertRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
}
static
int32_t
sdbUpdateRow
(
SSdb
*
pSdb
,
SHashObj
*
hash
,
SSdbRaw
*
pRaw
,
SSdbRow
*
pNewRow
,
int32_t
keySize
)
{
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pNewRow
->
type
];
taos
WLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
pNewRow
->
type
];
taos
ThreadRwlockWrlock
(
pLock
);
SSdbRow
**
ppOldRow
=
taosHashGet
(
hash
,
pNewRow
->
pObj
,
keySize
);
if
(
ppOldRow
==
NULL
||
*
ppOldRow
==
NULL
)
{
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
return
sdbInsertRow
(
pSdb
,
hash
,
pRaw
,
pNewRow
,
keySize
);
}
SSdbRow
*
pOldRow
=
*
ppOldRow
;
pOldRow
->
status
=
pRaw
->
status
;
sdbPrintOper
(
pSdb
,
pOldRow
,
"update"
);
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
int32_t
code
=
0
;
SdbUpdateFp
updateFp
=
pSdb
->
updateFps
[
pNewRow
->
type
];
...
...
@@ -207,12 +207,12 @@ static int32_t sdbUpdateRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
}
static
int32_t
sdbDeleteRow
(
SSdb
*
pSdb
,
SHashObj
*
hash
,
SSdbRaw
*
pRaw
,
SSdbRow
*
pRow
,
int32_t
keySize
)
{
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
WLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
ThreadRwlockWrlock
(
pLock
);
SSdbRow
**
ppOldRow
=
taosHashGet
(
hash
,
pRow
->
pObj
,
keySize
);
if
(
ppOldRow
==
NULL
||
*
ppOldRow
==
NULL
)
{
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
sdbFreeRow
(
pSdb
,
pRow
,
false
);
terrno
=
TSDB_CODE_SDB_OBJ_NOT_THERE
;
return
terrno
;
...
...
@@ -223,7 +223,7 @@ static int32_t sdbDeleteRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
sdbPrintOper
(
pSdb
,
pOldRow
,
"delete"
);
taosHashRemove
(
hash
,
pOldRow
->
pObj
,
keySize
);
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
pSdb
->
tableVer
[
pOldRow
->
type
]
++
;
sdbFreeRow
(
pSdb
,
pRow
,
false
);
...
...
@@ -278,12 +278,12 @@ void *sdbAcquire(SSdb *pSdb, ESdbType type, const void *pKey) {
void
*
pRet
=
NULL
;
int32_t
keySize
=
sdbGetkeySize
(
pSdb
,
type
,
pKey
);
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
RLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
ThreadRwlockRdlock
(
pLock
);
SSdbRow
**
ppRow
=
taosHashGet
(
hash
,
pKey
,
keySize
);
if
(
ppRow
==
NULL
||
*
ppRow
==
NULL
)
{
taos
RUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
terrno
=
TSDB_CODE_SDB_OBJ_NOT_THERE
;
return
NULL
;
}
...
...
@@ -306,13 +306,13 @@ void *sdbAcquire(SSdb *pSdb, ESdbType type, const void *pKey) {
break
;
}
taos
RUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
return
pRet
;
}
static
void
sdbCheckRow
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
)
{
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
WLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
ThreadRwlockWrlock
(
pLock
);
int32_t
ref
=
atomic_load_32
(
&
pRow
->
refCount
);
sdbPrintOper
(
pSdb
,
pRow
,
"check"
);
...
...
@@ -320,7 +320,7 @@ static void sdbCheckRow(SSdb *pSdb, SSdbRow *pRow) {
sdbFreeRow
(
pSdb
,
pRow
,
true
);
}
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
}
void
sdbRelease
(
SSdb
*
pSdb
,
void
*
pObj
)
{
...
...
@@ -329,8 +329,8 @@ void sdbRelease(SSdb *pSdb, void *pObj) {
SSdbRow
*
pRow
=
(
SSdbRow
*
)((
char
*
)
pObj
-
sizeof
(
SSdbRow
));
if
(
pRow
->
type
>=
SDB_MAX
)
return
;
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
WLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
ThreadRwlockWrlock
(
pLock
);
int32_t
ref
=
atomic_sub_fetch_32
(
&
pRow
->
refCount
,
1
);
sdbPrintOper
(
pSdb
,
pRow
,
"release"
);
...
...
@@ -338,7 +338,7 @@ void sdbRelease(SSdb *pSdb, void *pObj) {
sdbFreeRow
(
pSdb
,
pRow
,
true
);
}
taos
WUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
}
void
*
sdbFetch
(
SSdb
*
pSdb
,
ESdbType
type
,
void
*
pIter
,
void
**
ppObj
)
{
...
...
@@ -347,8 +347,8 @@ void *sdbFetch(SSdb *pSdb, ESdbType type, void *pIter, void **ppObj) {
SHashObj
*
hash
=
sdbGetHash
(
pSdb
,
type
);
if
(
hash
==
NULL
)
return
NULL
;
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
RLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
ThreadRwlockRdlock
(
pLock
);
SSdbRow
**
ppRow
=
taosHashIterate
(
hash
,
pIter
);
while
(
ppRow
!=
NULL
)
{
...
...
@@ -363,7 +363,7 @@ void *sdbFetch(SSdb *pSdb, ESdbType type, void *pIter, void **ppObj) {
*
ppObj
=
pRow
->
pObj
;
break
;
}
taos
RUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
return
ppRow
;
}
...
...
@@ -374,18 +374,18 @@ void sdbCancelFetch(SSdb *pSdb, void *pIter) {
SHashObj
*
hash
=
sdbGetHash
(
pSdb
,
pRow
->
type
);
if
(
hash
==
NULL
)
return
;
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
RLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
ThreadRwlockRdlock
(
pLock
);
taosHashCancelIterate
(
hash
,
pIter
);
taos
RUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
}
void
sdbTraverse
(
SSdb
*
pSdb
,
ESdbType
type
,
sdbTraverseFp
fp
,
void
*
p1
,
void
*
p2
,
void
*
p3
)
{
SHashObj
*
hash
=
sdbGetHash
(
pSdb
,
type
);
if
(
hash
==
NULL
)
return
;
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
RLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
ThreadRwlockRdlock
(
pLock
);
SSdbRow
**
ppRow
=
taosHashIterate
(
hash
,
NULL
);
while
(
ppRow
!=
NULL
)
{
...
...
@@ -401,17 +401,17 @@ void sdbTraverse(SSdb *pSdb, ESdbType type, sdbTraverseFp fp, void *p1, void *p2
ppRow
=
taosHashIterate
(
hash
,
ppRow
);
}
taos
RUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
}
int32_t
sdbGetSize
(
SSdb
*
pSdb
,
ESdbType
type
)
{
SHashObj
*
hash
=
sdbGetHash
(
pSdb
,
type
);
if
(
hash
==
NULL
)
return
0
;
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
RLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
ThreadRwlockRdlock
(
pLock
);
int32_t
size
=
taosHashGetSize
(
hash
);
taos
RUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
return
size
;
}
...
...
@@ -424,8 +424,8 @@ int32_t sdbGetMaxId(SSdb *pSdb, ESdbType type) {
int32_t
maxId
=
0
;
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
RLockLatch
(
pLock
);
TdThreadRwlock
*
pLock
=
&
pSdb
->
locks
[
type
];
taos
ThreadRwlockRdlock
(
pLock
);
SSdbRow
**
ppRow
=
taosHashIterate
(
hash
,
NULL
);
while
(
ppRow
!=
NULL
)
{
...
...
@@ -435,7 +435,7 @@ int32_t sdbGetMaxId(SSdb *pSdb, ESdbType type) {
ppRow
=
taosHashIterate
(
hash
,
ppRow
);
}
taos
RUnLockLatch
(
pLock
);
taos
ThreadRwlockUnlock
(
pLock
);
maxId
=
TMAX
(
maxId
,
pSdb
->
maxId
[
type
]);
return
maxId
+
1
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录