Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ed69d8ee
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看板
提交
ed69d8ee
编写于
6月 29, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more work
上级
2a6be2bc
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
115 addition
and
106 deletion
+115
-106
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
+115
-106
未找到文件。
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
浏览文件 @
ed69d8ee
...
...
@@ -738,98 +738,135 @@ _err:
return
code
;
}
int32_t
tsdbReadColData
(
SDataFReader
*
pReader
,
SBlockIdx
*
pBlockIdx
,
SBlock
*
pBlock
,
int16_t
*
aColId
,
int32_t
nCol
,
SBlockData
*
pBlockData
,
uint8_t
**
ppBuf1
,
uint8_t
**
ppBuf2
)
{
int32_t
code
=
0
;
TdFilePtr
pFD
=
pBlock
->
last
?
pReader
->
pLastFD
:
pReader
->
pDataFD
;
uint8_t
*
pBuf1
=
NULL
;
uint8_t
*
pBuf2
=
NULL
;
ASSERT
(
nCol
==
0
||
aColId
[
0
]
!=
PRIMARYKEY_TIMESTAMP_COL_ID
);
static
int32_t
tsdbReadColDataImpl
(
SDataFReader
*
pReader
,
SBlockIdx
*
pBlockIdx
,
SBlock
*
pBlock
,
int32_t
iSubBlock
,
int16_t
*
aColId
,
int32_t
nCol
,
SBlockData
*
pBlockData
,
uint8_t
**
ppBuf1
,
uint8_t
**
ppBuf2
)
{
TdFilePtr
pFD
=
pBlock
->
last
?
pReader
->
pLastFD
:
pReader
->
pDataFD
;
SSubBlock
*
pSubBlock
=
&
pBlock
->
aSubBlock
[
iSubBlock
];
int32_t
code
=
0
;
int64_t
offset
;
int64_t
size
;
int64_t
n
;
if
(
!
ppBuf1
)
ppBuf1
=
&
pBuf1
;
if
(
!
ppBuf2
)
ppBuf2
=
&
pBuf2
;
tBlockDataReset
(
pBlockData
)
;
pBlockData
->
nRow
=
pSubBlock
->
nRow
;
for
(
int32_t
iSubBlock
=
0
;
iSubBlock
<
pBlock
->
nSubBlock
;
iSubBlock
++
)
{
SSubBlock
*
pSubBlock
=
&
pBlock
->
aSubBlock
[
iSubBlock
]
;
int64_t
offset
;
int64_t
size
;
int64_t
n
;
// TSDBKEY
offset
=
pSubBlock
->
offset
+
sizeof
(
SBlockDataHdr
)
;
size
=
pSubBlock
->
vsize
+
pSubBlock
->
ksize
+
sizeof
(
TSCKSUM
)
;
code
=
tsdbRealloc
(
ppBuf1
,
size
)
;
if
(
code
)
goto
_err
;
tBlockDataReset
(
pBlockData
);
pBlockData
->
nRow
=
pSubBlock
->
nRow
;
n
=
taosLSeekFile
(
pFD
,
offset
,
SEEK_SET
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
// TSDBKEY
offset
=
pSubBlock
->
offset
+
sizeof
(
SBlockDataHdr
);
size
=
pSubBlock
->
vsize
+
pSubBlock
->
ksize
+
sizeof
(
TSCKSUM
);
code
=
tsdbRealloc
(
ppBuf1
,
size
);
if
(
code
)
goto
_err
;
n
=
taosReadFile
(
pFD
,
*
ppBuf1
,
size
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
else
if
(
n
<
size
)
{
code
=
TSDB_CODE_FILE_CORRUPTED
;
goto
_err
;
}
n
=
taosLSeekFile
(
pFD
,
offset
,
SEEK_SET
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
code
=
tsdbRecoverBlockDataKey
(
pBlockData
,
pSubBlock
,
*
ppBuf1
,
ppBuf2
);
if
(
code
)
goto
_err
;
n
=
taosReadFile
(
pFD
,
*
ppBuf1
,
size
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
else
if
(
n
<
size
)
{
code
=
TSDB_CODE_FILE_CORRUPTED
;
goto
_err
;
}
// OTHER
SBlockCol
blockCol
;
SBlockCol
*
pBlockCol
=
&
blockCol
;
SColData
*
pColData
;
for
(
int32_t
iCol
=
0
;
iCol
<
nCol
;
iCol
++
)
{
int16_t
cid
=
aColId
[
iCol
];
code
=
tsdbRecoverBlockDataKey
(
pBlockData
,
pSubBlock
,
*
ppBuf1
,
ppBuf2
);
if
(
code
)
goto
_err
;
if
(
tMapDataSearch
(
&
pSubBlock
->
mBlockCol
,
&
(
SBlockCol
){.
cid
=
cid
},
tGetBlockCol
,
tBlockColCmprFn
,
pBlockCol
)
==
0
)
{
code
=
tBlockDataAddColData
(
pBlockData
,
taosArrayGetSize
(
pBlockData
->
aColDataP
),
&
pColData
);
if
(
code
)
goto
_err
;
// OTHER
SBlockCol
blockCol
;
SBlockCol
*
pBlockCol
=
&
blockCol
;
SColData
*
pColData
;
for
(
int32_t
iCol
=
0
;
iCol
<
nCol
;
iCol
++
)
{
int16_t
cid
=
aColId
[
iCol
];
tColDataReset
(
pColData
,
pBlockCol
->
cid
,
pBlockCol
->
type
);
if
(
pBlockCol
->
flag
==
HAS_NULL
)
{
for
(
int32_t
iRow
=
0
;
iRow
<
pSubBlock
->
nRow
;
iRow
++
)
{
code
=
tColDataAppendValue
(
pColData
,
&
COL_VAL_NULL
(
pBlockCol
->
cid
,
pBlockCol
->
type
));
if
(
code
)
goto
_err
;
}
}
else
{
offset
=
pSubBlock
->
offset
+
sizeof
(
SBlockDataHdr
)
+
pSubBlock
->
vsize
+
pSubBlock
->
ksize
+
pBlockCol
->
offset
;
size
=
pBlockCol
->
bsize
+
pBlockCol
->
csize
+
sizeof
(
TSCKSUM
);
if
(
tMapDataSearch
(
&
pSubBlock
->
mBlockCol
,
&
(
SBlockCol
){.
cid
=
cid
},
tGetBlockCol
,
tBlockColCmprFn
,
pBlockCol
)
==
0
)
{
code
=
tBlockDataAddColData
(
pBlockData
,
taosArrayGetSize
(
pBlockData
->
aColDataP
),
&
pColData
);
code
=
tsdbRealloc
(
ppBuf1
,
size
);
if
(
code
)
goto
_err
;
tColDataReset
(
pColData
,
pBlockCol
->
cid
,
pBlockCol
->
type
);
if
(
pBlockCol
->
flag
==
HAS_NULL
)
{
for
(
int32_t
iRow
=
0
;
iRow
<
pSubBlock
->
nRow
;
iRow
++
)
{
code
=
tColDataAppendValue
(
pColData
,
&
COL_VAL_NULL
(
pBlockCol
->
cid
,
pBlockCol
->
type
));
if
(
code
)
goto
_err
;
}
}
else
{
offset
=
pSubBlock
->
offset
+
sizeof
(
SBlockDataHdr
)
+
pSubBlock
->
vsize
+
pSubBlock
->
ksize
+
pBlockCol
->
offset
;
size
=
pBlockCol
->
bsize
+
pBlockCol
->
csize
+
sizeof
(
TSCKSUM
);
code
=
tsdbRealloc
(
ppBuf1
,
size
);
if
(
code
)
goto
_err
;
// seek
n
=
taosLSeekFile
(
pFD
,
offset
,
SEEK_SET
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
// seek
n
=
taosLSeekFile
(
pFD
,
offset
,
SEEK_SET
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
// read
n
=
taosReadFile
(
pFD
,
*
ppBuf1
,
size
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
else
if
(
n
<
size
)
{
code
=
TSDB_CODE_FILE_CORRUPTED
;
goto
_err
;
}
code
=
tsdbRecoverColData
(
pBlockData
,
pSubBlock
,
pBlockCol
,
pColData
,
*
ppBuf1
,
ppBuf2
);
if
(
code
)
goto
_err
;
// read
n
=
taosReadFile
(
pFD
,
*
ppBuf1
,
size
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
else
if
(
n
<
size
)
{
code
=
TSDB_CODE_FILE_CORRUPTED
;
goto
_err
;
}
code
=
tsdbRecoverColData
(
pBlockData
,
pSubBlock
,
pBlockCol
,
pColData
,
*
ppBuf1
,
ppBuf2
);
if
(
code
)
goto
_err
;
}
}
}
return
code
;
_err:
return
code
;
}
int32_t
tsdbReadColData
(
SDataFReader
*
pReader
,
SBlockIdx
*
pBlockIdx
,
SBlock
*
pBlock
,
int16_t
*
aColId
,
int32_t
nCol
,
SBlockData
*
pBlockData
,
uint8_t
**
ppBuf1
,
uint8_t
**
ppBuf2
)
{
int32_t
code
=
0
;
uint8_t
*
pBuf1
=
NULL
;
uint8_t
*
pBuf2
=
NULL
;
ASSERT
(
nCol
==
0
||
aColId
[
0
]
!=
PRIMARYKEY_TIMESTAMP_COL_ID
);
if
(
!
ppBuf1
)
ppBuf1
=
&
pBuf1
;
if
(
!
ppBuf2
)
ppBuf2
=
&
pBuf2
;
code
=
tsdbReadColDataImpl
(
pReader
,
pBlockIdx
,
pBlock
,
0
,
aColId
,
nCol
,
pBlockData
,
ppBuf1
,
ppBuf2
);
if
(
code
)
goto
_err
;
if
(
pBlock
->
nSubBlock
>
1
)
{
SBlockData
*
pBlockData1
=
&
(
SBlockData
){
0
};
SBlockData
*
pBlockData2
=
&
(
SBlockData
){
0
};
for
(
int32_t
iSubBlock
=
1
;
iSubBlock
<
pBlock
->
nSubBlock
;
iSubBlock
++
)
{
code
=
tsdbReadColDataImpl
(
pReader
,
pBlockIdx
,
pBlock
,
iSubBlock
,
aColId
,
nCol
,
pBlockData1
,
ppBuf1
,
ppBuf2
);
if
(
code
)
goto
_err
;
code
=
tBlockDataCopy
(
pBlockData
,
pBlockData2
);
if
(
code
)
{
tBlockDataClear
(
pBlockData1
);
tBlockDataClear
(
pBlockData2
);
goto
_err
;
}
code
=
tBlockDataMerge
(
pBlockData1
,
pBlockData2
,
pBlockData
);
if
(
code
)
{
tBlockDataClear
(
pBlockData1
);
tBlockDataClear
(
pBlockData2
);
goto
_err
;
}
}
tBlockDataClear
(
pBlockData1
);
tBlockDataClear
(
pBlockData2
);
}
tsdbFree
(
pBuf1
);
...
...
@@ -876,34 +913,6 @@ static int32_t tsdbReadSubBlockData(SDataFReader *pReader, SBlockIdx *pBlockIdx,
goto
_err
;
}
// // check
// p = *ppBuf1;
// SBlockDataHdr *pHdr = (SBlockDataHdr *)p;
// ASSERT(pHdr->delimiter == TSDB_FILE_DLMT);
// ASSERT(pHdr->suid == pBlockIdx->suid);
// ASSERT(pHdr->uid == pBlockIdx->uid);
// p += sizeof(*pHdr);
// if (!taosCheckChecksumWhole(p, pSubBlock->vsize + pSubBlock->ksize + sizeof(TSCKSUM))) {
// code = TSDB_CODE_FILE_CORRUPTED;
// goto _err;
// }
// p += (pSubBlock->vsize + pSubBlock->ksize + sizeof(TSCKSUM));
// for (int32_t iBlockCol = 0; iBlockCol < pSubBlock->mBlockCol.nItem; iBlockCol++) {
// tMapDataGetItemByIdx(&pSubBlock->mBlockCol, iBlockCol, pBlockCol, tGetBlockCol);
// ASSERT(pBlockCol->flag && pBlockCol->flag != HAS_NONE);
// if (pBlockCol->flag == HAS_NULL) continue;
// if (!taosCheckChecksumWhole(p, pBlockCol->bsize + pBlockCol->csize + sizeof(TSCKSUM))) {
// code = TSDB_CODE_FILE_CORRUPTED;
// goto _err;
// }
// p = p + pBlockCol->bsize + pBlockCol->csize + sizeof(TSCKSUM);
// }
// recover
pBlockData
->
nRow
=
pSubBlock
->
nRow
;
p
=
*
ppBuf1
+
sizeof
(
SBlockDataHdr
);
...
...
@@ -964,7 +973,7 @@ int32_t tsdbReadBlockData(SDataFReader *pReader, SBlockIdx *pBlockIdx, SBlock *p
SBlockData
*
pBlockData2
=
&
(
SBlockData
){
0
};
for
(
iSubBlock
=
1
;
iSubBlock
<
pBlock
->
nSubBlock
;
iSubBlock
++
)
{
code
=
tsdbReadSubBlockData
(
pReader
,
pBlockIdx
,
pBlock
,
iSubBlock
,
pBlockData
,
ppBuf1
,
ppBuf2
);
code
=
tsdbReadSubBlockData
(
pReader
,
pBlockIdx
,
pBlock
,
iSubBlock
,
pBlockData
1
,
ppBuf1
,
ppBuf2
);
if
(
code
)
{
tBlockDataClear
(
pBlockData1
);
tBlockDataClear
(
pBlockData2
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录