Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d5f38ac9
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
d5f38ac9
编写于
8月 14, 2021
作者:
C
Cary Xu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
do further check for blk with len 0 and SKVRow
上级
9c73bb0d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
32 addition
and
5 deletion
+32
-5
src/wal/src/walWrite.c
src/wal/src/walWrite.c
+32
-5
未找到文件。
src/wal/src/walWrite.c
浏览文件 @
d5f38ac9
...
...
@@ -309,36 +309,63 @@ static int32_t walSkipCorruptedRecord(SWal *pWal, SWalHead *pHead, int64_t tfd,
}
// Add SMemRowType ahead of SDataRow
static
void
expandSubmitBlk
(
SSubmitBlk
*
pDest
,
SSubmitBlk
*
pSrc
,
int32_t
*
lenExpand
)
{
// copy the header firstly
memcpy
(
pDest
,
pSrc
,
sizeof
(
SSubmitBlk
));
int
nRows
=
htons
(
pSrc
->
numOfRows
);
if
(
nRows
<=
0
)
{
int32_t
nRows
=
htons
(
pDest
->
numOfRows
);
int32_t
dataLen
=
htonl
(
pDest
->
dataLen
);
if
((
nRows
<=
0
)
||
(
dataLen
<=
0
))
{
return
;
}
char
*
pDestData
=
pDest
->
data
;
char
*
pSrcData
=
pSrc
->
data
;
for
(
int
i
=
0
;
i
<
nRows
;
++
i
)
{
for
(
int
32_t
i
=
0
;
i
<
nRows
;
++
i
)
{
memRowSetType
(
pDestData
,
SMEM_ROW_DATA
);
memcpy
(
memRowDataBody
(
pDestData
),
pSrcData
,
dataRowLen
(
pSrcData
));
pDestData
=
POINTER_SHIFT
(
pDestData
,
memRowTLen
(
pDestData
));
pSrcData
=
POINTER_SHIFT
(
pSrcData
,
dataRowLen
(
pSrcData
));
++
(
*
lenExpand
);
}
int32_t
dataLen
=
htonl
(
pDest
->
dataLen
);
pDest
->
dataLen
=
htonl
(
dataLen
+
nRows
*
sizeof
(
uint8_t
));
}
// Check SDataRow by comparing the SDataRow len and SSubmitBlk dataLen
static
bool
walIsSDataRow
(
void
*
pBlkData
,
int
nRows
,
int32_t
dataLen
)
{
int32_t
len
=
0
;
if
((
nRows
<=
0
)
||
(
dataLen
<=
0
))
{
return
true
;
}
int32_t
len
=
0
,
kvLen
=
0
;
for
(
int
i
=
0
;
i
<
nRows
;
++
i
)
{
len
+=
dataRowLen
(
pBlkData
);
if
(
len
>
dataLen
)
{
return
false
;
}
/**
* For SDataRow between version [2.1.5.0 and 2.1.6.X], it would never conflict.
* For SKVRow between version [2.1.5.0 and 2.1.6.X], it may conflict in below scenario
* - with 1st type byte 0x01 and sversion 0x0101(257), thus do further check
*/
if
(
dataRowLen
(
pBlkData
)
==
257
)
{
SMemRow
memRow
=
pBlkData
;
SKVRow
kvRow
=
memRowKvBody
(
memRow
);
int
nCols
=
kvRowNCols
(
kvRow
);
uint16_t
calcTsOffset
=
(
uint16_t
)(
TD_MEM_ROW_KV_HEAD_SIZE
+
sizeof
(
SColIdx
)
*
nCols
);
uint16_t
realTsOffset
=
(
kvRowColIdx
(
kvRow
))
->
offset
;
if
(
calcTsOffset
==
realTsOffset
)
{
kvLen
+=
memRowKvTLen
(
memRow
);
}
}
pBlkData
=
POINTER_SHIFT
(
pBlkData
,
dataRowLen
(
pBlkData
));
}
if
(
len
!=
dataLen
)
{
return
false
;
}
if
(
kvLen
==
dataLen
)
{
return
false
;
}
return
true
;
}
// for WAL SMemRow/SDataRow compatibility
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录