Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
loser646
TDengine
提交
7546da5e
T
TDengine
项目概览
loser646
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7546da5e
编写于
3月 22, 2020
作者:
H
hzcheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
TD-34
上级
7a562813
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
51 addition
and
27 deletion
+51
-27
src/vnode/tsdb/inc/tsdbCache.h
src/vnode/tsdb/inc/tsdbCache.h
+11
-3
src/vnode/tsdb/inc/tsdbFile.h
src/vnode/tsdb/inc/tsdbFile.h
+5
-0
src/vnode/tsdb/src/tsdbCache.c
src/vnode/tsdb/src/tsdbCache.c
+21
-11
src/vnode/tsdb/src/tsdbFile.c
src/vnode/tsdb/src/tsdbFile.c
+1
-5
src/vnode/tsdb/src/tsdbMain.c
src/vnode/tsdb/src/tsdbMain.c
+13
-8
未找到文件。
src/vnode/tsdb/inc/tsdbCache.h
浏览文件 @
7546da5e
...
...
@@ -17,6 +17,7 @@
#include <stdint.h>
#include "taosdef.h"
#include "tlist.h"
#ifdef __cplusplus
...
...
@@ -38,18 +39,25 @@ typedef struct {
SList
*
memPool
;
}
STsdbCachePool
;
typedef
struct
{
TSKEY
keyFirst
;
TSKEY
keyLast
;
int64_t
numOfPoints
;
SList
*
list
;
}
SCacheMem
;
typedef
struct
{
int
maxBytes
;
int
cacheBlockSize
;
STsdbCachePool
pool
;
STsdbCacheBlock
*
curBlock
;
S
List
*
mem
;
S
List
*
imem
;
S
CacheMem
*
mem
;
S
CacheMem
*
imem
;
}
STsdbCache
;
STsdbCache
*
tsdbInitCache
(
int
maxBytes
,
int
cacheBlockSize
);
void
tsdbFreeCache
(
STsdbCache
*
pCache
);
void
*
tsdbAllocFromCache
(
STsdbCache
*
pCache
,
int
bytes
);
void
*
tsdbAllocFromCache
(
STsdbCache
*
pCache
,
int
bytes
,
TSKEY
key
);
#ifdef __cplusplus
}
...
...
src/vnode/tsdb/inc/tsdbFile.h
浏览文件 @
7546da5e
...
...
@@ -18,11 +18,15 @@
#include <stdint.h>
#include "taosdef.h"
#include "tglobalcfg.h"
#ifdef __cplusplus
extern
"C"
{
#endif
#define tsdbGetKeyFileId(key, daysPerFile, precision) ((key) / tsMsPerDay[(precision)] / (daysPerFile))
#define tsdbGetMaxNumOfFiles(keep, daysPerFile) ((keep) / (daysPerFile) + 3)
typedef
enum
{
TSDB_FILE_TYPE_HEAD
=
0
,
// .head file type
TSDB_FILE_TYPE_DATA
,
// .data file type
...
...
@@ -66,6 +70,7 @@ STsdbFileH *tsdbInitFile(char *dataDir, int32_t daysPerFile, int32_t keep, int32
void
tsdbCloseFile
(
STsdbFileH
*
pFileH
);
int
tsdbCreateFileGroup
(
char
*
dataDir
,
int
fileId
,
SFileGroup
*
pFGroup
,
int
maxTables
);
void
tsdbGetKeyRangeOfFileId
(
int32_t
daysPerFile
,
int8_t
precision
,
int32_t
fileId
,
TSKEY
*
minKey
,
TSKEY
*
maxKey
);
#ifdef __cplusplus
}
#endif
...
...
src/vnode/tsdb/src/tsdbCache.c
浏览文件 @
7546da5e
...
...
@@ -17,7 +17,7 @@
#include "tsdbCache.h"
static
int
tsdbAllocBlockFromPool
(
STsdbCache
*
pCache
);
static
void
tsdbFreeBlockList
(
S
List
*
list
);
static
void
tsdbFreeBlockList
(
S
CacheMem
*
mem
);
STsdbCache
*
tsdbInitCache
(
int
maxBytes
,
int
cacheBlockSize
)
{
STsdbCache
*
pCache
=
(
STsdbCache
*
)
calloc
(
1
,
sizeof
(
STsdbCache
));
...
...
@@ -46,11 +46,8 @@ STsdbCache *tsdbInitCache(int maxBytes, int cacheBlockSize) {
tdListAppend
(
pPool
->
memPool
,
(
void
*
)(
&
pBlock
));
}
pCache
->
mem
=
tdListNew
(
sizeof
(
STsdbCacheBlock
*
));
if
(
pCache
->
mem
==
NULL
)
goto
_err
;
pCache
->
imem
=
tdListNew
(
sizeof
(
STsdbCacheBlock
*
));
if
(
pCache
->
imem
==
NULL
)
goto
_err
;
pCache
->
mem
=
NULL
;
pCache
->
imem
=
NULL
;
return
pCache
;
...
...
@@ -66,11 +63,20 @@ void tsdbFreeCache(STsdbCache *pCache) {
free
(
pCache
);
}
void
*
tsdbAllocFromCache
(
STsdbCache
*
pCache
,
int
bytes
)
{
void
*
tsdbAllocFromCache
(
STsdbCache
*
pCache
,
int
bytes
,
TSKEY
key
)
{
if
(
pCache
==
NULL
)
return
NULL
;
if
(
bytes
>
pCache
->
cacheBlockSize
)
return
NULL
;
if
(
isListEmpty
(
pCache
->
mem
))
{
if
(
pCache
->
mem
==
NULL
)
{
// Create a new one
pCache
->
mem
=
(
SCacheMem
*
)
malloc
(
sizeof
(
SCacheMem
));
if
(
pCache
->
mem
==
NULL
)
return
NULL
;
pCache
->
mem
->
keyFirst
=
INT64_MAX
;
pCache
->
mem
->
keyLast
=
0
;
pCache
->
mem
->
numOfPoints
=
0
;
pCache
->
mem
->
list
=
tdListNew
(
sizeof
(
STsdbCacheBlock
*
));
}
if
(
isListEmpty
(
pCache
->
mem
->
list
))
{
if
(
tsdbAllocBlockFromPool
(
pCache
)
<
0
)
{
// TODO: deal with the error
}
...
...
@@ -86,12 +92,15 @@ void *tsdbAllocFromCache(STsdbCache *pCache, int bytes) {
pCache
->
curBlock
->
offset
+=
bytes
;
pCache
->
curBlock
->
remain
-=
bytes
;
memset
(
ptr
,
0
,
bytes
);
if
(
key
<
pCache
->
mem
->
keyFirst
)
pCache
->
mem
->
keyFirst
=
key
;
if
(
key
>
pCache
->
mem
->
keyLast
)
pCache
->
mem
->
keyLast
=
key
;
return
ptr
;
}
static
void
tsdbFreeBlockList
(
SList
*
list
)
{
if
(
list
==
NULL
)
return
;
static
void
tsdbFreeBlockList
(
SCacheMem
*
mem
)
{
if
(
mem
==
NULL
)
return
;
SList
*
list
=
mem
->
list
;
SListNode
*
node
=
NULL
;
STsdbCacheBlock
*
pBlock
=
NULL
;
while
((
node
=
tdListPopHead
(
list
))
!=
NULL
)
{
...
...
@@ -100,6 +109,7 @@ static void tsdbFreeBlockList(SList *list) {
listNodeFree
(
node
);
}
tdListFree
(
list
);
free
(
mem
);
}
static
int
tsdbAllocBlockFromPool
(
STsdbCache
*
pCache
)
{
...
...
@@ -114,7 +124,7 @@ static int tsdbAllocBlockFromPool(STsdbCache *pCache) {
pBlock
->
offset
=
0
;
pBlock
->
remain
=
pCache
->
cacheBlockSize
;
tdListAppendNode
(
pCache
->
mem
,
node
);
tdListAppendNode
(
pCache
->
mem
->
list
,
node
);
pCache
->
curBlock
=
pBlock
;
return
0
;
...
...
src/vnode/tsdb/src/tsdbFile.c
浏览文件 @
7546da5e
...
...
@@ -22,15 +22,11 @@
#include <sys/types.h>
#include <unistd.h>
#include "tglobalcfg.h"
#include "tsdbFile.h"
#define TSDB_FILE_HEAD_SIZE 512
#define TSDB_FILE_DELIMITER 0xF00AFA0F
#define tsdbGetKeyFileId(key, daysPerFile, precision) ((key) / tsMsPerDay[(precision)] / (daysPerFile))
#define tsdbGetMaxNumOfFiles(keep, daysPerFile) ((keep) / (daysPerFile) + 3)
typedef
struct
{
int32_t
len
;
int32_t
padding
;
// For padding purpose
...
...
@@ -228,7 +224,7 @@ STsdbFileH *tsdbInitFile(char *dataDir, int32_t daysPerFile, int32_t keep, int32
return
pTsdbFileH
;
}
static
void
tsdbGetKeyRangeOfFileId
(
int32_t
daysPerFile
,
int8_t
precision
,
int32_t
fileId
,
TSKEY
*
minKey
,
void
tsdbGetKeyRangeOfFileId
(
int32_t
daysPerFile
,
int8_t
precision
,
int32_t
fileId
,
TSKEY
*
minKey
,
TSKEY
*
maxKey
)
{
*
minKey
=
fileId
*
daysPerFile
*
tsMsPerDay
[
precision
];
*
maxKey
=
*
minKey
+
daysPerFile
*
tsMsPerDay
[
precision
]
-
1
;
...
...
src/vnode/tsdb/src/tsdbMain.c
浏览文件 @
7546da5e
...
...
@@ -316,8 +316,9 @@ int32_t tsdbTriggerCommit(tsdb_repo_t *repo) {
pTable
->
mem
=
NULL
;
}
}
// Loop to move mem to imem
tdListMove
(
pRepo
->
tsdbCache
->
mem
,
pRepo
->
tsdbCache
->
imem
);
// TODO: Loop to move mem to imem
pRepo
->
tsdbCache
->
imem
=
pRepo
->
tsdbCache
->
mem
;
pRepo
->
tsdbCache
->
mem
=
NULL
;
pthread_create
(
&
(
pRepo
->
commitThread
),
NULL
,
tsdbCommitToFile
,
(
void
*
)
repo
);
pthread_mutex_unlock
(
&
(
pRepo
->
mutex
));
...
...
@@ -678,8 +679,9 @@ static int32_t tdInsertRowToTable(STsdbRepo *pRepo, SDataRow row, STable *pTable
tSkipListRandNodeInfo
(
pTable
->
mem
->
pData
,
&
level
,
&
headSize
);
TSKEY
key
=
dataRowKey
(
row
);
// Copy row into the memory
SSkipListNode
*
pNode
=
tsdbAllocFromCache
(
pRepo
->
tsdbCache
,
headSize
+
dataRowLen
(
row
));
SSkipListNode
*
pNode
=
tsdbAllocFromCache
(
pRepo
->
tsdbCache
,
headSize
+
dataRowLen
(
row
)
,
key
);
if
(
pNode
==
NULL
)
{
// TODO: deal with allocate failure
}
...
...
@@ -689,7 +691,6 @@ static int32_t tdInsertRowToTable(STsdbRepo *pRepo, SDataRow row, STable *pTable
// Insert the skiplist node into the data
tSkipListPut
(
pTable
->
mem
->
pData
,
pNode
);
TSKEY
key
=
dataRowKey
(
row
);
if
(
key
>
pTable
->
mem
->
keyLast
)
pTable
->
mem
->
keyLast
=
key
;
if
(
key
<
pTable
->
mem
->
keyFirst
)
pTable
->
mem
->
keyFirst
=
key
;
pTable
->
mem
->
numOfPoints
++
;
...
...
@@ -716,20 +717,24 @@ static int32_t tsdbInsertDataToTable(tsdb_repo_t *repo, SSubmitBlk *pBlock) {
return
0
;
}
// Commit to file
static
void
*
tsdbCommitToFile
(
void
*
arg
)
{
// TODO
STsdbRepo
*
pRepo
=
(
STsdbRepo
*
)
arg
;
STsdbMeta
*
pMeta
=
pRepo
->
tsdbMeta
;
for
(
int
i
=
0
;
i
<
pRepo
->
config
.
maxTables
;
i
++
)
{
for
(
int
i
=
0
;
i
<
pRepo
->
config
.
maxTables
;
i
++
)
{
// Loop over table
STable
*
pTable
=
pMeta
->
tables
[
i
];
if
(
pTable
==
NULL
)
continue
;
SSkipListIterator
*
pIter
=
tSkipListCreateIter
(
pTable
->
imem
->
pData
);
if
(
pTable
==
NULL
||
pTable
->
imem
==
NULL
)
continue
;
SMemTable
*
pMem
=
pTable
->
imem
;
SSkipListIterator
*
pIter
=
tSkipListCreateIter
(
pMem
->
pData
);
// Loop to commit to file
while
(
tSkipListIterNext
(
pIter
))
{
SSkipListNode
*
node
=
tSkipListIterGet
(
pIter
);
SDataRow
row
=
SL_GET_NODE_DATA
(
node
);
int
k
=
0
;
}
tSkipListDestroyIter
(
pIter
);
}
return
NULL
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录