Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
44c47330
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看板
提交
44c47330
编写于
6月 27, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more work
上级
83fa9e63
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
236 addition
and
146 deletion
+236
-146
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+4
-0
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+229
-146
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
+3
-0
未找到文件。
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
44c47330
...
@@ -104,6 +104,8 @@ int32_t tRowMergerGetRow(SRowMerger *pMerger, STSRow **ppRow);
...
@@ -104,6 +104,8 @@ int32_t tRowMergerGetRow(SRowMerger *pMerger, STSRow **ppRow);
int32_t
tTABLEIDCmprFn
(
const
void
*
p1
,
const
void
*
p2
);
int32_t
tTABLEIDCmprFn
(
const
void
*
p1
,
const
void
*
p2
);
// TSDBKEY
// TSDBKEY
int32_t
tsdbKeyCmprFn
(
const
void
*
p1
,
const
void
*
p2
);
int32_t
tsdbKeyCmprFn
(
const
void
*
p1
,
const
void
*
p2
);
#define MIN_TSDBKEY(KEY1, KEY2) ((tsdbKeyCmprFn(&(KEY1), &(KEY2)) < 0) ? (KEY1) : (KEY2))
#define MAX_TSDBKEY(KEY1, KEY2) ((tsdbKeyCmprFn(&(KEY1), &(KEY2)) > 0) ? (KEY1) : (KEY2))
// KEYINFO
// KEYINFO
#define tKEYINFOInit() \
#define tKEYINFOInit() \
((KEYINFO){.maxKey = {.ts = TSKEY_MIN, .version = -1}, \
((KEYINFO){.maxKey = {.ts = TSKEY_MIN, .version = -1}, \
...
@@ -139,6 +141,8 @@ int32_t tColDataPCmprFn(const void *p1, const void *p2);
...
@@ -139,6 +141,8 @@ int32_t tColDataPCmprFn(const void *p1, const void *p2);
// SBlockData
// SBlockData
#define tBlockDataFirstRow(PBLOCKDATA) tsdbRowFromBlockData(PBLOCKDATA, 0)
#define tBlockDataFirstRow(PBLOCKDATA) tsdbRowFromBlockData(PBLOCKDATA, 0)
#define tBlockDataLastRow(PBLOCKDATA) tsdbRowFromBlockData(PBLOCKDATA, (PBLOCKDATA)->nRow - 1)
#define tBlockDataLastRow(PBLOCKDATA) tsdbRowFromBlockData(PBLOCKDATA, (PBLOCKDATA)->nRow - 1)
#define tBlockDataFirstKey(PBLOCKDATA) TSDBROW_KEY(&tBlockDataFirstRow(PBLOCKDATA))
#define tBlockDataLastKey(PBLOCKDATA) TSDBROW_KEY(&tBlockDataLastRow(PBLOCKDATA))
int32_t
tBlockDataInit
(
SBlockData
*
pBlockData
);
int32_t
tBlockDataInit
(
SBlockData
*
pBlockData
);
void
tBlockDataReset
(
SBlockData
*
pBlockData
);
void
tBlockDataReset
(
SBlockData
*
pBlockData
);
void
tBlockDataClear
(
SBlockData
*
pBlockData
);
void
tBlockDataClear
(
SBlockData
*
pBlockData
);
...
...
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
44c47330
...
@@ -614,31 +614,39 @@ _err:
...
@@ -614,31 +614,39 @@ _err:
return
code
;
return
code
;
}
}
static
int32_t
tsdbMergeTableData
(
SCommitter
*
pCommitter
,
STbDataIter
*
pIter
,
SBlock
Idx
*
pBlockIdx
,
SBlock
*
pBlock
,
static
int32_t
tsdbMergeTableData
(
SCommitter
*
pCommitter
,
STbDataIter
*
pIter
,
SBlock
*
pBlockMerge
,
TSDBKEY
toKey
,
TSDBKEY
toKey
/*not included*/
,
int8_t
toDataOnly
)
{
int8_t
toDataOnly
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
SBlockData
*
pBlockDataFrom
=
&
pCommitter
->
oBlockData
;
SBlockIdx
*
pBlockIdx
=
&
(
SBlockIdx
){.
suid
=
pIter
->
pTbData
->
suid
,
.
uid
=
pIter
->
pTbData
->
uid
};
SBlockData
*
pBlockDataTo
=
&
pCommitter
->
nBlockData
;
SBlockData
*
pBlockDataMerge
=
&
pCommitter
->
oBlockData
;
SBlockData
*
pBlockData
=
&
pCommitter
->
nBlockData
;
SBlock
*
pBlock
=
&
pCommitter
->
nBlock
;
TSDBROW
*
pRow1
;
TSDBROW
*
pRow1
;
TSDBROW
*
pRow2
;
TSDBROW
row2
;
TSDBROW
*
pRow2
=
&
row2
;
TSDBROW
row
;
TSDBROW
*
pRow
=
&
row
;
int32_t
c
=
0
;
int32_t
c
=
0
;
TSKEY
lastKey
;
// read SBlockData
// read SBlockData
code
=
tsdbReadBlockData
(
pCommitter
->
pReader
,
pBlockIdx
,
pBlock
,
pBlockDataFrom
,
NULL
,
NULL
);
code
=
tsdbReadBlockData
(
pCommitter
->
pReader
,
pBlockIdx
,
pBlock
Merge
,
pBlockDataMerge
,
NULL
,
NULL
);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
// loop to merge
// loop to merge
tBlockDataReset
(
pBlockDataTo
);
pRow1
=
tsdbTbDataIterGet
(
pIter
);
pRow1
=
tsdbTbDataIterGet
(
pIter
);
pRow2
=
&
tsdbRowFromBlockData
(
pBlockDataFrom
,
0
);
*
pRow2
=
tsdbRowFromBlockData
(
pBlockDataMerge
,
0
);
ASSERT
(
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow1
),
&
toKey
)
<
0
);
ASSERT
(
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow1
),
&
toKey
)
<
0
);
ASSERT
(
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow2
),
&
toKey
)
<
0
);
ASSERT
(
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow2
),
&
toKey
)
<
0
);
code
=
tsdbCommitterUpdateSchema
(
pCommitter
,
pBlockIdx
->
suid
,
pBlockIdx
->
uid
,
TSDBROW_SVERSION
(
pRow1
));
code
=
tsdbCommitterUpdateSchema
(
pCommitter
,
pBlockIdx
->
suid
,
pBlockIdx
->
uid
,
TSDBROW_SVERSION
(
pRow1
));
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
lastKey
=
TSKEY_MIN
;
tBlockReset
(
pBlock
);
tBlockDataReset
(
pBlockData
);
while
(
true
)
{
while
(
true
)
{
if
(
pRow1
==
NULL
&&
pRow2
==
NULL
)
{
if
(
pRow1
==
NULL
&&
pRow2
==
NULL
)
{
if
(
pBlockData
To
->
nRow
==
0
)
{
if
(
pBlockData
->
nRow
==
0
)
{
break
;
break
;
}
else
{
}
else
{
goto
_write_block
;
goto
_write_block
;
...
@@ -646,43 +654,85 @@ static int32_t tsdbMergeTableData(SCommitter *pCommitter, STbDataIter *pIter, SB
...
@@ -646,43 +654,85 @@ static int32_t tsdbMergeTableData(SCommitter *pCommitter, STbDataIter *pIter, SB
}
}
if
(
pRow1
&&
pRow2
)
{
if
(
pRow1
&&
pRow2
)
{
c
=
tsdbRowCmprFn
(
pRow1
,
pRow2
);
if
(
tsdbRowCmprFn
(
pRow1
,
pRow2
)
<
0
)
{
if
(
c
<
0
)
{
*
pRow
=
*
pRow1
;
code
=
tBlockDataAppendRow
(
pBlockDataTo
,
pRow1
,
pCommitter
->
pTSchema
);
if
(
code
)
goto
_err
;
tsdbTbDataIterNext
(
pIter
);
tsdbTbDataIterNext
(
pIter
);
pRow1
=
tsdbTbDataIterGet
(
pIter
);
pRow1
=
tsdbTbDataIterGet
(
pIter
);
// TODO
}
else
if
(
c
>
0
)
{
code
=
tBlockDataAppendRow
(
pBlockDataTo
,
pRow2
,
NULL
);
if
(
code
)
goto
_err
;
pRow2
=
pRow2
->
iRow
+
1
<
pBlockDataFrom
->
nRow
?
&
tsdbRowFromBlockData
(
pBlockDataFrom
,
pRow2
->
iRow
+
1
)
:
NULL
;
if
(
pRow1
)
{
if
(
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow1
),
&
toKey
)
<
0
)
{
code
=
tsdbCommitterUpdateSchema
(
pCommitter
,
pBlockIdx
->
suid
,
pBlockIdx
->
uid
,
TSDBROW_VERSION
(
pRow1
));
if
(
code
)
goto
_err
;
}
else
{
pRow1
=
NULL
;
}
}
}
else
if
(
tsdbRowCmprFn
(
pRow1
,
pRow2
)
<
0
)
{
*
pRow
=
*
pRow2
;
if
(
pRow2
->
iRow
+
1
<
pBlockDataMerge
->
nRow
)
{
*
pRow2
=
tsdbRowFromBlockData
(
pBlockDataMerge
,
pRow2
->
iRow
+
1
);
}
else
{
pRow2
=
NULL
;
}
}
else
{
}
else
{
ASSERT
(
0
);
ASSERT
(
0
);
}
}
}
else
if
(
pRow1
)
{
}
else
if
(
pRow1
)
{
code
=
tBlockDataAppendRow
(
pBlockDataTo
,
pRow1
,
pCommitter
->
pTSchema
);
*
pRow
=
*
pRow1
;
tsdbTbDataIterNext
(
pIter
);
tsdbTbDataIterNext
(
pIter
);
pRow1
=
tsdbTbDataIterGet
(
pIter
);
pRow1
=
tsdbTbDataIterGet
(
pIter
);
// TODO
if
(
pRow1
)
{
if
(
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow1
),
&
toKey
)
<
0
)
{
code
=
tsdbCommitterUpdateSchema
(
pCommitter
,
pBlockIdx
->
suid
,
pBlockIdx
->
uid
,
TSDBROW_VERSION
(
pRow1
));
if
(
code
)
goto
_err
;
}
else
{
pRow1
=
NULL
;
}
}
}
else
{
}
else
{
code
=
tBlockDataAppendRow
(
pBlockDataTo
,
pRow2
,
NULL
);
*
pRow
=
*
pRow2
;
if
(
code
)
goto
_err
;
pRow2
=
pRow2
->
iRow
+
1
<
pBlockDataFrom
->
nRow
?
&
tsdbRowFromBlockData
(
pBlockDataFrom
,
pRow2
->
iRow
+
1
)
:
NULL
;
if
(
pRow2
->
iRow
+
1
<
pBlockDataMerge
->
nRow
)
{
*
pRow2
=
tsdbRowFromBlockData
(
pBlockDataMerge
,
pRow2
->
iRow
+
1
);
}
else
{
pRow2
=
NULL
;
}
}
}
if
(
pBlockDataTo
->
nRow
>=
pCommitter
->
maxRow
*
4
/
5
)
{
code
=
tBlockDataAppendRow
(
pBlockData
,
&
row
,
pCommitter
->
pTSchema
);
goto
_write_block
;
if
(
code
)
goto
_err
;
pBlock
->
minVersion
=
TMIN
(
pBlock
->
minVersion
,
TSDBROW_VERSION
(
pRow
));
pBlock
->
maxVersion
=
TMAX
(
pBlock
->
maxVersion
,
TSDBROW_VERSION
(
pRow
));
pBlock
->
nRow
++
;
if
(
lastKey
==
TSDBROW_TS
(
pRow
))
{
pBlock
->
hasDup
=
1
;
}
else
{
}
else
{
continue
;
lastKey
=
TSDBROW_TS
(
pRow
)
;
}
}
if
(
pBlockData
->
nRow
>=
pCommitter
->
maxRow
*
4
/
5
)
goto
_write_block
;
continue
;
_write_block:
_write_block:
tBlockDataReset
(
pBlockDataTo
);
if
(
!
toDataOnly
&&
pBlockData
->
nRow
<
pCommitter
->
minRow
)
{
// TODO
pBlock
->
last
=
1
;
}
else
{
pBlock
->
last
=
0
;
}
code
=
tsdbWriteBlockData
(
pCommitter
->
pWriter
,
pBlockData
,
NULL
,
NULL
,
pBlockIdx
,
pBlock
,
pCommitter
->
cmprAlg
);
if
(
code
)
goto
_err
;
code
=
tMapDataPutItem
(
&
pCommitter
->
nBlockMap
,
pBlock
,
tPutBlock
);
if
(
code
)
goto
_err
;
lastKey
=
TSKEY_MIN
;
tBlockReset
(
pBlock
);
tBlockDataReset
(
pBlockData
);
}
}
return
code
;
return
code
;
...
@@ -695,10 +745,15 @@ _err:
...
@@ -695,10 +745,15 @@ _err:
static
int32_t
tsdbCommitTableMemData
(
SCommitter
*
pCommitter
,
STbDataIter
*
pIter
,
TSDBKEY
toKey
,
int8_t
toDataOnly
)
{
static
int32_t
tsdbCommitTableMemData
(
SCommitter
*
pCommitter
,
STbDataIter
*
pIter
,
TSDBKEY
toKey
,
int8_t
toDataOnly
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
TSDBROW
*
pRow
;
TSDBROW
*
pRow
;
SBlock
*
pBlock
=
&
pCommitter
->
nBlock
;
SBlockData
*
pBlockData
=
&
pCommitter
->
nBlockData
;
SBlockData
*
pBlockData
=
&
pCommitter
->
nBlockData
;
TSKEY
lastKey
=
TSKEY_MIN
;
int64_t
suid
=
pIter
->
pTbData
->
suid
;
int64_t
uid
=
pIter
->
pTbData
->
uid
;
pRow
=
tsdbTbDataIterGet
(
pIter
);
tBlockReset
(
pBlock
);
tBlockDataReset
(
pBlockData
);
tBlockDataReset
(
pBlockData
);
pRow
=
tsdbTbDataIterGet
(
pIter
);
while
(
true
)
{
while
(
true
)
{
if
(
pRow
==
NULL
||
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow
),
&
toKey
)
>=
0
)
{
if
(
pRow
==
NULL
||
tsdbKeyCmprFn
(
&
TSDBROW_KEY
(
pRow
),
&
toKey
)
>=
0
)
{
if
(
pBlockData
->
nRow
>
0
)
{
if
(
pBlockData
->
nRow
>
0
)
{
...
@@ -708,24 +763,53 @@ static int32_t tsdbCommitTableMemData(SCommitter *pCommitter, STbDataIter *pIter
...
@@ -708,24 +763,53 @@ static int32_t tsdbCommitTableMemData(SCommitter *pCommitter, STbDataIter *pIter
}
}
}
}
// update schema
code
=
tsdbCommitterUpdateSchema
(
pCommitter
,
pIter
->
pTbData
->
suid
,
pIter
->
pTbData
->
uid
,
TSDBROW_SVERSION
(
pRow
));
code
=
tsdbCommitterUpdateSchema
(
pCommitter
,
pIter
->
pTbData
->
suid
,
pIter
->
pTbData
->
uid
,
TSDBROW_SVERSION
(
pRow
));
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
// append
code
=
tBlockDataAppendRow
(
pBlockData
,
pRow
,
pCommitter
->
pTSchema
);
code
=
tBlockDataAppendRow
(
pBlockData
,
pRow
,
pCommitter
->
pTSchema
);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
// update
pBlock
->
minVersion
=
TMIN
(
pBlock
->
minVersion
,
TSDBROW_VERSION
(
pRow
));
pBlock
->
maxVersion
=
TMIN
(
pBlock
->
maxVersion
,
TSDBROW_VERSION
(
pRow
));
pBlock
->
nRow
++
;
if
(
TSDBROW_TS
(
pRow
)
==
lastKey
)
{
pBlock
->
hasDup
=
1
;
}
else
{
lastKey
=
TSDBROW_TS
(
pRow
);
}
tsdbTbDataIterNext
(
pIter
);
tsdbTbDataIterNext
(
pIter
);
pRow
=
tsdbTbDataIterGet
(
pIter
);
pRow
=
tsdbTbDataIterGet
(
pIter
);
if
(
pBlockData
->
nRow
>=
pCommitter
->
maxRow
*
4
/
5
)
goto
_write_block
;
if
(
pBlockData
->
nRow
>=
pCommitter
->
maxRow
*
4
/
5
)
goto
_write_block
;
continue
;
_write_block:
_write_block:
if
(
!
toDataOnly
&&
pBlockData
->
nRow
<
pCommitter
->
minKey
)
{
pBlock
->
last
=
1
;
}
else
{
pBlock
->
last
=
0
;
}
code
=
tsdbWriteBlockData
(
pCommitter
->
pWriter
,
pBlockData
,
NULL
,
NULL
,
&
(
SBlockIdx
){.
suid
=
suid
,
.
uid
=
uid
},
pBlock
,
pCommitter
->
cmprAlg
);
if
(
code
)
goto
_err
;
code
=
tMapDataPutItem
(
&
pCommitter
->
nBlockMap
,
pBlock
,
tPutBlock
);
if
(
code
)
goto
_err
;
tBlockReset
(
pBlock
);
tBlockDataReset
(
pBlockData
);
tBlockDataReset
(
pBlockData
);
lastKey
=
TSKEY_MIN
;
}
}
return
code
;
return
code
;
_err:
_err:
tsdbError
(
"vgId:%d tsdb commit table mem data failed since %s"
,
TD_VID
(
pCommitter
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
return
code
;
return
code
;
}
}
...
@@ -762,119 +846,120 @@ _err:
...
@@ -762,119 +846,120 @@ _err:
}
}
static
int32_t
tsdbMergeMemDisk
(
SCommitter
*
pCommitter
,
STbData
*
pTbData
,
SBlockIdx
*
oBlockIdx
)
{
static
int32_t
tsdbMergeMemDisk
(
SCommitter
*
pCommitter
,
STbData
*
pTbData
,
SBlockIdx
*
oBlockIdx
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
STbDataIter
*
pIter
=
&
(
STbDataIter
){
0
};
// STbDataIter *pIter = &(STbDataIter){0};
TSDBROW
*
pRow
;
// TSDBROW *pRow;
// create iter
// // create iter
tsdbTbDataIterOpen
(
pTbData
,
&
(
TSDBKEY
){.
ts
=
pCommitter
->
minKey
,
.
version
=
VERSION_MIN
},
0
,
pIter
);
// tsdbTbDataIterOpen(pTbData, &(TSDBKEY){.ts = pCommitter->minKey, .version = VERSION_MIN}, 0, pIter);
pRow
==
tsdbTbDataIterGet
(
pIter
);
// pRow == tsdbTbDataIterGet(pIter);
if
(
pRow
==
NULL
||
TSDBROW_TS
(
pRow
)
>
pCommitter
->
maxKey
)
{
// if (pRow == NULL || TSDBROW_TS(pRow) > pCommitter->maxKey) {
code
=
tsdbCommitDiskData
(
pCommitter
,
oBlockIdx
);
// code = tsdbCommitDiskData(pCommitter, oBlockIdx);
if
(
code
)
{
// if (code) {
goto
_err
;
// goto _err;
}
else
{
// } else {
goto
_exit
;
// goto _exit;
}
// }
}
// }
// start ==================
// // start ==================
// read
// // read
code
=
tsdbReadBlock
(
pCommitter
->
pReader
,
oBlockIdx
,
&
pCommitter
->
oBlockMap
,
NULL
);
// code = tsdbReadBlock(pCommitter->pReader, oBlockIdx, &pCommitter->oBlockMap, NULL);
if
(
code
)
goto
_err
;
// if (code) goto _err;
// loop to merge
// // loop to merge
// SBlockData *pBlockData = &pCommitter->nBlockData;
// // SBlockData *pBlockData = &pCommitter->nBlockData;
int32_t
iBlock
=
0
;
// int32_t iBlock = 0;
int32_t
nBlock
=
pCommitter
->
oBlockMap
.
nItem
;
// int32_t nBlock = pCommitter->oBlockMap.nItem;
// SBlock *pBlockO = &pCommitter->oBlock;
// // SBlock *pBlockO = &pCommitter->oBlock;
SBlock
*
pBlock
;
// SBlock *pBlock;
int32_t
c
;
// int32_t c;
// merge ===================
// // merge ===================
while
(
true
)
{
// while (true) {
if
((
pRow
==
NULL
||
TSDBROW_TS
(
pRow
)
>
pCommitter
->
maxKey
)
&&
pBlock
==
NULL
)
break
;
// if ((pRow == NULL || TSDBROW_TS(pRow) > pCommitter->maxKey) && pBlock == NULL) break;
if
((
pRow
&&
TSDBROW_TS
(
pRow
)
<=
pCommitter
->
maxKey
)
&&
pBlock
)
{
// if ((pRow && TSDBROW_TS(pRow) <= pCommitter->maxKey) && pBlock) {
if
(
pBlock
->
last
)
{
// if (pBlock->last) {
// merge memory data and disk data to write to .data/.last (todo)
// // merge memory data and disk data to write to .data/.last (todo)
code
=
tsdbMergeTableData
(
pCommitter
,
pIter
,
oBlockIdx
,
pBlock
,
// code = tsdbMergeTableData(pCommitter, pIter, oBlockIdx, pBlock,
(
TSDBKEY
){.
ts
=
pCommitter
->
maxKey
+
1
,
.
version
=
VERSION_MIN
},
0
);
// (TSDBKEY){.ts = pCommitter->maxKey + 1, .version = VERSION_MIN}, 0);
if
(
code
)
goto
_err
;
// if (code) goto _err;
pRow
=
tsdbTbDataIterGet
(
pIter
);
// pRow = tsdbTbDataIterGet(pIter);
iBlock
++
;
// iBlock++;
}
else
{
// } else {
c
=
tBlockCmprFn
(
&
(
SBlock
){},
pBlock
);
// c = tBlockCmprFn(&(SBlock){}, pBlock);
if
(
c
<
0
)
{
// if (c < 0) {
// commit memory data until pBlock->minKey (not included) only to .data file (todo)
// // commit memory data until pBlock->minKey (not included) only to .data file (todo)
code
=
tsdbCommitTableMemData
(
pCommitter
,
pIter
,
pBlock
->
minKey
,
1
);
// code = tsdbCommitTableMemData(pCommitter, pIter, pBlock->minKey, 1);
if
(
code
)
goto
_err
;
// if (code) goto _err;
pRow
=
tsdbTbDataIterGet
(
pIter
);
// pRow = tsdbTbDataIterGet(pIter);
}
else
if
(
c
>
0
)
{
// } else if (c > 0) {
// just move the block (todo)
// // just move the block (todo)
// code = tsdbCommitTableDiskData(pCommitter, pBlock);
// // code = tsdbCommitTableDiskData(pCommitter, pBlock);
if
(
code
)
goto
_err
;
// if (code) goto _err;
iBlock
++
;
// iBlock++;
// TODO
// // TODO
}
else
{
// } else {
int64_t
nOvlp
=
0
;
// = tsdbOvlpRows();
// int64_t nOvlp = 0; // = tsdbOvlpRows();
if
(
nOvlp
+
pBlock
->
nRow
<=
pCommitter
->
maxRow
)
{
// if (nOvlp + pBlock->nRow <= pCommitter->maxRow) {
// add as a subblock
// // add as a subblock
}
else
{
// } else {
if
(
iBlock
==
nBlock
-
1
)
{
// if (iBlock == nBlock - 1) {
// merge memory data and disk data to .data/.last file
// // merge memory data and disk data to .data/.last file
code
=
tsdbMergeTableData
(
pCommitter
,
pIter
,
oBlockIdx
,
pBlock
,
// code = tsdbMergeTableData(pCommitter, pIter, oBlockIdx, pBlock,
(
TSDBKEY
){.
ts
=
pCommitter
->
maxKey
+
1
,
.
version
=
VERSION_MIN
},
0
);
// (TSDBKEY){.ts = pCommitter->maxKey + 1, .version = VERSION_MIN}, 0);
if
(
code
)
goto
_err
;
// if (code) goto _err;
}
else
{
// } else {
// merge memory data and disk data to .data file only until pBlock[1].
// // merge memory data and disk data to .data file only until pBlock[1].
code
=
tsdbMergeTableData
(
pCommitter
,
pIter
,
oBlockIdx
,
pBlock
,
(
TSDBKEY
){
0
}
/*TODO*/
,
1
);
// code = tsdbMergeTableData(pCommitter, pIter, oBlockIdx, pBlock, (TSDBKEY){0} /*TODO*/, 1);
}
// }
}
// }
pRow
=
tsdbTbDataIterGet
(
pIter
);
// pRow = tsdbTbDataIterGet(pIter);
iBlock
++
;
// iBlock++;
}
// }
}
// }
}
else
if
(
pBlock
)
{
// } else if (pBlock) {
// code = tsdbCommitTableDiskData(pCommitter, pBlock);
// // code = tsdbCommitTableDiskData(pCommitter, pBlock);
if
(
code
)
goto
_err
;
// if (code) goto _err;
iBlock
++
;
// iBlock++;
// next block
// // next block
}
else
{
// } else {
// commit only memory data until (pCommitter->maxKey, VERSION_MAX)
// // commit only memory data until (pCommitter->maxKey, VERSION_MAX)
code
=
// code =
tsdbCommitTableMemData
(
pCommitter
,
pIter
,
(
TSDBKEY
){.
ts
=
pCommitter
->
maxKey
+
1
,
.
version
=
VERSION_MIN
},
0
);
// tsdbCommitTableMemData(pCommitter, pIter, (TSDBKEY){.ts = pCommitter->maxKey + 1, .version =
if
(
code
)
goto
_err
;
// VERSION_MIN}, 0);
// if (code) goto _err;
pRow
=
tsdbTbDataIterGet
(
pIter
);
}
// pRow = tsdbTbDataIterGet(pIter);
}
// }
// }
// end =====================
// SBlock
// // end =====================
// code = tsdbWriteBlock(pCommitter->pWriter, &pCommitter->nBlockMap, NULL, pBlockIdx);
// // SBlock
// if (code) goto _err;
// // code = tsdbWriteBlock(pCommitter->pWriter, &pCommitter->nBlockMap, NULL, pBlockIdx);
// // if (code) goto _err;
// // SBlockIdx
// code = tMapDataPutItem(&pCommitter->nBlockIdxMap, pBlockIdx, tPutBlockIdx);
// // // SBlockIdx
// if (code) goto _err;
// // code = tMapDataPutItem(&pCommitter->nBlockIdxMap, pBlockIdx, tPutBlockIdx);
// // if (code) goto _err;
_exit:
pRow
=
tsdbTbDataIterGet
(
pIter
);
// _exit:
if
(
pRow
)
{
// pRow = tsdbTbDataIterGet(pIter);
pCommitter
->
nextKey
=
TMIN
(
pCommitter
->
nextKey
,
TSDBROW_TS
(
pRow
));
// if (pRow) {
}
// pCommitter->nextKey = TMIN(pCommitter->nextKey, TSDBROW_TS(pRow));
// }
return
code
;
return
code
;
_err:
//
_err:
tsdbError
(
"vgId:%d tsdb merge mem disk data failed since %s"
,
TD_VID
(
pCommitter
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
// tsdbError("vgId:%d tsdb merge mem disk data failed since %s", TD_VID(pCommitter->pTsdb->pVnode),
return
code
;
// tstrerror(code));
return code;
}
}
static
int32_t
tsdbCommitTableDataEnd
(
SCommitter
*
pCommitter
,
int64_t
suid
,
int64_t
uid
)
{
static
int32_t
tsdbCommitTableDataEnd
(
SCommitter
*
pCommitter
,
int64_t
suid
,
int64_t
uid
)
{
...
@@ -930,7 +1015,6 @@ static int32_t tsdbCommitTableData(SCommitter *pCommitter, STbData *pTbData, SBl
...
@@ -930,7 +1015,6 @@ static int32_t tsdbCommitTableData(SCommitter *pCommitter, STbData *pTbData, SBl
// start ===========
// start ===========
tMapDataReset
(
&
pCommitter
->
nBlockMap
);
tMapDataReset
(
&
pCommitter
->
nBlockMap
);
SBlock
*
pBlock
=
&
pCommitter
->
oBlock
;
SBlock
*
pBlock
=
&
pCommitter
->
oBlock
;
int32_t
c
;
if
(
iBlock
<
nBlock
)
{
if
(
iBlock
<
nBlock
)
{
tMapDataGetItemByIdx
(
&
pCommitter
->
oBlockMap
,
iBlock
,
pBlock
,
tGetBlock
);
tMapDataGetItemByIdx
(
&
pCommitter
->
oBlockMap
,
iBlock
,
pBlock
,
tGetBlock
);
...
@@ -944,19 +1028,18 @@ static int32_t tsdbCommitTableData(SCommitter *pCommitter, STbData *pTbData, SBl
...
@@ -944,19 +1028,18 @@ static int32_t tsdbCommitTableData(SCommitter *pCommitter, STbData *pTbData, SBl
if
(
pRow
&&
TSDBROW_TS
(
pRow
)
<=
pCommitter
->
maxKey
&&
pBlock
)
{
if
(
pRow
&&
TSDBROW_TS
(
pRow
)
<=
pCommitter
->
maxKey
&&
pBlock
)
{
if
(
pBlock
->
last
)
{
if
(
pBlock
->
last
)
{
code
=
tsdbMergeTableData
(
pCommitter
,
pIter
,
pBlock
Idx
,
pBlock
,
code
=
tsdbMergeTableData
(
pCommitter
,
pIter
,
pBlock
,
(
TSDBKEY
){.
ts
=
pCommitter
->
maxKey
+
1
,
.
version
=
VERSION_MIN
},
0
);
(
TSDBKEY
){.
ts
=
pCommitter
->
maxKey
+
1
,
.
version
=
VERSION_MIN
},
0
);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
pRow
=
tsdbTbDataIterGet
(
pIter
);
pRow
=
tsdbTbDataIterGet
(
pIter
);
iBlock
++
;
iBlock
++
;
}
else
{
}
else
{
c
=
tBlockCmprFn
(
&
(
SBlock
){
},
pBlock
);
int32_t
c
=
tBlockCmprFn
(
&
(
SBlock
){.
maxKey
=
TSDBROW_KEY
(
pRow
),
.
minKey
=
TSDBROW_KEY
(
pRow
)
},
pBlock
);
if
(
c
>
0
)
{
if
(
c
>
0
)
{
code
=
tsdbCommitTableDiskData
(
pCommitter
,
pBlock
,
pBlockIdx
);
code
=
tsdbCommitTableDiskData
(
pCommitter
,
pBlock
,
pBlockIdx
);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
iBlock
++
;
iBlock
++
;
iBlock
++
;
if
(
iBlock
<
nBlock
)
{
if
(
iBlock
<
nBlock
)
{
tMapDataGetItemByIdx
(
&
pCommitter
->
oBlockMap
,
iBlock
,
pBlock
,
tGetBlock
);
tMapDataGetItemByIdx
(
&
pCommitter
->
oBlockMap
,
iBlock
,
pBlock
,
tGetBlock
);
...
@@ -974,12 +1057,12 @@ static int32_t tsdbCommitTableData(SCommitter *pCommitter, STbData *pTbData, SBl
...
@@ -974,12 +1057,12 @@ static int32_t tsdbCommitTableData(SCommitter *pCommitter, STbData *pTbData, SBl
// add as a subblock
// add as a subblock
}
else
{
}
else
{
if
(
iBlock
==
nBlock
-
1
)
{
if
(
iBlock
==
nBlock
-
1
)
{
code
=
tsdbMergeTableData
(
pCommitter
,
pIter
,
pBlock
Idx
,
pBlock
,
code
=
tsdbMergeTableData
(
pCommitter
,
pIter
,
pBlock
,
(
TSDBKEY
){.
ts
=
pCommitter
->
maxKey
+
1
,
.
version
=
VERSION_MIN
},
0
);
(
TSDBKEY
){.
ts
=
pCommitter
->
maxKey
+
1
,
.
version
=
VERSION_MIN
},
0
);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
}
else
{
}
else
{
// code = tsdbMergeTableData(pCommitter, pIter, pBlock
Idx, pBlock
, pBlock[1].minKey, 1);
// code = tsdbMergeTableData(pCommitter, pIter, pBlock, pBlock[1].minKey, 1);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
}
}
}
}
...
...
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
浏览文件 @
44c47330
...
@@ -1193,6 +1193,9 @@ int32_t tsdbWriteBlockData(SDataFWriter *pWriter, SBlockData *pBlockData, uint8_
...
@@ -1193,6 +1193,9 @@ int32_t tsdbWriteBlockData(SDataFWriter *pWriter, SBlockData *pBlockData, uint8_
if
(
!
ppBuf1
)
ppBuf1
=
&
pBuf1
;
if
(
!
ppBuf1
)
ppBuf1
=
&
pBuf1
;
if
(
!
ppBuf2
)
ppBuf2
=
&
pBuf2
;
if
(
!
ppBuf2
)
ppBuf2
=
&
pBuf2
;
pBlock
->
minKey
=
MIN_TSDBKEY
(
pBlock
->
minKey
,
tBlockDataFirstKey
(
pBlockData
));
pBlock
->
maxKey
=
MAX_TSDBKEY
(
pBlock
->
maxKey
,
tBlockDataLastKey
(
pBlockData
));
pSubBlock
->
nRow
=
pBlockData
->
nRow
;
pSubBlock
->
nRow
=
pBlockData
->
nRow
;
pSubBlock
->
cmprAlg
=
cmprAlg
;
pSubBlock
->
cmprAlg
=
cmprAlg
;
if
(
pBlock
->
last
)
{
if
(
pBlock
->
last
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录