Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
835ddbac
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看板
提交
835ddbac
编写于
7月 11, 2022
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: fix retry issue
上级
c3c1a2ec
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
39 addition
and
6 deletion
+39
-6
source/libs/scheduler/inc/schInt.h
source/libs/scheduler/inc/schInt.h
+2
-0
source/libs/scheduler/src/schJob.c
source/libs/scheduler/src/schJob.c
+34
-4
source/libs/scheduler/src/schRemote.c
source/libs/scheduler/src/schRemote.c
+1
-1
source/libs/scheduler/src/schTask.c
source/libs/scheduler/src/schTask.c
+2
-1
未找到文件。
source/libs/scheduler/inc/schInt.h
浏览文件 @
835ddbac
...
@@ -223,6 +223,7 @@ typedef struct SSchJobAttr {
...
@@ -223,6 +223,7 @@ typedef struct SSchJobAttr {
typedef
struct
{
typedef
struct
{
int32_t
op
;
int32_t
op
;
SRWLatch
lock
;
bool
syncReq
;
bool
syncReq
;
}
SSchOpStatus
;
}
SSchOpStatus
;
...
@@ -473,6 +474,7 @@ int32_t schGetTaskFromList(SHashObj *pTaskList, uint64_t taskId, SSchTask **pTas
...
@@ -473,6 +474,7 @@ int32_t schGetTaskFromList(SHashObj *pTaskList, uint64_t taskId, SSchTask **pTas
int32_t
schInitTask
(
SSchJob
*
pJob
,
SSchTask
*
pTask
,
SSubplan
*
pPlan
,
SSchLevel
*
pLevel
,
int32_t
levelNum
);
int32_t
schInitTask
(
SSchJob
*
pJob
,
SSchTask
*
pTask
,
SSubplan
*
pPlan
,
SSchLevel
*
pLevel
,
int32_t
levelNum
);
int32_t
schSwitchTaskCandidateAddr
(
SSchJob
*
pJob
,
SSchTask
*
pTask
);
int32_t
schSwitchTaskCandidateAddr
(
SSchJob
*
pJob
,
SSchTask
*
pTask
);
void
schDirectPostJobRes
(
SSchedulerReq
*
pReq
,
int32_t
errCode
);
void
schDirectPostJobRes
(
SSchedulerReq
*
pReq
,
int32_t
errCode
);
bool
schChkCurrentOp
(
SSchJob
*
pJob
,
int32_t
op
,
bool
sync
);
extern
SSchDebug
gSCHDebug
;
extern
SSchDebug
gSCHDebug
;
...
...
source/libs/scheduler/src/schJob.c
浏览文件 @
835ddbac
...
@@ -443,25 +443,37 @@ int32_t schNotifyUserFetchRes(SSchJob* pJob) {
...
@@ -443,25 +443,37 @@ int32_t schNotifyUserFetchRes(SSchJob* pJob) {
}
}
void
schPostJobRes
(
SSchJob
*
pJob
,
SCH_OP_TYPE
op
)
{
void
schPostJobRes
(
SSchJob
*
pJob
,
SCH_OP_TYPE
op
)
{
SCH_LOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
if
(
SCH_OP_NULL
==
pJob
->
opStatus
.
op
)
{
if
(
SCH_OP_NULL
==
pJob
->
opStatus
.
op
)
{
SCH_JOB_DLOG
(
"job not in any operation, no need to post job res, status:%s"
,
jobTaskStatusStr
(
pJob
->
status
));
SCH_JOB_DLOG
(
"job not in any operation, no need to post job res, status:%s"
,
jobTaskStatusStr
(
pJob
->
status
));
return
;
goto
_
return
;
}
}
if
(
op
&&
pJob
->
opStatus
.
op
!=
op
)
{
if
(
op
&&
pJob
->
opStatus
.
op
!=
op
)
{
SCH_JOB_ELOG
(
"job in operation %s mis-match with expected %s"
,
schGetOpStr
(
pJob
->
opStatus
.
op
),
schGetOpStr
(
op
));
SCH_JOB_ELOG
(
"job in operation %s mis-match with expected %s"
,
schGetOpStr
(
pJob
->
opStatus
.
op
),
schGetOpStr
(
op
));
return
;
goto
_
return
;
}
}
if
(
SCH_JOB_IN_SYNC_OP
(
pJob
))
{
if
(
SCH_JOB_IN_SYNC_OP
(
pJob
))
{
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
tsem_post
(
&
pJob
->
rspSem
);
tsem_post
(
&
pJob
->
rspSem
);
}
else
if
(
SCH_JOB_IN_ASYNC_EXEC_OP
(
pJob
))
{
}
else
if
(
SCH_JOB_IN_ASYNC_EXEC_OP
(
pJob
))
{
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
schNotifyUserExecRes
(
pJob
);
schNotifyUserExecRes
(
pJob
);
}
else
if
(
SCH_JOB_IN_ASYNC_FETCH_OP
(
pJob
))
{
}
else
if
(
SCH_JOB_IN_ASYNC_FETCH_OP
(
pJob
))
{
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
schNotifyUserFetchRes
(
pJob
);
schNotifyUserFetchRes
(
pJob
);
}
else
{
}
else
{
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
SCH_JOB_ELOG
(
"job not in any operation, status:%s"
,
jobTaskStatusStr
(
pJob
->
status
));
SCH_JOB_ELOG
(
"job not in any operation, status:%s"
,
jobTaskStatusStr
(
pJob
->
status
));
}
}
return
;
_return:
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
}
}
int32_t
schProcessOnJobFailureImpl
(
SSchJob
*
pJob
,
int32_t
status
,
int32_t
errCode
)
{
int32_t
schProcessOnJobFailureImpl
(
SSchJob
*
pJob
,
int32_t
status
,
int32_t
errCode
)
{
...
@@ -658,13 +670,13 @@ int32_t schJobFetchRows(SSchJob *pJob) {
...
@@ -658,13 +670,13 @@ int32_t schJobFetchRows(SSchJob *pJob) {
if
(
!
(
pJob
->
attr
.
explainMode
==
EXPLAIN_MODE_STATIC
))
{
if
(
!
(
pJob
->
attr
.
explainMode
==
EXPLAIN_MODE_STATIC
))
{
SCH_ERR_RET
(
schLaunchFetchTask
(
pJob
));
SCH_ERR_RET
(
schLaunchFetchTask
(
pJob
));
if
(
pJob
->
opStatus
.
syncReq
)
{
if
(
schChkCurrentOp
(
pJob
,
SCH_OP_FETCH
,
true
)
)
{
SCH_JOB_DLOG
(
"sync wait for rsp now, job status:%s"
,
SCH_GET_JOB_STATUS_STR
(
pJob
));
SCH_JOB_DLOG
(
"sync wait for rsp now, job status:%s"
,
SCH_GET_JOB_STATUS_STR
(
pJob
));
tsem_wait
(
&
pJob
->
rspSem
);
tsem_wait
(
&
pJob
->
rspSem
);
SCH_RET
(
schDumpJobFetchRes
(
pJob
,
pJob
->
userRes
.
fetchRes
));
SCH_RET
(
schDumpJobFetchRes
(
pJob
,
pJob
->
userRes
.
fetchRes
));
}
}
}
else
{
}
else
{
if
(
pJob
->
opStatus
.
syncReq
)
{
if
(
schChkCurrentOp
(
pJob
,
SCH_OP_FETCH
,
true
)
)
{
SCH_RET
(
schDumpJobFetchRes
(
pJob
,
pJob
->
userRes
.
fetchRes
));
SCH_RET
(
schDumpJobFetchRes
(
pJob
,
pJob
->
userRes
.
fetchRes
));
}
else
{
}
else
{
schPostJobRes
(
pJob
,
SCH_OP_FETCH
);
schPostJobRes
(
pJob
,
SCH_OP_FETCH
);
...
@@ -775,25 +787,37 @@ void schDirectPostJobRes(SSchedulerReq* pReq, int32_t errCode) {
...
@@ -775,25 +787,37 @@ void schDirectPostJobRes(SSchedulerReq* pReq, int32_t errCode) {
}
}
}
}
bool
schChkCurrentOp
(
SSchJob
*
pJob
,
int32_t
op
,
bool
sync
)
{
SCH_LOCK
(
SCH_READ
,
&
pJob
->
opStatus
.
lock
);
bool
r
=
(
pJob
->
opStatus
.
op
==
op
)
&&
(
pJob
->
opStatus
.
syncReq
==
sync
);
SCH_UNLOCK
(
SCH_READ
,
&
pJob
->
opStatus
.
lock
);
return
r
;
}
void
schProcessOnOpEnd
(
SSchJob
*
pJob
,
SCH_OP_TYPE
type
,
SSchedulerReq
*
pReq
,
int32_t
errCode
)
{
void
schProcessOnOpEnd
(
SSchJob
*
pJob
,
SCH_OP_TYPE
type
,
SSchedulerReq
*
pReq
,
int32_t
errCode
)
{
int32_t
op
=
0
;
int32_t
op
=
0
;
switch
(
type
)
{
switch
(
type
)
{
case
SCH_OP_EXEC
:
case
SCH_OP_EXEC
:
if
(
pReq
&&
pReq
->
syncReq
)
{
if
(
pReq
&&
pReq
->
syncReq
)
{
SCH_LOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
op
=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
type
,
SCH_OP_NULL
);
op
=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
type
,
SCH_OP_NULL
);
if
(
SCH_OP_NULL
==
op
||
op
!=
type
)
{
if
(
SCH_OP_NULL
==
op
||
op
!=
type
)
{
SCH_JOB_ELOG
(
"job not in %s operation, op:%s, status:%s"
,
schGetOpStr
(
type
),
schGetOpStr
(
op
),
jobTaskStatusStr
(
pJob
->
status
));
SCH_JOB_ELOG
(
"job not in %s operation, op:%s, status:%s"
,
schGetOpStr
(
type
),
schGetOpStr
(
op
),
jobTaskStatusStr
(
pJob
->
status
));
}
}
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
schDumpJobExecRes
(
pJob
,
pReq
->
pExecRes
);
schDumpJobExecRes
(
pJob
,
pReq
->
pExecRes
);
}
}
break
;
break
;
case
SCH_OP_FETCH
:
case
SCH_OP_FETCH
:
if
(
pReq
&&
pReq
->
syncReq
)
{
if
(
pReq
&&
pReq
->
syncReq
)
{
SCH_LOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
op
=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
type
,
SCH_OP_NULL
);
op
=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
type
,
SCH_OP_NULL
);
if
(
SCH_OP_NULL
==
op
||
op
!=
type
)
{
if
(
SCH_OP_NULL
==
op
||
op
!=
type
)
{
SCH_JOB_ELOG
(
"job not in %s operation, op:%s, status:%s"
,
schGetOpStr
(
type
),
schGetOpStr
(
op
),
jobTaskStatusStr
(
pJob
->
status
));
SCH_JOB_ELOG
(
"job not in %s operation, op:%s, status:%s"
,
schGetOpStr
(
type
),
schGetOpStr
(
op
),
jobTaskStatusStr
(
pJob
->
status
));
}
}
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
}
}
break
;
break
;
case
SCH_OP_GET_STATUS
:
case
SCH_OP_GET_STATUS
:
...
@@ -816,8 +840,10 @@ int32_t schProcessOnOpBegin(SSchJob* pJob, SCH_OP_TYPE type, SSchedulerReq* pReq
...
@@ -816,8 +840,10 @@ int32_t schProcessOnOpBegin(SSchJob* pJob, SCH_OP_TYPE type, SSchedulerReq* pReq
switch
(
type
)
{
switch
(
type
)
{
case
SCH_OP_EXEC
:
case
SCH_OP_EXEC
:
SCH_LOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
if
(
SCH_OP_NULL
!=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
SCH_OP_NULL
,
type
))
{
if
(
SCH_OP_NULL
!=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
SCH_OP_NULL
,
type
))
{
SCH_JOB_ELOG
(
"job already in %s operation"
,
schGetOpStr
(
pJob
->
opStatus
.
op
));
SCH_JOB_ELOG
(
"job already in %s operation"
,
schGetOpStr
(
pJob
->
opStatus
.
op
));
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
schDirectPostJobRes
(
pReq
,
TSDB_CODE_TSC_APP_ERROR
);
schDirectPostJobRes
(
pReq
,
TSDB_CODE_TSC_APP_ERROR
);
SCH_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
SCH_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
}
}
...
@@ -825,10 +851,13 @@ int32_t schProcessOnOpBegin(SSchJob* pJob, SCH_OP_TYPE type, SSchedulerReq* pReq
...
@@ -825,10 +851,13 @@ int32_t schProcessOnOpBegin(SSchJob* pJob, SCH_OP_TYPE type, SSchedulerReq* pReq
SCH_JOB_DLOG
(
"job start %s operation"
,
schGetOpStr
(
pJob
->
opStatus
.
op
));
SCH_JOB_DLOG
(
"job start %s operation"
,
schGetOpStr
(
pJob
->
opStatus
.
op
));
pJob
->
opStatus
.
syncReq
=
pReq
->
syncReq
;
pJob
->
opStatus
.
syncReq
=
pReq
->
syncReq
;
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
break
;
break
;
case
SCH_OP_FETCH
:
case
SCH_OP_FETCH
:
SCH_LOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
if
(
SCH_OP_NULL
!=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
SCH_OP_NULL
,
type
))
{
if
(
SCH_OP_NULL
!=
atomic_val_compare_exchange_32
(
&
pJob
->
opStatus
.
op
,
SCH_OP_NULL
,
type
))
{
SCH_JOB_ELOG
(
"job already in %s operation"
,
schGetOpStr
(
pJob
->
opStatus
.
op
));
SCH_JOB_ELOG
(
"job already in %s operation"
,
schGetOpStr
(
pJob
->
opStatus
.
op
));
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
schDirectPostJobRes
(
pReq
,
TSDB_CODE_TSC_APP_ERROR
);
schDirectPostJobRes
(
pReq
,
TSDB_CODE_TSC_APP_ERROR
);
SCH_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
SCH_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
}
}
...
@@ -840,6 +869,7 @@ int32_t schProcessOnOpBegin(SSchJob* pJob, SCH_OP_TYPE type, SSchedulerReq* pReq
...
@@ -840,6 +869,7 @@ int32_t schProcessOnOpBegin(SSchJob* pJob, SCH_OP_TYPE type, SSchedulerReq* pReq
pJob
->
userRes
.
cbParam
=
pReq
->
cbParam
;
pJob
->
userRes
.
cbParam
=
pReq
->
cbParam
;
pJob
->
opStatus
.
syncReq
=
pReq
->
syncReq
;
pJob
->
opStatus
.
syncReq
=
pReq
->
syncReq
;
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
opStatus
.
lock
);
if
(
!
SCH_JOB_NEED_FETCH
(
pJob
))
{
if
(
!
SCH_JOB_NEED_FETCH
(
pJob
))
{
SCH_JOB_ELOG
(
"no need to fetch data, status:%s"
,
SCH_GET_JOB_STATUS_STR
(
pJob
));
SCH_JOB_ELOG
(
"no need to fetch data, status:%s"
,
SCH_GET_JOB_STATUS_STR
(
pJob
));
...
...
source/libs/scheduler/src/schRemote.c
浏览文件 @
835ddbac
...
@@ -940,7 +940,7 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr,
...
@@ -940,7 +940,7 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr,
if
(
NULL
==
addr
)
{
if
(
NULL
==
addr
)
{
addr
=
taosArrayGet
(
pTask
->
candidateAddrs
,
pTask
->
candidateIdx
);
addr
=
taosArrayGet
(
pTask
->
candidateAddrs
,
pTask
->
candidateIdx
);
isCandidateAddr
=
true
;
isCandidateAddr
=
true
;
SCH_TASK_DLOG
(
"target candidateIdx %d
"
,
pTask
->
candidateIdx
);
SCH_TASK_DLOG
(
"target candidateIdx %d
, epInUse %d/%d"
,
pTask
->
candidateIdx
,
addr
->
epSet
.
inUse
,
addr
->
epSet
.
numOfEps
);
}
}
switch
(
msgType
)
{
switch
(
msgType
)
{
...
...
source/libs/scheduler/src/schTask.c
浏览文件 @
835ddbac
...
@@ -545,7 +545,8 @@ int32_t schHandleTaskRetry(SSchJob *pJob, SSchTask *pTask) {
...
@@ -545,7 +545,8 @@ int32_t schHandleTaskRetry(SSchJob *pJob, SSchTask *pTask) {
schDeregisterTaskHb
(
pJob
,
pTask
);
schDeregisterTaskHb
(
pJob
,
pTask
);
if
(
SCH_IS_DATA_BIND_TASK
(
pTask
))
{
if
(
SCH_IS_DATA_BIND_TASK
(
pTask
))
{
SCH_SWITCH_EPSET
(
&
pTask
->
plan
->
execNode
);
SQueryNodeAddr
*
addr
=
taosArrayGet
(
pTask
->
candidateAddrs
,
pTask
->
candidateIdx
);
SCH_SWITCH_EPSET
(
addr
);
}
else
{
}
else
{
SCH_ERR_RET
(
schSwitchTaskCandidateAddr
(
pJob
,
pTask
));
SCH_ERR_RET
(
schSwitchTaskCandidateAddr
(
pJob
,
pTask
));
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录