Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b5545598
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
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看板
提交
b5545598
编写于
7月 14, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more vnode snapshot
上级
58237131
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
118 addition
and
0 deletion
+118
-0
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
+118
-0
未找到文件。
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
浏览文件 @
b5545598
...
...
@@ -489,9 +489,66 @@ _err:
return
code
;
}
static
int32_t
tsdbSnapWriteTableDataAhead
(
STsdbSnapWriter
*
pWriter
,
TABLEID
id
)
{
int32_t
code
=
0
;
if
(
pWriter
->
pDataFReader
==
NULL
)
goto
_exit
;
while
(
true
)
{
if
(
pWriter
->
iBlockIdx
>=
taosArrayGetSize
(
pWriter
->
aBlockIdx
))
break
;
SBlockIdx
*
pBlockIdx
=
(
SBlockIdx
*
)
taosArrayGet
(
pWriter
->
aBlockIdx
,
pWriter
->
iBlockIdx
);
int32_t
c
=
tTABLEIDCmprFn
(
pBlockIdx
,
&
id
);
if
(
c
>=
0
)
break
;
pWriter
->
iBlockIdx
++
;
code
=
tsdbReadBlock
(
pWriter
->
pDataFReader
,
pBlockIdx
,
&
pWriter
->
mBlock
,
NULL
);
if
(
code
)
goto
_err
;
SBlock
block
;
tMapDataReset
(
&
pWriter
->
mBlockW
);
for
(
int32_t
iBlock
=
0
;
iBlock
<
pWriter
->
mBlock
.
nItem
;
iBlock
++
)
{
tMapDataGetItemByIdx
(
&
pWriter
->
mBlock
,
iBlock
,
&
block
,
tGetBlock
);
if
(
block
.
last
)
{
code
=
tsdbReadBlockData
(
pWriter
->
pDataFReader
,
pBlockIdx
,
&
block
,
&
pWriter
->
bDataR
,
NULL
,
NULL
);
if
(
code
)
goto
_err
;
tBlockReset
(
&
block
);
block
.
last
=
1
;
code
=
tsdbWriteBlockData
(
pWriter
->
pDataFWriter
,
&
pWriter
->
bDataR
,
NULL
,
NULL
,
pBlockIdx
,
&
block
,
pWriter
->
cmprAlg
);
if
(
code
)
goto
_err
;
}
code
=
tMapDataPutItem
(
&
pWriter
->
mBlockW
,
&
block
,
tPutBlock
);
if
(
code
)
goto
_err
;
}
SBlockIdx
blockIdx
=
{.
suid
=
pBlockIdx
->
suid
,
.
uid
=
pBlockIdx
->
uid
};
code
=
tsdbWriteBlock
(
pWriter
->
pDataFWriter
,
&
pWriter
->
mBlockW
,
NULL
,
&
blockIdx
);
if
(
code
)
goto
_err
;
if
(
taosArrayPush
(
pWriter
->
aBlockIdxW
,
&
blockIdx
)
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
}
}
_exit:
return
code
;
_err:
return
code
;
}
static
int32_t
tsdbSnapWriteDataImpl
(
STsdbSnapWriter
*
pWriter
,
TABLEID
id
)
{
int32_t
code
=
0
;
SBlockData
*
pBlockData
=
&
pWriter
->
bData
;
TSDBKEY
keyFirst
=
tBlockDataFirstKey
(
pBlockData
);
TSDBKEY
keyLast
=
tBlockDataLastKey
(
pBlockData
);
if
(
pWriter
->
pDataFReader
==
NULL
)
{
// no old data
...
...
@@ -551,6 +608,67 @@ static int32_t tsdbSnapWriteDataImpl(STsdbSnapWriter* pWriter, TABLEID id) {
}
}
}
else
{
// has old data
// TABLE ==================================================
// end last table data if id not same (todo)
if
(
pWriter
->
pBlockIdxW
)
{
int32_t
c
=
tTABLEIDCmprFn
(
pWriter
->
pBlockIdxW
,
&
id
);
if
(
c
<
0
)
{
}
else
if
(
c
>
0
)
{
ASSERT
(
0
);
}
}
// start new table data if need (todo)
if
(
pWriter
->
pBlockIdxW
==
NULL
)
{
// commit table data ahead
code
=
tsdbSnapWriteTableDataAhead
(
pWriter
,
id
);
if
(
code
)
goto
_err
;
// reader
if
(
pWriter
->
iBlockIdx
<
taosArrayGetSize
(
pWriter
->
aBlockIdx
))
{
pWriter
->
pBlockIdx
=
(
SBlockIdx
*
)
taosArrayGet
(
pWriter
->
aBlockIdx
,
pWriter
->
iBlockIdx
);
int32_t
c
=
tTABLEIDCmprFn
(
pWriter
->
pBlockIdx
,
&
id
);
if
(
c
)
{
pWriter
->
pBlockIdx
=
NULL
;
}
}
else
{
pWriter
->
pBlockIdx
=
NULL
;
}
if
(
pWriter
->
pBlockIdx
)
{
code
=
tsdbReadBlock
(
pWriter
->
pDataFReader
,
pWriter
->
pBlockIdx
,
&
pWriter
->
mBlockW
,
NULL
);
if
(
code
)
goto
_err
;
pWriter
->
iBlock
=
0
;
}
// writer
pWriter
->
pBlockIdxW
=
&
pWriter
->
blockIdxW
;
pWriter
->
pBlockIdxW
->
suid
=
id
.
suid
;
pWriter
->
pBlockIdxW
->
uid
=
id
.
uid
;
tBlockReset
(
&
pWriter
->
blockW
);
tBlockDataReset
(
&
pWriter
->
bDataW
);
tMapDataReset
(
&
pWriter
->
mBlockW
);
}
// BLOCK ==================================================
// write block ahead
while
(
true
)
{
if
(
pWriter
->
iBlock
>=
pWriter
->
mBlock
.
nItem
)
break
;
SBlock
block
;
tMapDataGetItemByIdx
(
&
pWriter
->
mBlock
,
pWriter
->
iBlock
,
&
block
,
tGetBlock
);
if
(
tsdbKeyCmprFn
(
&
block
.
maxKey
,
&
keyFirst
)
>=
0
)
break
;
pWriter
->
iBlock
++
;
code
=
tMapDataPutItem
(
&
pWriter
->
mBlockW
,
&
block
,
tPutBlock
);
if
(
code
)
goto
_err
;
}
}
return
code
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录