Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
TDengine
提交
c5b279f0
T
TDengine
项目概览
jobily
/
TDengine
9 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
c5b279f0
编写于
8月 30, 2023
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/enh/triggerCheckPoint2' into enh/triggerCheckPoint2
上级
24b1a050
fc3468fe
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
57 addition
and
19 deletion
+57
-19
include/libs/stream/tstream.h
include/libs/stream/tstream.h
+3
-2
source/dnode/mnode/impl/src/mndStream.c
source/dnode/mnode/impl/src/mndStream.c
+2
-2
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+1
-1
source/dnode/vnode/src/tq/tq.c
source/dnode/vnode/src/tq/tq.c
+11
-6
source/dnode/vnode/src/tq/tqPush.c
source/dnode/vnode/src/tq/tqPush.c
+1
-1
source/dnode/vnode/src/tq/tqRestore.c
source/dnode/vnode/src/tq/tqRestore.c
+8
-1
source/libs/stream/src/streamDispatch.c
source/libs/stream/src/streamDispatch.c
+5
-1
source/libs/stream/src/streamMeta.c
source/libs/stream/src/streamMeta.c
+11
-0
source/libs/stream/src/streamRecover.c
source/libs/stream/src/streamRecover.c
+15
-5
未找到文件。
include/libs/stream/tstream.h
浏览文件 @
c5b279f0
...
...
@@ -409,6 +409,7 @@ typedef struct SStreamMeta {
SArray
*
chkpInUse
;
int32_t
chkpCap
;
SRWLatch
chkpDirLock
;
int32_t
pauseTaskNum
;
}
SStreamMeta
;
int32_t
tEncodeStreamEpInfo
(
SEncoder
*
pEncoder
,
const
SStreamChildEpInfo
*
pInfo
);
...
...
@@ -673,8 +674,8 @@ int32_t streamTaskGetInputQItems(const SStreamTask* pTask);
int32_t
streamRestoreParam
(
SStreamTask
*
pTask
);
int32_t
streamSetStatusNormal
(
SStreamTask
*
pTask
);
const
char
*
streamGetTaskStatusStr
(
int32_t
status
);
void
streamTaskPause
(
SStreamTask
*
pTask
);
void
streamTaskResume
(
SStreamTask
*
pTask
);
void
streamTaskPause
(
SStreamTask
*
pTask
,
SStreamMeta
*
pMeta
);
void
streamTaskResume
(
SStreamTask
*
pTask
,
SStreamMeta
*
pMeta
);
void
streamTaskHalt
(
SStreamTask
*
pTask
);
void
streamTaskResumeFromHalt
(
SStreamTask
*
pTask
);
void
streamTaskDisablePause
(
SStreamTask
*
pTask
);
...
...
source/dnode/mnode/impl/src/mndStream.c
浏览文件 @
c5b279f0
...
...
@@ -1635,7 +1635,7 @@ int32_t mndPauseAllStreamTaskImpl(STrans *pTrans, SArray *tasks) {
int32_t
sz
=
taosArrayGetSize
(
pTasks
);
for
(
int32_t
j
=
0
;
j
<
sz
;
j
++
)
{
SStreamTask
*
pTask
=
taosArrayGetP
(
pTasks
,
j
);
if
(
pTask
->
info
.
taskLevel
!=
TASK_LEVEL__SINK
&&
mndPauseStreamTask
(
pTrans
,
pTask
)
<
0
)
{
if
(
mndPauseStreamTask
(
pTrans
,
pTask
)
<
0
)
{
return
-
1
;
}
...
...
@@ -1775,7 +1775,7 @@ int32_t mndResumeAllStreamTasks(STrans *pTrans, SStreamObj *pStream, int8_t igUn
int32_t
sz
=
taosArrayGetSize
(
pTasks
);
for
(
int32_t
j
=
0
;
j
<
sz
;
j
++
)
{
SStreamTask
*
pTask
=
taosArrayGetP
(
pTasks
,
j
);
if
(
pTask
->
info
.
taskLevel
!=
TASK_LEVEL__SINK
&&
mndResumeStreamTask
(
pTrans
,
pTask
,
igUntreated
)
<
0
)
{
if
(
mndResumeStreamTask
(
pTrans
,
pTask
,
igUntreated
)
<
0
)
{
return
-
1
;
}
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
c5b279f0
...
...
@@ -223,7 +223,7 @@ void tqClose(STQ*);
int
tqPushMsg
(
STQ
*
,
tmsg_t
msgType
);
int
tqRegisterPushHandle
(
STQ
*
pTq
,
void
*
handle
,
SRpcMsg
*
pMsg
);
int
tqUnregisterPushHandle
(
STQ
*
pTq
,
void
*
pHandle
);
int
tqStartStreamTasks
(
STQ
*
pTq
);
// restore all stream tasks after vnode launching completed.
int
tqStartStreamTasks
(
STQ
*
pTq
,
bool
ckPause
);
// restore all stream tasks after vnode launching completed.
int32_t
tqProcessStreamCheckPointSourceReq
(
STQ
*
pTq
,
SRpcMsg
*
pMsg
);
int32_t
tqProcessStreamTaskCheckpointReadyMsg
(
STQ
*
pTq
,
SRpcMsg
*
pMsg
);
int32_t
tqProcessTaskUpdateReq
(
STQ
*
pTq
,
SRpcMsg
*
pMsg
);
...
...
source/dnode/vnode/src/tq/tq.c
浏览文件 @
c5b279f0
...
...
@@ -1199,7 +1199,7 @@ int32_t tqProcessTaskScanHistory(STQ* pTq, SRpcMsg* pMsg) {
streamSetStatusNormal
(
pTask
);
}
tqStartStreamTasks
(
pTq
);
tqStartStreamTasks
(
pTq
,
false
);
}
streamMetaReleaseTask
(
pMeta
,
pTask
);
...
...
@@ -1365,7 +1365,7 @@ int32_t tqProcessTaskRunReq(STQ* pTq, SRpcMsg* pMsg) {
}
streamMetaReleaseTask
(
pTq
->
pStreamMeta
,
pTask
);
tqStartStreamTasks
(
pTq
);
tqStartStreamTasks
(
pTq
,
false
);
return
0
;
}
else
{
// NOTE: pTask->status.schedStatus is not updated since it is not be handled by the run exec.
// todo add one function to handle this
...
...
@@ -1448,7 +1448,7 @@ int32_t tqProcessTaskPauseReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg
}
tqDebug
(
"s-task:%s receive pause msg from mnode"
,
pTask
->
id
.
idStr
);
streamTaskPause
(
pTask
);
streamTaskPause
(
pTask
,
pMeta
);
SStreamTask
*
pHistoryTask
=
NULL
;
if
(
pTask
->
historyTaskId
.
taskId
!=
0
)
{
...
...
@@ -1464,7 +1464,7 @@ int32_t tqProcessTaskPauseReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg
tqDebug
(
"s-task:%s fill-history task handle paused along with related stream task"
,
pHistoryTask
->
id
.
idStr
);
streamTaskPause
(
pHistoryTask
);
streamTaskPause
(
pHistoryTask
,
pMeta
);
streamMetaReleaseTask
(
pMeta
,
pHistoryTask
);
}
...
...
@@ -1479,9 +1479,14 @@ int32_t tqProcessTaskResumeImpl(STQ* pTq, SStreamTask* pTask, int64_t sversion,
}
// todo: handle the case: resume from halt to pause/ from halt to normal/ from pause to normal
streamTaskResume
(
pTask
);
streamTaskResume
(
pTask
,
pTq
->
pStreamMeta
);
int32_t
level
=
pTask
->
info
.
taskLevel
;
if
(
level
==
TASK_LEVEL__SINK
)
{
streamMetaReleaseTask
(
pTq
->
pStreamMeta
,
pTask
);
return
0
;
}
int8_t
status
=
pTask
->
status
.
taskStatus
;
if
(
status
==
TASK_STATUS__NORMAL
||
status
==
TASK_STATUS__SCAN_HISTORY
)
{
// no lock needs to secure the access of the version
...
...
@@ -1500,7 +1505,7 @@ int32_t tqProcessTaskResumeImpl(STQ* pTq, SStreamTask* pTask, int64_t sversion,
pTask
->
status
.
taskStatus
==
TASK_STATUS__SCAN_HISTORY
)
{
streamStartScanHistoryAsync
(
pTask
,
igUntreated
);
}
else
if
(
level
==
TASK_LEVEL__SOURCE
&&
(
taosQueueItemSize
(
pTask
->
inputQueue
->
queue
)
==
0
))
{
tqStartStreamTasks
(
pTq
);
tqStartStreamTasks
(
pTq
,
false
);
}
else
{
streamSchedExec
(
pTask
);
}
...
...
source/dnode/vnode/src/tq/tqPush.c
浏览文件 @
c5b279f0
...
...
@@ -46,7 +46,7 @@ int32_t tqPushMsg(STQ* pTq, tmsg_t msgType) {
// 2. the vnode should be the leader.
// 3. the stream is not suspended yet.
if
((
!
tsDisableStream
)
&&
(
numOfTasks
>
0
)
&&
(
msgType
==
TDMT_VND_SUBMIT
||
msgType
==
TDMT_VND_DELETE
))
{
tqStartStreamTasks
(
pTq
);
tqStartStreamTasks
(
pTq
,
true
);
}
return
0
;
...
...
source/dnode/vnode/src/tq/tqRestore.c
浏览文件 @
c5b279f0
...
...
@@ -121,7 +121,7 @@ int32_t tqCheckStreamStatus(STQ* pTq) {
return
0
;
}
int32_t
tqStartStreamTasks
(
STQ
*
pTq
)
{
int32_t
tqStartStreamTasks
(
STQ
*
pTq
,
bool
ckPause
)
{
int32_t
vgId
=
TD_VID
(
pTq
->
pVnode
);
SStreamMeta
*
pMeta
=
pTq
->
pStreamMeta
;
...
...
@@ -147,6 +147,13 @@ int32_t tqStartStreamTasks(STQ* pTq) {
return
0
;
}
int32_t
numOfPauseTasks
=
pTq
->
pStreamMeta
->
pauseTaskNum
;
if
(
ckPause
&&
numOfTasks
==
numOfPauseTasks
)
{
tqDebug
(
"ignore all submit, all streams had been paused"
);
taosWUnLockLatch
(
&
pMeta
->
lock
);
return
0
;
}
SStreamTaskRunReq
*
pRunReq
=
rpcMallocCont
(
sizeof
(
SStreamTaskRunReq
));
if
(
pRunReq
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
...
...
source/libs/stream/src/streamDispatch.c
浏览文件 @
c5b279f0
...
...
@@ -403,7 +403,11 @@ static void doRetryDispatchData(void* param, void* tmrId) {
if
(
!
streamTaskShouldStop
(
&
pTask
->
status
))
{
qDebug
(
"s-task:%s reset the waitRspCnt to be 0 before launch retry dispatch"
,
pTask
->
id
.
idStr
);
atomic_store_32
(
&
pTask
->
shuffleDispatcher
.
waitingRspCnt
,
0
);
streamRetryDispatchStreamBlock
(
pTask
,
DISPATCH_RETRY_INTERVAL_MS
);
if
(
streamTaskShouldPause
(
&
pTask
->
status
))
{
streamRetryDispatchStreamBlock
(
pTask
,
DISPATCH_RETRY_INTERVAL_MS
*
10
);
}
else
{
streamRetryDispatchStreamBlock
(
pTask
,
DISPATCH_RETRY_INTERVAL_MS
);
}
}
else
{
atomic_sub_fetch_8
(
&
pTask
->
status
.
timerActive
,
1
);
qDebug
(
"s-task:%s should stop, abort from timer"
,
pTask
->
id
.
idStr
);
...
...
source/libs/stream/src/streamMeta.c
浏览文件 @
c5b279f0
...
...
@@ -203,6 +203,8 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
taosInitRWLatch
(
&
pMeta
->
lock
);
taosThreadMutexInit
(
&
pMeta
->
backendMutex
,
NULL
);
pMeta
->
pauseTaskNum
=
0
;
qInfo
(
"vgId:%d open stream meta successfully, latest checkpoint:%"
PRId64
", stage:%"
PRId64
,
vgId
,
pMeta
->
chkpId
,
stage
);
return
pMeta
;
...
...
@@ -486,6 +488,10 @@ int32_t streamMetaUnregisterTask(SStreamMeta* pMeta, int64_t streamId, int32_t t
SStreamTask
**
ppTask
=
(
SStreamTask
**
)
taosHashGet
(
pMeta
->
pTasks
,
keys
,
sizeof
(
keys
));
if
(
ppTask
)
{
pTask
=
*
ppTask
;
if
(
streamTaskShouldPause
(
&
pTask
->
status
))
{
int32_t
num
=
atomic_sub_fetch_32
(
&
pMeta
->
pauseTaskNum
,
1
);
qInfo
(
"vgId:%d s-task:%s drop stream task. pause task num:%d"
,
pMeta
->
vgId
,
pTask
->
id
.
idStr
,
num
);
}
atomic_store_8
(
&
pTask
->
status
.
taskStatus
,
TASK_STATUS__DROPPING
);
}
else
{
qDebug
(
"vgId:%d failed to find the task:0x%x, it may be dropped already"
,
pMeta
->
vgId
,
taskId
);
...
...
@@ -685,8 +691,13 @@ int32_t streamLoadTasks(SStreamMeta* pMeta) {
return
-
1
;
}
if
(
streamTaskShouldPause
(
&
pTask
->
status
))
{
atomic_add_fetch_32
(
&
pMeta
->
pauseTaskNum
,
1
);
}
ASSERT
(
pTask
->
status
.
downstreamReady
==
0
);
}
qInfo
(
"vgId:%d pause task num:%d"
,
pMeta
->
vgId
,
pMeta
->
pauseTaskNum
);
tdbFree
(
pKey
);
tdbFree
(
pVal
);
...
...
source/libs/stream/src/streamRecover.c
浏览文件 @
c5b279f0
...
...
@@ -811,9 +811,7 @@ void streamTaskCheckDownstreamTasks(SStreamTask* pTask) {
}
// normal -> pause, pause/stop/dropping -> pause, halt -> pause, scan-history -> pause
void
streamTaskPause
(
SStreamTask
*
pTask
)
{
SStreamMeta
*
pMeta
=
pTask
->
pMeta
;
void
streamTaskPause
(
SStreamTask
*
pTask
,
SStreamMeta
*
pMeta
)
{
int64_t
st
=
taosGetTimestampMs
();
int8_t
status
=
pTask
->
status
.
taskStatus
;
...
...
@@ -828,6 +826,12 @@ void streamTaskPause(SStreamTask* pTask) {
return
;
}
if
(
pTask
->
info
.
taskLevel
==
TASK_LEVEL__SINK
)
{
int32_t
num
=
atomic_add_fetch_32
(
&
pMeta
->
pauseTaskNum
,
1
);
qInfo
(
"vgId:%d s-task:%s pause stream sink task. pause task num:%d"
,
pMeta
->
vgId
,
pTask
->
id
.
idStr
,
num
);
return
;
}
while
(
!
pTask
->
status
.
pauseAllowed
||
(
pTask
->
status
.
taskStatus
==
TASK_STATUS__HALT
))
{
status
=
pTask
->
status
.
taskStatus
;
if
(
status
==
TASK_STATUS__DROPPING
)
{
...
...
@@ -857,6 +861,8 @@ void streamTaskPause(SStreamTask* pTask) {
atomic_store_8
(
&
pTask
->
status
.
keepTaskStatus
,
pTask
->
status
.
taskStatus
);
atomic_store_8
(
&
pTask
->
status
.
taskStatus
,
TASK_STATUS__PAUSE
);
int32_t
num
=
atomic_add_fetch_32
(
&
pMeta
->
pauseTaskNum
,
1
);
qInfo
(
"vgId:%d s-task:%s pause stream task. pause task num:%d"
,
pMeta
->
vgId
,
pTask
->
id
.
idStr
,
num
);
taosWUnLockLatch
(
&
pMeta
->
lock
);
// in case of fill-history task, stop the tsdb file scan operation.
...
...
@@ -870,12 +876,16 @@ void streamTaskPause(SStreamTask* pTask) {
streamGetTaskStatusStr
(
pTask
->
status
.
keepTaskStatus
),
(
int32_t
)
el
);
}
void
streamTaskResume
(
SStreamTask
*
pTask
)
{
void
streamTaskResume
(
SStreamTask
*
pTask
,
SStreamMeta
*
pMeta
)
{
int8_t
status
=
pTask
->
status
.
taskStatus
;
if
(
status
==
TASK_STATUS__PAUSE
)
{
pTask
->
status
.
taskStatus
=
pTask
->
status
.
keepTaskStatus
;
pTask
->
status
.
keepTaskStatus
=
TASK_STATUS__NORMAL
;
qDebug
(
"s-task:%s resume from pause"
,
pTask
->
id
.
idStr
);
int32_t
num
=
atomic_sub_fetch_32
(
&
pMeta
->
pauseTaskNum
,
1
);
qInfo
(
"vgId:%d s-task:%s resume from pause, status%s. pause task num:%d"
,
pMeta
->
vgId
,
pTask
->
id
.
idStr
,
streamGetTaskStatusStr
(
status
),
num
);
}
else
if
(
pTask
->
info
.
taskLevel
==
TASK_LEVEL__SINK
)
{
int32_t
num
=
atomic_sub_fetch_32
(
&
pMeta
->
pauseTaskNum
,
1
);
qInfo
(
"vgId:%d s-task:%s sink task.resume from pause, status%s. pause task num:%d"
,
pMeta
->
vgId
,
pTask
->
id
.
idStr
,
streamGetTaskStatusStr
(
status
),
num
);
}
else
{
qError
(
"s-task:%s not in pause, failed to resume, status:%s"
,
pTask
->
id
.
idStr
,
streamGetTaskStatusStr
(
status
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录