Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ace193ca
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ace193ca
编写于
4月 29, 2023
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(stream): set the seek version if the reader's version is earlier than the first version in wal.
上级
777ed176
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
21 addition
and
7 deletion
+21
-7
include/libs/wal/wal.h
include/libs/wal/wal.h
+3
-0
source/dnode/vnode/src/tq/tqRestore.c
source/dnode/vnode/src/tq/tqRestore.c
+17
-7
source/libs/wal/src/walRead.c
source/libs/wal/src/walRead.c
+1
-0
未找到文件。
include/libs/wal/wal.h
浏览文件 @
ace193ca
...
...
@@ -138,6 +138,8 @@ typedef struct {
int8_t
enableRef
;
}
SWalFilterCond
;
typedef
struct
SWalReader
SWalReader
;
// todo hide this struct
typedef
struct
SWalReader
{
SWal
*
pWal
;
...
...
@@ -198,6 +200,7 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver);
int32_t
walReadSeekVer
(
SWalReader
*
pRead
,
int64_t
ver
);
int32_t
walNextValidMsg
(
SWalReader
*
pRead
);
int64_t
walReaderGetCurrentVer
(
const
SWalReader
*
pReader
);
int64_t
walReaderGetValidFirstVer
(
const
SWalReader
*
pReader
);
// only for tq usage
void
walSetReaderCapacity
(
SWalReader
*
pRead
,
int32_t
capacity
);
...
...
source/dnode/vnode/src/tq/tqRestore.c
浏览文件 @
ace193ca
...
...
@@ -121,17 +121,27 @@ int32_t createStreamRunReq(SStreamMeta* pStreamMeta, bool* pScanIdle) {
*
pScanIdle
=
false
;
// seek the stored version and extract data from WAL
int32_t
code
=
walReadSeekVer
(
pTask
->
exec
.
pWalReader
,
pTask
->
chkInfo
.
currentVer
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
// no data in wal, quit
streamMetaReleaseTask
(
pStreamMeta
,
pTask
);
continue
;
int64_t
firstVer
=
walReaderGetValidFirstVer
(
pTask
->
exec
.
pWalReader
);
if
(
pTask
->
chkInfo
.
currentVer
<
firstVer
)
{
pTask
->
chkInfo
.
currentVer
=
firstVer
;
tqWarn
(
"vgId:%d s-task:%s ver earlier than the first ver of wal range %"
PRId64
", forward to %"
PRId64
,
vgId
,
pTask
->
id
.
idStr
,
firstVer
,
pTask
->
chkInfo
.
currentVer
);
}
// append the data for the stream
tqDebug
(
"vgId:%d s-task:%s wal reader seek to ver:%"
PRId64
,
vgId
,
pTask
->
id
.
idStr
,
pTask
->
chkInfo
.
currentVer
);
int64_t
currentVer
=
walReaderGetCurrentVer
(
pTask
->
exec
.
pWalReader
);
if
(
currentVer
!=
pTask
->
chkInfo
.
currentVer
)
{
int32_t
code
=
walReadSeekVer
(
pTask
->
exec
.
pWalReader
,
pTask
->
chkInfo
.
currentVer
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
// no data in wal, quit
streamMetaReleaseTask
(
pStreamMeta
,
pTask
);
continue
;
}
// append the data for the stream
tqDebug
(
"vgId:%d s-task:%s wal reader seek to ver:%"
PRId64
,
vgId
,
pTask
->
id
.
idStr
,
pTask
->
chkInfo
.
currentVer
);
}
SPackedData
packData
=
{
0
};
code
=
extractSubmitMsgFromWal
(
pTask
->
exec
.
pWalReader
,
&
packData
);
int32_t
code
=
extractSubmitMsgFromWal
(
pTask
->
exec
.
pWalReader
,
&
packData
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
// failed, continue
streamMetaReleaseTask
(
pStreamMeta
,
pTask
);
continue
;
...
...
source/libs/wal/src/walRead.c
浏览文件 @
ace193ca
...
...
@@ -101,6 +101,7 @@ int32_t walNextValidMsg(SWalReader *pReader) {
}
int64_t
walReaderGetCurrentVer
(
const
SWalReader
*
pReader
)
{
return
pReader
->
curVersion
;
}
int64_t
walReaderGetValidFirstVer
(
const
SWalReader
*
pReader
)
{
return
walGetFirstVer
(
pReader
->
pWal
);
}
static
int64_t
walReadSeekFilePos
(
SWalReader
*
pReader
,
int64_t
fileFirstVer
,
int64_t
ver
)
{
int64_t
ret
=
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录