Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2a4e788d
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看板
提交
2a4e788d
编写于
10月 16, 2020
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor more code
上级
5f21e2e7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
161 addition
and
13 deletion
+161
-13
src/tsdb/src/tsdbCommit.c
src/tsdb/src/tsdbCommit.c
+161
-13
未找到文件。
src/tsdb/src/tsdbCommit.c
浏览文件 @
2a4e788d
...
@@ -23,6 +23,8 @@
...
@@ -23,6 +23,8 @@
#define TSDB_DATA_FILE_CHANGE 0
#define TSDB_DATA_FILE_CHANGE 0
#define TSDB_META_FILE_CHANGE 1
#define TSDB_META_FILE_CHANGE 1
#define TSDB_DEFAULT_ROWS_TO_COMMIT(maxRows) ((maxRows) * 4 / 5)
typedef
struct
{
typedef
struct
{
int
maxIters
;
int
maxIters
;
SCommitIter
*
pIters
;
SCommitIter
*
pIters
;
...
@@ -998,12 +1000,18 @@ static int tsdbCopyBlocks(STSCommitHandle *pTSCh, int sidx, int eidx) {
...
@@ -998,12 +1000,18 @@ static int tsdbCopyBlocks(STSCommitHandle *pTSCh, int sidx, int eidx) {
}
}
static
int
tsdbAppendCommit
(
STSCommitHandle
*
pTSCh
)
{
static
int
tsdbAppendCommit
(
STSCommitHandle
*
pTSCh
)
{
SDataCols
*
pDataCols
=
pTSCh
->
pDataCols
;
SDataCols
*
pDataCols
=
pTSCh
->
pDataCols
;
SBlock
block
=
{
0
};
SReadHandle
*
pReadH
=
pTSCh
->
pReadH
;
SBlock
*
pBlock
=
&
block
;
STsdbRepo
*
pRepo
=
pReadH
->
pRepo
;
STable
*
pTable
=
pReadH
->
pTable
;
SBlock
block
=
{
0
};
SBlock
*
pBlock
=
&
block
;
STsdbCfg
*
pCfg
=
&
(
pRepo
->
config
);
SCommitIter
*
pIter
=
pTSCh
->
pIters
+
TABLE_TID
(
pTable
);
int
blockCommitRows
=
TSDB_DEFAULT_ROWS_TO_COMMIT
(
pCfg
->
maxRowsPerFileBlock
);
tdResetDataCols
(
pDataCols
);
tdResetDataCols
(
pDataCols
);
int
rowsToRead
=
tsdbLoadDataFromCache
();
int
rowsToRead
=
tsdbLoadDataFromCache
(
pTable
,
pIter
->
pIter
,
pReadH
->
maxKey
,
blockCommitRows
,
pDataCols
,
NULL
,
0
);
ASSERT
(
rowsToRead
>
0
);
ASSERT
(
rowsToRead
>
0
);
if
(
tsdbWriteBlockToProperFile
(
pTSCh
,
pDataCols
,
pBlock
)
<
0
)
return
-
1
;
if
(
tsdbWriteBlockToProperFile
(
pTSCh
,
pDataCols
,
pBlock
)
<
0
)
return
-
1
;
...
@@ -1013,15 +1021,10 @@ static int tsdbAppendCommit(STSCommitHandle *pTSCh) {
...
@@ -1013,15 +1021,10 @@ static int tsdbAppendCommit(STSCommitHandle *pTSCh) {
}
}
static
int
tsdbMergeCommit
(
STSCommitHandle
*
pTSCh
,
SBlock
*
pBlock
)
{
static
int
tsdbMergeCommit
(
STSCommitHandle
*
pTSCh
,
SBlock
*
pBlock
)
{
STable
*
pTable
=
pTSCh
->
pReadH
->
pTable
;
if
(
pBlock
->
last
)
{
// merge with the last block
SCommitIter
*
pIter
=
pTSCh
->
pIters
+
TABLE_TID
(
pTable
);
if
(
tsdbCommitMergeLastBlock
(
pTSCh
,
pBlock
)
<
0
)
return
-
1
;
}
else
{
// merge with a data block
TSKEY
nextKey
=
tsdbNextIterKey
(
pIter
->
pIter
);
if
(
tsdbCommitMergeDataBlock
(
pTSCh
,
pBlock
)
<
0
)
return
-
1
;
if
(
pBlock
->
last
)
{
}
else
{
}
}
return
0
;
return
0
;
...
@@ -1163,5 +1166,150 @@ static int tsdbWriteBlockToFile(STSCommitHandle *pTSCh, SFile *pFile, SDataCols
...
@@ -1163,5 +1166,150 @@ static int tsdbWriteBlockToFile(STSCommitHandle *pTSCh, SFile *pFile, SDataCols
pFile
->
info
.
size
+=
pBlock
->
len
;
pFile
->
info
.
size
+=
pBlock
->
len
;
return
0
;
}
static
int
tsdbCommitMergeLastBlock
(
STSCommitHandle
*
pTSCh
,
SBlock
*
pBlock
)
{
SDataCols
*
pDataCols
=
pTSCh
->
pDataCols
;
SReadHandle
*
pReadH
=
pTSCh
->
pReadH
;
STable
*
pTable
=
pTSCh
->
pReadH
->
pTable
;
SCommitIter
*
pIter
=
pTSCh
->
pIters
+
TABLE_TID
(
pTable
);
STsdbRepo
*
pRepo
=
pReadH
->
pRepo
;
STsdbCfg
*
pCfg
=
&
(
pRepo
->
config
);
int
blockCommitRows
=
TSDB_DEFAULT_ROWS_TO_COMMIT
(
pCfg
->
maxRowsPerFileBlock
);
SBlock
nblock
=
{
0
};
SBlock
*
pNBlock
=
&
nblock
;
TSKEY
nextKey
=
tsdbNextIterKey
(
pIter
->
pIter
);
int
bidx
=
POINTER_DISTANCE
(
pBlock
,
pReadH
->
pBlockInfo
->
blocks
)
/
sizeof
(
SBlock
);
if
(
nextKey
>
pBlock
->
keyLast
)
{
// just merge and append
tdResetDataCols
(
pDataCols
);
int
rowsToRead
=
tsdbLoadDataFromCache
(
pTable
,
pIter
->
pIter
,
pReadH
->
maxKey
,
blockCommitRows
-
pBlock
->
numOfRows
,
pDataCols
,
NULL
,
0
);
ASSERT
(
rowsToRead
>
0
);
if
(
rowsToRead
+
pBlock
->
numOfRows
<
pCfg
->
minRowsPerFileBlock
&&
pBlock
->
numOfSubBlocks
<
TSDB_MAX_SUB_BLOCKS
&&
/* No new last file is opened*/
)
{
if
(
tsdbWriteBlockToFile
(
pTSCh
,
TSDB_FILE_IN_FGROUP
(
pTSCh
->
pFGroup
,
TSDB_FILE_TYPE_LAST
),
pDataCols
,
pNBlock
,
true
,
false
)
<
0
)
{
return
-
1
;
};
if
(
tsdbAddSubBlock
(
pTSCh
,
pNBlock
,
NULL
)
<
0
)
return
-
1
;
}
else
{
if
(
tsdbLoadBlockData
(
pReadH
,
pBlock
,
NULL
)
<
0
)
return
-
1
;
if
(
tdMergeDataCols
(
pReadH
->
pDataCols
[
0
],
pDataCols
,
pDataCols
->
numOfRows
)
<
0
)
return
-
1
;
if
(
tsdbWriteBlockToProperFile
(
pReadH
,
pReadH
->
pDataCols
[
0
],
pNBlock
)
<
0
)
return
-
1
;
if
(
tsdbAddSuperBlock
(
pTSCh
,
pNBlock
)
<
0
)
return
-
1
;
}
}
else
{
if
(
/* append the old last file */
)
{
SSkipListIterator
titer
=
*
(
pIter
->
pIter
);
int16_t
colId
=
0
;
if
(
tsdbLoadBlockDataCols
(
pReadH
,
pBlock
,
NULL
,
&
colId
,
1
)
<
0
)
return
-
1
;
int
rowsToRead
=
tsdbLoadDataFromCache
();
if
(
rowsToRead
==
0
)
{
*
(
pIter
->
pIter
)
=
titer
;
tsdbCopyBlocks
();
}
else
{
if
(
pBlock
->
numOfSubBlocks
<
TSDB_MAX_SUBBLOCKS
&&
rowsToRead
+
Block
->
numOfRows
<
pCfg
->
minRowsPerFileBlock
)
{
tsdbLoadDataFromCache
();
if
(
tsdbWriteBlockToFile
()
<
0
)
return
-
1
;
if
(
tsdbaddsubblock
()
<
0
)
return
-
1
;
}
else
{
if
(
tasdbloadblockdata
()
<
0
)
return
-
1
;
while
(
true
)
{
tsdbLoadAndMergeFromCache
();
}
}
}
}
else
{
if
(
tsdbLoadBlockData
(
pReadH
,
pBlock
,
NULL
)
<
0
)
return
-
1
;
while
(
true
)
{
tsdbLoadAndMergeFromCache
();
}
}
}
return
0
;
}
static
int
tsdbCommitMergeDataBlock
(
STSCommitHandle
*
pTSCh
,
SBlock
*
pBlock
)
{
TSKEY
keyLimit
=
(
tblkIdx
==
pIdx
->
numOfBlocks
-
1
)
?
maxKey
:
(
pCompBlock
[
1
].
keyFirst
-
1
);
TSKEY
blkKeyFirst
=
pCompBlock
->
keyFirst
;
TSKEY
blkKeyLast
=
pCompBlock
->
keyLast
;
if
(
keyFirst
<
blkKeyFirst
)
{
while
(
true
)
{
tdResetDataCols
(
pDataCols
);
int
rowsRead
=
tsdbLoadDataFromCache
(
pTable
,
pCommitIter
->
pIter
,
blkKeyFirst
-
1
,
defaultRowsInBlock
,
pDataCols
,
NULL
,
0
);
if
(
rowsRead
==
0
)
break
;
ASSERT
(
rowsRead
==
pDataCols
->
numOfRows
);
if
(
tsdbWriteBlockToFile
(
pHelper
,
helperDataF
(
pHelper
),
pDataCols
,
&
compBlock
,
false
,
true
)
<
0
)
return
-
1
;
if
(
tsdbInsertSuperBlock
(
pHelper
,
&
compBlock
,
tblkIdx
)
<
0
)
return
-
1
;
tblkIdx
++
;
}
ASSERT
(
tblkIdx
==
0
||
(
tsdbNextIterKey
(
pCommitIter
->
pIter
)
<
0
||
tsdbNextIterKey
(
pCommitIter
->
pIter
)
>
blockAtIdx
(
pHelper
,
tblkIdx
-
1
)
->
keyLast
));
}
else
{
ASSERT
(
keyFirst
<=
blkKeyLast
);
int16_t
colId
=
0
;
if
(
tsdbLoadBlockDataCols
(
pHelper
,
pCompBlock
,
NULL
,
&
colId
,
1
)
<
0
)
return
-
1
;
slIter
=
*
(
pCommitIter
->
pIter
);
int
rows1
=
(
pCfg
->
maxRowsPerFileBlock
-
pCompBlock
->
numOfRows
);
int
rows2
=
tsdbLoadDataFromCache
(
pTable
,
&
slIter
,
blkKeyLast
,
INT_MAX
,
NULL
,
pDataCols0
->
cols
[
0
].
pData
,
pDataCols0
->
numOfRows
);
if
(
rows2
==
0
)
{
// all filtered out
*
(
pCommitIter
->
pIter
)
=
slIter
;
ASSERT
(
tblkIdx
==
0
||
(
tsdbNextIterKey
(
pCommitIter
->
pIter
)
<
0
||
tsdbNextIterKey
(
pCommitIter
->
pIter
)
>
blockAtIdx
(
pHelper
,
tblkIdx
-
1
)
->
keyLast
));
}
else
{
int
rows3
=
tsdbLoadDataFromCache
(
pTable
,
&
slIter
,
keyLimit
,
INT_MAX
,
NULL
,
NULL
,
0
)
+
rows2
;
if
(
pCompBlock
->
numOfSubBlocks
<
TSDB_MAX_SUBBLOCKS
&&
rows1
>=
rows2
)
{
int
rows
=
(
rows1
>=
rows3
)
?
rows3
:
rows2
;
tdResetDataCols
(
pDataCols
);
int
rowsRead
=
tsdbLoadDataFromCache
(
pTable
,
pCommitIter
->
pIter
,
keyLimit
,
rows
,
pDataCols
,
pDataCols0
->
cols
[
0
].
pData
,
pDataCols0
->
numOfRows
);
ASSERT
(
rowsRead
==
rows
&&
rowsRead
==
pDataCols
->
numOfRows
);
if
(
tsdbWriteBlockToFile
(
pHelper
,
helperDataF
(
pHelper
),
pDataCols
,
&
compBlock
,
false
,
false
)
<
0
)
return
-
1
;
if
(
tsdbAddSubBlock
(
pHelper
,
&
compBlock
,
tblkIdx
,
rowsRead
)
<
0
)
return
-
1
;
tblkIdx
++
;
ASSERT
(
tblkIdx
==
0
||
(
tsdbNextIterKey
(
pCommitIter
->
pIter
)
<
0
||
tsdbNextIterKey
(
pCommitIter
->
pIter
)
>
blockAtIdx
(
pHelper
,
tblkIdx
-
1
)
->
keyLast
));
}
else
{
if
(
tsdbLoadBlockData
(
pHelper
,
pCompBlock
,
NULL
)
<
0
)
return
-
1
;
int
round
=
0
;
int
dIter
=
0
;
while
(
true
)
{
int
rowsRead
=
tsdbLoadAndMergeFromCache
(
pDataCols0
,
&
dIter
,
pCommitIter
,
pDataCols
,
keyLimit
,
defaultRowsInBlock
);
if
(
rowsRead
==
0
)
break
;
if
(
tsdbWriteBlockToFile
(
pHelper
,
helperDataF
(
pHelper
),
pDataCols
,
&
compBlock
,
false
,
true
)
<
0
)
return
-
1
;
if
(
round
==
0
)
{
if
(
tsdbUpdateSuperBlock
(
pHelper
,
&
compBlock
,
tblkIdx
)
<
0
)
return
-
1
;
}
else
{
if
(
tsdbInsertSuperBlock
(
pHelper
,
&
compBlock
,
tblkIdx
)
<
0
)
return
-
1
;
}
round
++
;
tblkIdx
++
;
}
ASSERT
(
tblkIdx
==
0
||
(
tsdbNextIterKey
(
pCommitIter
->
pIter
)
<
0
||
tsdbNextIterKey
(
pCommitIter
->
pIter
)
>
blockAtIdx
(
pHelper
,
tblkIdx
-
1
)
->
keyLast
));
}
}
}
return
0
;
return
0
;
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录