Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
6d1477e6
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6d1477e6
编写于
3月 28, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more TDB
上级
ea748cf2
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
158 addition
and
57 deletion
+158
-57
source/libs/CMakeLists.txt
source/libs/CMakeLists.txt
+1
-1
source/libs/tdb/src/db/tdbBtree.c
source/libs/tdb/src/db/tdbBtree.c
+6
-6
source/libs/tdb/src/db/tdbDb.c
source/libs/tdb/src/db/tdbDb.c
+2
-2
source/libs/tdb/src/db/tdbEnv.c
source/libs/tdb/src/db/tdbEnv.c
+1
-1
source/libs/tdb/src/db/tdbOs.c
source/libs/tdb/src/db/tdbOs.c
+14
-0
source/libs/tdb/src/db/tdbPCache.c
source/libs/tdb/src/db/tdbPCache.c
+3
-3
source/libs/tdb/src/db/tdbPager.c
source/libs/tdb/src/db/tdbPager.c
+6
-6
source/libs/tdb/src/inc/tdbInt.h
source/libs/tdb/src/inc/tdbInt.h
+2
-0
source/libs/tdb/src/inc/tdbOs.h
source/libs/tdb/src/inc/tdbOs.h
+85
-0
source/libs/tdb/src/inc/tdbPage.h
source/libs/tdb/src/inc/tdbPage.h
+19
-19
source/libs/tdb/src/inc/tdbUtil.h
source/libs/tdb/src/inc/tdbUtil.h
+17
-17
source/libs/tdb/src/page/tdbPage.c
source/libs/tdb/src/page/tdbPage.c
+2
-2
未找到文件。
source/libs/CMakeLists.txt
浏览文件 @
6d1477e6
add_subdirectory
(
transport
)
add_subdirectory
(
sync
)
#
add_subdirectory(tdb)
add_subdirectory
(
tdb
)
add_subdirectory
(
index
)
add_subdirectory
(
wal
)
add_subdirectory
(
parser
)
...
...
source/libs/tdb/src/db/tdbBtree.c
浏览文件 @
6d1477e6
...
...
@@ -87,7 +87,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, S
*
ppBt
=
NULL
;
pBt
=
(
SBTree
*
)
c
alloc
(
1
,
sizeof
(
*
pBt
));
pBt
=
(
SBTree
*
)
tdbOsC
alloc
(
1
,
sizeof
(
*
pBt
));
if
(
pBt
==
NULL
)
{
return
-
1
;
}
...
...
@@ -121,7 +121,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, S
// TODO: pBt->root
ret
=
tdbBtreeOpenImpl
(
pBt
);
if
(
ret
<
0
)
{
f
ree
(
pBt
);
tdbOsF
ree
(
pBt
);
return
-
1
;
}
...
...
@@ -550,7 +550,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) {
if
(
sIdx
+
i
<
TDB_PAGE_TOTAL_CELLS
(
pParent
))
{
pCell
=
tdbPageGetCell
(
pParent
,
sIdx
+
i
);
szDivCell
[
i
]
=
tdbBtreeCellSize
(
pParent
,
pCell
);
pDivCell
[
i
]
=
m
alloc
(
szDivCell
[
i
]);
pDivCell
[
i
]
=
tdbOsM
alloc
(
szDivCell
[
i
]);
memcpy
(
pDivCell
[
i
],
pCell
,
szDivCell
[
i
]);
}
...
...
@@ -740,13 +740,13 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) {
tdbBtreeDecodeCell
(
pPage
,
pCell
,
&
cd
);
// TODO: pCell here may be inserted as an overflow cell, handle it
SCell
*
pNewCell
=
m
alloc
(
cd
.
kLen
+
9
);
SCell
*
pNewCell
=
tdbOsM
alloc
(
cd
.
kLen
+
9
);
int
szNewCell
;
SPgno
pgno
;
pgno
=
TDB_PAGE_PGNO
(
pNews
[
iNew
]);
tdbBtreeEncodeCell
(
pParent
,
cd
.
pKey
,
cd
.
kLen
,
(
void
*
)
&
pgno
,
sizeof
(
SPgno
),
pNewCell
,
&
szNewCell
);
tdbPageInsertCell
(
pParent
,
sIdx
++
,
pNewCell
,
szNewCell
,
0
);
f
ree
(
pNewCell
);
tdbOsF
ree
(
pNewCell
);
}
// move to next new page
...
...
@@ -798,7 +798,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) {
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
if
(
pDivCell
[
i
])
{
f
ree
(
pDivCell
[
i
]);
tdbOsF
ree
(
pDivCell
[
i
]);
}
}
...
...
source/libs/tdb/src/db/tdbDb.c
浏览文件 @
6d1477e6
...
...
@@ -34,7 +34,7 @@ int tdbDbOpen(const char *fname, int keyLen, int valLen, FKeyComparator keyCmprF
*
ppDb
=
NULL
;
pDb
=
(
STDB
*
)
c
alloc
(
1
,
sizeof
(
*
pDb
));
pDb
=
(
STDB
*
)
tdbOsC
alloc
(
1
,
sizeof
(
*
pDb
));
if
(
pDb
==
NULL
)
{
return
-
1
;
}
...
...
@@ -126,7 +126,7 @@ int tdbDbNext(STDBC *pDbc, void **ppKey, int *kLen, void **ppVal, int *vLen) {
int
tdbDbcClose
(
STDBC
*
pDbc
)
{
if
(
pDbc
)
{
f
ree
(
pDbc
);
tdbOsF
ree
(
pDbc
);
}
return
0
;
...
...
source/libs/tdb/src/db/tdbEnv.c
浏览文件 @
6d1477e6
...
...
@@ -27,7 +27,7 @@ int tdbEnvOpen(const char *rootDir, int pageSize, int cacheSize, STEnv **ppEnv)
dsize
=
strlen
(
rootDir
);
zsize
=
sizeof
(
*
pEnv
)
+
dsize
*
2
+
strlen
(
TDB_JOURNAL_NAME
)
+
3
;
pPtr
=
(
uint8_t
*
)
c
alloc
(
1
,
zsize
);
pPtr
=
(
uint8_t
*
)
tdbOsC
alloc
(
1
,
zsize
);
if
(
pPtr
==
NULL
)
{
return
-
1
;
}
...
...
source/libs/tdb/src/db/tdbOs.c
0 → 100644
浏览文件 @
6d1477e6
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
\ No newline at end of file
source/libs/tdb/src/db/tdbPCache.c
浏览文件 @
6d1477e6
...
...
@@ -63,7 +63,7 @@ int tdbPCacheOpen(int pageSize, int cacheSize, SPCache **ppCache) {
void
*
pPtr
;
SPage
*
pPgHdr
;
pCache
=
(
SPCache
*
)
c
alloc
(
1
,
sizeof
(
*
pCache
));
pCache
=
(
SPCache
*
)
tdbOsC
alloc
(
1
,
sizeof
(
*
pCache
));
if
(
pCache
==
NULL
)
{
return
-
1
;
}
...
...
@@ -72,7 +72,7 @@ int tdbPCacheOpen(int pageSize, int cacheSize, SPCache **ppCache) {
pCache
->
cacheSize
=
cacheSize
;
if
(
tdbPCacheOpenImpl
(
pCache
)
<
0
)
{
f
ree
(
pCache
);
tdbOsF
ree
(
pCache
);
return
-
1
;
}
...
...
@@ -268,7 +268,7 @@ static int tdbPCacheOpenImpl(SPCache *pCache) {
// Open the hash table
pCache
->
nPage
=
0
;
pCache
->
nHash
=
pCache
->
cacheSize
;
pCache
->
pgHash
=
(
SPage
**
)
c
alloc
(
pCache
->
nHash
,
sizeof
(
SPage
*
));
pCache
->
pgHash
=
(
SPage
**
)
tdbOsC
alloc
(
pCache
->
nHash
,
sizeof
(
SPage
*
));
if
(
pCache
->
pgHash
==
NULL
)
{
// TODO
return
-
1
;
...
...
source/libs/tdb/src/db/tdbPager.c
浏览文件 @
6d1477e6
...
...
@@ -20,8 +20,8 @@ struct SPager {
char
*
jFileName
;
int
pageSize
;
uint8_t
fid
[
TDB_FILE_ID_LEN
];
int
fd
;
int
jfd
;
tdb_fd_t
fd
;
tdb_fd_t
jfd
;
SPCache
*
pCache
;
SPgno
dbFileSize
;
SPgno
dbOrigSize
;
...
...
@@ -60,7 +60,7 @@ int tdbPagerOpen(SPCache *pCache, const char *fileName, SPager **ppPager) {
zsize
=
sizeof
(
*
pPager
)
/* SPager */
+
fsize
+
1
/* dbFileName */
+
fsize
+
8
+
1
;
/* jFileName */
pPtr
=
(
uint8_t
*
)
c
alloc
(
1
,
zsize
);
pPtr
=
(
uint8_t
*
)
tdbOsC
alloc
(
1
,
zsize
);
if
(
pPtr
==
NULL
)
{
return
-
1
;
}
...
...
@@ -80,7 +80,7 @@ int tdbPagerOpen(SPCache *pCache, const char *fileName, SPager **ppPager) {
// pPager->pCache
pPager
->
pCache
=
pCache
;
pPager
->
fd
=
o
pen
(
pPager
->
dbFileName
,
O_RDWR
|
O_CREAT
,
0755
);
pPager
->
fd
=
tdbOsO
pen
(
pPager
->
dbFileName
,
O_RDWR
|
O_CREAT
,
0755
);
if
(
pPager
->
fd
<
0
)
{
return
-
1
;
}
...
...
@@ -168,7 +168,7 @@ int tdbPagerBegin(SPager *pPager) {
}
// Open the journal
pPager
->
jfd
=
o
pen
(
pPager
->
jFileName
,
O_RDWR
|
O_CREAT
,
0755
);
pPager
->
jfd
=
tdbOsO
pen
(
pPager
->
jFileName
,
O_RDWR
|
O_CREAT
,
0755
);
if
(
pPager
->
jfd
<
0
)
{
return
-
1
;
}
...
...
@@ -208,7 +208,7 @@ int tdbPagerCommit(SPager *pPager) {
fsync
(
pPager
->
fd
);
c
lose
(
pPager
->
jfd
);
tdbOsC
lose
(
pPager
->
jfd
);
remove
(
pPager
->
jFileName
);
pPager
->
jfd
=
-
1
;
...
...
source/libs/tdb/src/inc/tdbInt.h
浏览文件 @
6d1477e6
...
...
@@ -148,6 +148,8 @@ typedef struct SPager SPager;
typedef
struct
SPCache
SPCache
;
typedef
struct
SPage
SPage
;
#include "tdbOs.h"
#include "tdbUtil.h"
#include "tdbPCache.h"
...
...
source/libs/tdb/src/inc/tdbOs.h
0 → 100644
浏览文件 @
6d1477e6
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TDB_OS_H_
#define _TDB_OS_H_
#ifdef __cplusplus
extern
"C"
{
#endif
// TODO: kmake
#define TDB_FOR_TDENGINE
// For memor
#ifdef TDB_FOR_TDENGINE
#define tdbOsMalloc taosMemoryMalloc
#define tdbOsCalloc taosMemoryCalloc
#define tdbOsRealloc taosMemoryRealloc
#define tdbOsFree taosMemoryFree
#else
#define tdbOsMalloc malloc
#define tdbOsCalloc calloc
#define tdbOsRealloc realloc
#define tdbOsFree free
#endif
// For file
#ifdef TDB_FOR_TDENGINE
typedef
TdFilePtr
tdb_fd_t
;
#define tdbOsOpen taosOpenFile
#define tdbOsClose taosCloseFile
#define tdbOsRead taosReadFile
#define tdbOsPRead taosPReadFile
#define tdbOsWrite taosWriteFile
#else
#define tdbOsOpen open
#define tdbOsClose close
#define tdbOsRead read
#define tdbOsPRead pread
#define tdbOsWrite write
#endif
// For threads and lock
#ifdef TDB_FOR_TDENGINE
// spin lock
typedef
TdThreadSpinlock
tdb_spinlock_t
;
#define tdbSpinlockInit taosThreadSpinInit
#define tdbSpinlockDestroy taosThreadSpinDestroy
#define tdbSpinlockLock taosThreadSpinLock
#define tdbSpinlockUnlock taosThreadSpinUnlock
#define tdbSpinlockTrylock
#else
// spin lock
typedef
pthread_spinlock_t
tdb_spinlock_t
;
#define tdbSpinlockInit pthread_spin_init
#define tdbSpinlockDestroy pthread_spin_destroy
#define tdbSpinlockLock pthread_spin_lock
#define tdbSpinlockUnlock pthread_spin_unlock
#define tdbSpinlockTrylock pthread_spin_trylock
#endif
#ifdef __cplusplus
}
#endif
#endif
/*_TDB_OS_H_*/
\ No newline at end of file
source/libs/tdb/src/inc/tdbPage.h
浏览文件 @
6d1477e6
...
...
@@ -53,10 +53,10 @@ typedef struct __attribute__((__packed__)) {
}
SPageFtr
;
struct
SPage
{
pthread
_spinlock_t
lock
;
int
pageSize
;
u8
*
pData
;
SPageMethods
*
pPageMethods
;
tdb
_spinlock_t
lock
;
int
pageSize
;
u8
*
pData
;
SPageMethods
*
pPageMethods
;
// Fields below used by pager and am
u8
*
pPageHdr
;
u8
*
pCellIdx
;
...
...
@@ -80,21 +80,21 @@ struct SPage {
#define P_LOCK_BUSY 1
#define P_LOCK_FAIL -1
#define TDB_INIT_PAGE_LOCK(pPage)
pthread_spin_i
nit(&((pPage)->lock), 0)
#define TDB_DESTROY_PAGE_LOCK(pPage)
pthread_spin_d
estroy(&((pPage)->lock))
#define TDB_LOCK_PAGE(pPage)
pthread_spin_l
ock(&((pPage)->lock))
#define TDB_UNLOCK_PAGE(pPage)
pthread_spin_u
nlock(&((pPage)->lock))
#define TDB_TRY_LOCK_PAGE(pPage)
\
({
\
int ret;
\
if (
pthread_spin_t
rylock(&((pPage)->lock)) == 0) { \
ret = P_LOCK_SUCC;
\
} else if (errno == EBUSY) {
\
ret = P_LOCK_BUSY;
\
} else {
\
ret = P_LOCK_FAIL;
\
}
\
ret;
\
#define TDB_INIT_PAGE_LOCK(pPage)
tdbSpinlockI
nit(&((pPage)->lock), 0)
#define TDB_DESTROY_PAGE_LOCK(pPage)
tdbSpinlockD
estroy(&((pPage)->lock))
#define TDB_LOCK_PAGE(pPage)
tdbSpinlockL
ock(&((pPage)->lock))
#define TDB_UNLOCK_PAGE(pPage)
tdbSpinlockU
nlock(&((pPage)->lock))
#define TDB_TRY_LOCK_PAGE(pPage) \
({ \
int ret; \
if (
tdbSpinlockT
rylock(&((pPage)->lock)) == 0) { \
ret = P_LOCK_SUCC; \
} else if (errno == EBUSY) { \
ret = P_LOCK_BUSY; \
} else { \
ret = P_LOCK_FAIL; \
} \
ret; \
})
// APIs
...
...
source/libs/tdb/src/inc/tdbUtil.h
浏览文件 @
6d1477e6
...
...
@@ -40,37 +40,37 @@ int tdbGetFileSize(const char *fname, int pgSize, SPgno *pSize);
int
tdbPRead
(
int
fd
,
void
*
pData
,
int
count
,
i64
offset
);
int
tdbWrite
(
int
fd
,
void
*
pData
,
int
count
);
#define TDB_REALLOC(PTR, SIZE) \
({ \
void *nPtr; \
if ((PTR) == NULL || ((int *)(PTR))[-1] < (SIZE)) { \
nPtr =
r
ealloc((PTR) ? (char *)(PTR) - sizeof(int) : NULL, (SIZE) + sizeof(int)); \
if (nPtr) { \
((int *)nPtr)[0] = (SIZE); \
nPtr = (char *)nPtr + sizeof(int); \
} \
} else { \
nPtr = (PTR); \
} \
nPtr; \
#define TDB_REALLOC(PTR, SIZE)
\
({
\
void *nPtr;
\
if ((PTR) == NULL || ((int *)(PTR))[-1] < (SIZE)) {
\
nPtr =
tdbOsR
ealloc((PTR) ? (char *)(PTR) - sizeof(int) : NULL, (SIZE) + sizeof(int)); \
if (nPtr) {
\
((int *)nPtr)[0] = (SIZE);
\
nPtr = (char *)nPtr + sizeof(int);
\
}
\
} else {
\
nPtr = (PTR);
\
}
\
nPtr;
\
})
#define TDB_FREE(PTR) \
do { \
if (PTR) { \
f
ree((char *)(PTR) - sizeof(int)); \
tdbOsF
ree((char *)(PTR) - sizeof(int)); \
} \
} while (0)
static
inline
void
*
tdb
Os
Malloc
(
void
*
arg
,
size_t
size
)
{
static
inline
void
*
tdb
Default
Malloc
(
void
*
arg
,
size_t
size
)
{
void
*
ptr
;
ptr
=
m
alloc
(
size
);
ptr
=
tdbOsM
alloc
(
size
);
return
ptr
;
}
static
inline
void
tdb
OsFree
(
void
*
arg
,
void
*
ptr
)
{
f
ree
(
ptr
);
}
static
inline
void
tdb
DefaultFree
(
void
*
arg
,
void
*
ptr
)
{
tdbOsF
ree
(
ptr
);
}
static
inline
int
tdbPutVarInt
(
u8
*
p
,
int
v
)
{
int
n
=
0
;
...
...
source/libs/tdb/src/page/tdbPage.c
浏览文件 @
6d1477e6
...
...
@@ -48,7 +48,7 @@ int tdbPageCreate(int pageSize, SPage **ppPage, void *(*xMalloc)(void *, size_t)
*
ppPage
=
NULL
;
size
=
pageSize
+
sizeof
(
*
pPage
);
if
(
xMalloc
==
NULL
)
{
xMalloc
=
tdb
Os
Malloc
;
xMalloc
=
tdb
Default
Malloc
;
}
ptr
=
(
u8
*
)((
*
xMalloc
)(
arg
,
size
));
...
...
@@ -76,7 +76,7 @@ int tdbPageDestroy(SPage *pPage, void (*xFree)(void *arg, void *ptr), void *arg)
u8
*
ptr
;
if
(
!
xFree
)
{
xFree
=
tdb
Os
Free
;
xFree
=
tdb
Default
Free
;
}
ptr
=
pPage
->
pData
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录