Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
0b0af524
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看板
未验证
提交
0b0af524
编写于
2月 21, 2023
作者:
D
dapan1121
提交者:
GitHub
2月 21, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20002 from taosdata/fix/forceStopTask
fix: add force stop task and rename conflict structer name
上级
c90e2aa7
ed4e8313
变更
9
显示空白变更内容
内联
并排
Showing
9 changed file
with
82 addition
and
58 deletion
+82
-58
include/util/tworker.h
include/util/tworker.h
+3
-3
source/client/src/clientHb.c
source/client/src/clientHb.c
+1
-1
source/dnode/mnode/impl/inc/mndInt.h
source/dnode/mnode/impl/inc/mndInt.h
+1
-1
source/dnode/qnode/inc/qndInt.h
source/dnode/qnode/inc/qndInt.h
+1
-1
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+1
-1
source/libs/qworker/inc/qwInt.h
source/libs/qworker/inc/qwInt.h
+2
-0
source/libs/qworker/src/qwDbg.c
source/libs/qworker/src/qwDbg.c
+10
-2
source/libs/qworker/src/qworker.c
source/libs/qworker/src/qworker.c
+52
-38
source/util/src/tworker.c
source/util/src/tworker.c
+11
-11
未找到文件。
include/util/tworker.h
浏览文件 @
0b0af524
...
...
@@ -26,12 +26,12 @@ extern "C" {
typedef
struct
SQWorkerPool
SQWorkerPool
;
typedef
struct
SWWorkerPool
SWWorkerPool
;
typedef
struct
SQWorker
{
typedef
struct
SQ
ueue
Worker
{
int32_t
id
;
// worker id
int64_t
pid
;
// thread pid
TdThread
thread
;
// thread id
void
*
pool
;
}
SQWorker
;
}
SQ
ueue
Worker
;
typedef
struct
SQWorkerPool
{
int32_t
max
;
// max number of workers
...
...
@@ -39,7 +39,7 @@ typedef struct SQWorkerPool {
int32_t
num
;
// current number of workers
STaosQset
*
qset
;
const
char
*
name
;
SQ
Worker
*
workers
;
SQ
ueueWorker
*
workers
;
TdThreadMutex
mutex
;
}
SQWorkerPool
;
...
...
source/client/src/clientHb.c
浏览文件 @
0b0af524
...
...
@@ -347,7 +347,7 @@ int32_t hbBuildQueryDesc(SQueryHbReqBasic *hbBasic, STscObj *pObj) {
continue
;
}
if
(
pRequest
->
killed
)
{
if
(
pRequest
->
killed
||
0
==
pRequest
->
body
.
queryJob
)
{
releaseRequest
(
*
rid
);
pIter
=
taosHashIterate
(
pObj
->
pRequests
,
pIter
);
continue
;
...
...
source/dnode/mnode/impl/inc/mndInt.h
浏览文件 @
0b0af524
...
...
@@ -58,7 +58,7 @@ typedef int32_t (*MndInitFp)(SMnode *pMnode);
typedef
void
(
*
MndCleanupFp
)(
SMnode
*
pMnode
);
typedef
int32_t
(
*
ShowRetrieveFp
)(
SRpcMsg
*
pMsg
,
SShowObj
*
pShow
,
SSDataBlock
*
pBlock
,
int32_t
rows
);
typedef
void
(
*
ShowFreeIterFp
)(
SMnode
*
pMnode
,
void
*
pIter
);
typedef
struct
SQWorker
SQHandle
;
typedef
struct
SQ
ueue
Worker
SQHandle
;
typedef
struct
{
const
char
*
name
;
...
...
source/dnode/qnode/inc/qndInt.h
浏览文件 @
0b0af524
...
...
@@ -29,7 +29,7 @@
extern
"C"
{
#endif
typedef
struct
SQWorker
SQHandle
;
typedef
struct
SQ
ueue
Worker
SQHandle
;
typedef
struct
SQnode
{
int32_t
qndId
;
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
0b0af524
...
...
@@ -58,7 +58,7 @@ typedef struct STQ STQ;
typedef
struct
SVState
SVState
;
typedef
struct
SVStatis
SVStatis
;
typedef
struct
SVBufPool
SVBufPool
;
typedef
struct
SQ
Worker
SQHandle
;
typedef
struct
SQ
ueueWorker
SQHandle
;
typedef
struct
STsdbKeepCfg
STsdbKeepCfg
;
typedef
struct
SMetaSnapReader
SMetaSnapReader
;
typedef
struct
SMetaSnapWriter
SMetaSnapWriter
;
...
...
source/libs/qworker/inc/qwInt.h
浏览文件 @
0b0af524
...
...
@@ -76,6 +76,7 @@ typedef struct SQWDebug {
bool
lockEnable
;
bool
statusEnable
;
bool
dumpEnable
;
bool
forceStop
;
bool
sleepSimulate
;
bool
deadSimulate
;
bool
redirectSimulate
;
...
...
@@ -248,6 +249,7 @@ typedef struct SQWorkerMgmt {
#define QW_QUERY_RUNNING(ctx) (QW_GET_PHASE(ctx) == QW_PHASE_PRE_QUERY || QW_GET_PHASE(ctx) == QW_PHASE_PRE_CQUERY)
#define QW_FETCH_RUNNING(ctx) ((ctx)->inFetch)
#define QW_QUERY_NOT_STARTED(ctx) (QW_GET_PHASE(ctx) == -1)
#define QW_SET_QTID(id, qId, tId, eId) \
do { \
...
...
source/libs/qworker/src/qwDbg.c
浏览文件 @
0b0af524
...
...
@@ -9,11 +9,13 @@
#include "tmsg.h"
#include "tname.h"
SQWDebug
gQWDebug
=
{.
statusEnable
=
true
,
SQWDebug
gQWDebug
=
{.
lockEnable
=
false
,
.
statusEnable
=
true
,
.
dumpEnable
=
false
,
.
redirectSimulate
=
false
,
.
deadSimulate
=
false
,
.
sleepSimulate
=
false
};
.
sleepSimulate
=
false
,
.
forceStop
=
false
};
int32_t
qwDbgValidateStatus
(
QW_FPARAMS_DEF
,
int8_t
oriStatus
,
int8_t
newStatus
,
bool
*
ignore
)
{
if
(
!
gQWDebug
.
statusEnable
)
{
...
...
@@ -306,6 +308,12 @@ int32_t qwDbgEnableDebug(char *option) {
return
TSDB_CODE_SUCCESS
;
}
if
(
0
==
strcasecmp
(
option
,
"forceStop"
))
{
gQWDebug
.
forceStop
=
true
;
qError
(
"qw forceStop debug enabled"
);
return
TSDB_CODE_SUCCESS
;
}
qError
(
"invalid qw debug option:%s"
,
option
);
return
TSDB_CODE_APP_ERROR
;
...
...
source/libs/qworker/src/qworker.c
浏览文件 @
0b0af524
...
...
@@ -18,6 +18,51 @@ SQWorkerMgmt gQwMgmt = {
.
qwNum
=
0
,
};
int32_t
qwStopAllTasks
(
SQWorker
*
mgmt
)
{
uint64_t
qId
,
tId
,
sId
;
int32_t
eId
;
int64_t
rId
=
0
;
void
*
pIter
=
taosHashIterate
(
mgmt
->
ctxHash
,
NULL
);
while
(
pIter
)
{
SQWTaskCtx
*
ctx
=
(
SQWTaskCtx
*
)
pIter
;
void
*
key
=
taosHashGetKey
(
pIter
,
NULL
);
QW_GET_QTID
(
key
,
qId
,
tId
,
eId
);
QW_LOCK
(
QW_WRITE
,
&
ctx
->
lock
);
sId
=
ctx
->
sId
;
QW_TASK_DLOG_E
(
"start to force stop task"
);
if
(
QW_EVENT_RECEIVED
(
ctx
,
QW_EVENT_DROP
)
||
QW_EVENT_PROCESSED
(
ctx
,
QW_EVENT_DROP
))
{
QW_TASK_WLOG_E
(
"task already dropping"
);
QW_UNLOCK
(
QW_WRITE
,
&
ctx
->
lock
);
pIter
=
taosHashIterate
(
mgmt
->
ctxHash
,
pIter
);
continue
;
}
if
(
QW_QUERY_RUNNING
(
ctx
))
{
qwKillTaskHandle
(
ctx
,
TSDB_CODE_VND_STOPPED
);
QW_TASK_DLOG_E
(
"task running, async killed"
);
}
else
if
(
QW_FETCH_RUNNING
(
ctx
))
{
QW_UPDATE_RSP_CODE
(
ctx
,
TSDB_CODE_VND_STOPPED
);
QW_SET_EVENT_RECEIVED
(
ctx
,
QW_EVENT_DROP
);
QW_TASK_DLOG_E
(
"task fetching, update drop received"
);
}
else
{
qwDropTask
(
QW_FPARAMS
());
}
QW_UNLOCK
(
QW_WRITE
,
&
ctx
->
lock
);
pIter
=
taosHashIterate
(
mgmt
->
ctxHash
,
pIter
);
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwProcessHbLinkBroken
(
SQWorker
*
mgmt
,
SQWMsg
*
qwMsg
,
SSchedulerHbReq
*
req
)
{
int32_t
code
=
0
;
SSchedulerHbRsp
rsp
=
{
0
};
...
...
@@ -973,6 +1018,10 @@ void qwProcessHbTimerEvent(void *param, void *tmrId) {
qwDbgDumpMgmtInfo
(
mgmt
);
if
(
gQWDebug
.
forceStop
)
{
(
void
)
qwStopAllTasks
(
mgmt
);
}
QW_LOCK
(
QW_READ
,
&
mgmt
->
schLock
);
int32_t
schNum
=
taosHashGetSize
(
mgmt
->
schHash
);
...
...
@@ -1087,6 +1136,7 @@ _return:
QW_RET
(
TSDB_CODE_SUCCESS
);
}
int32_t
qWorkerInit
(
int8_t
nodeType
,
int32_t
nodeId
,
void
**
qWorkerMgmt
,
const
SMsgCb
*
pMsgCb
)
{
if
(
NULL
==
qWorkerMgmt
||
(
pMsgCb
&&
pMsgCb
->
mgmt
==
NULL
))
{
qError
(
"invalid param to init qworker"
);
...
...
@@ -1186,45 +1236,9 @@ void qWorkerStopAllTasks(void *qWorkerMgmt) {
QW_DLOG
(
"start to stop all tasks, taskNum:%d"
,
taosHashGetSize
(
mgmt
->
ctxHash
));
uint64_t
qId
,
tId
,
sId
;
int32_t
eId
;
int64_t
rId
=
0
;
atomic_store_8
(
&
mgmt
->
nodeStopped
,
1
);
void
*
pIter
=
taosHashIterate
(
mgmt
->
ctxHash
,
NULL
);
while
(
pIter
)
{
SQWTaskCtx
*
ctx
=
(
SQWTaskCtx
*
)
pIter
;
void
*
key
=
taosHashGetKey
(
pIter
,
NULL
);
QW_GET_QTID
(
key
,
qId
,
tId
,
eId
);
QW_LOCK
(
QW_WRITE
,
&
ctx
->
lock
);
sId
=
ctx
->
sId
;
QW_TASK_DLOG_E
(
"start to force stop task"
);
if
(
QW_EVENT_RECEIVED
(
ctx
,
QW_EVENT_DROP
)
||
QW_EVENT_PROCESSED
(
ctx
,
QW_EVENT_DROP
))
{
QW_TASK_WLOG_E
(
"task already dropping"
);
QW_UNLOCK
(
QW_WRITE
,
&
ctx
->
lock
);
pIter
=
taosHashIterate
(
mgmt
->
ctxHash
,
pIter
);
continue
;
}
if
(
QW_QUERY_RUNNING
(
ctx
))
{
qwKillTaskHandle
(
ctx
,
TSDB_CODE_VND_STOPPED
);
}
else
if
(
QW_FETCH_RUNNING
(
ctx
))
{
QW_UPDATE_RSP_CODE
(
ctx
,
TSDB_CODE_VND_STOPPED
);
QW_SET_EVENT_RECEIVED
(
ctx
,
QW_EVENT_DROP
);
}
else
{
qwDropTask
(
QW_FPARAMS
());
}
QW_UNLOCK
(
QW_WRITE
,
&
ctx
->
lock
);
pIter
=
taosHashIterate
(
mgmt
->
ctxHash
,
pIter
);
}
(
void
)
qwStopAllTasks
(
mgmt
);
}
void
qWorkerDestroy
(
void
**
qWorkerMgmt
)
{
...
...
source/util/src/tworker.c
浏览文件 @
0b0af524
...
...
@@ -22,7 +22,7 @@ typedef void *(*ThreadFp)(void *param);
int32_t
tQWorkerInit
(
SQWorkerPool
*
pool
)
{
pool
->
qset
=
taosOpenQset
();
pool
->
workers
=
taosMemoryCalloc
(
pool
->
max
,
sizeof
(
SQWorker
));
pool
->
workers
=
taosMemoryCalloc
(
pool
->
max
,
sizeof
(
SQ
ueue
Worker
));
if
(
pool
->
workers
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
...
...
@@ -31,7 +31,7 @@ int32_t tQWorkerInit(SQWorkerPool *pool) {
(
void
)
taosThreadMutexInit
(
&
pool
->
mutex
,
NULL
);
for
(
int32_t
i
=
0
;
i
<
pool
->
max
;
++
i
)
{
SQWorker
*
worker
=
pool
->
workers
+
i
;
SQ
ueue
Worker
*
worker
=
pool
->
workers
+
i
;
worker
->
id
=
i
;
worker
->
pool
=
pool
;
}
...
...
@@ -42,14 +42,14 @@ int32_t tQWorkerInit(SQWorkerPool *pool) {
void
tQWorkerCleanup
(
SQWorkerPool
*
pool
)
{
for
(
int32_t
i
=
0
;
i
<
pool
->
max
;
++
i
)
{
SQWorker
*
worker
=
pool
->
workers
+
i
;
SQ
ueue
Worker
*
worker
=
pool
->
workers
+
i
;
if
(
taosCheckPthreadValid
(
worker
->
thread
))
{
taosQsetThreadResume
(
pool
->
qset
);
}
}
for
(
int32_t
i
=
0
;
i
<
pool
->
max
;
++
i
)
{
SQWorker
*
worker
=
pool
->
workers
+
i
;
SQ
ueue
Worker
*
worker
=
pool
->
workers
+
i
;
if
(
taosCheckPthreadValid
(
worker
->
thread
))
{
uInfo
(
"worker:%s:%d is stopping"
,
pool
->
name
,
worker
->
id
);
taosThreadJoin
(
worker
->
thread
,
NULL
);
...
...
@@ -65,7 +65,7 @@ void tQWorkerCleanup(SQWorkerPool *pool) {
uInfo
(
"worker:%s is closed"
,
pool
->
name
);
}
static
void
*
tQWorkerThreadFp
(
SQWorker
*
worker
)
{
static
void
*
tQWorkerThreadFp
(
SQ
ueue
Worker
*
worker
)
{
SQWorkerPool
*
pool
=
worker
->
pool
;
SQueueInfo
qinfo
=
{
0
};
void
*
msg
=
NULL
;
...
...
@@ -106,7 +106,7 @@ STaosQueue *tQWorkerAllocQueue(SQWorkerPool *pool, void *ahandle, FItem fp) {
// spawn a thread to process queue
if
(
pool
->
num
<
pool
->
max
)
{
do
{
SQWorker
*
worker
=
pool
->
workers
+
pool
->
num
;
SQ
ueue
Worker
*
worker
=
pool
->
workers
+
pool
->
num
;
TdThreadAttr
thAttr
;
taosThreadAttrInit
(
&
thAttr
);
...
...
@@ -138,7 +138,7 @@ void tQWorkerFreeQueue(SQWorkerPool *pool, STaosQueue *queue) {
int32_t
tAutoQWorkerInit
(
SAutoQWorkerPool
*
pool
)
{
pool
->
qset
=
taosOpenQset
();
pool
->
workers
=
taosArrayInit
(
2
,
sizeof
(
SQWorker
*
));
pool
->
workers
=
taosArrayInit
(
2
,
sizeof
(
SQ
ueue
Worker
*
));
if
(
pool
->
workers
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
...
...
@@ -153,14 +153,14 @@ int32_t tAutoQWorkerInit(SAutoQWorkerPool *pool) {
void
tAutoQWorkerCleanup
(
SAutoQWorkerPool
*
pool
)
{
int32_t
size
=
taosArrayGetSize
(
pool
->
workers
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SQWorker
*
worker
=
taosArrayGetP
(
pool
->
workers
,
i
);
SQ
ueue
Worker
*
worker
=
taosArrayGetP
(
pool
->
workers
,
i
);
if
(
taosCheckPthreadValid
(
worker
->
thread
))
{
taosQsetThreadResume
(
pool
->
qset
);
}
}
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SQWorker
*
worker
=
taosArrayGetP
(
pool
->
workers
,
i
);
SQ
ueue
Worker
*
worker
=
taosArrayGetP
(
pool
->
workers
,
i
);
if
(
taosCheckPthreadValid
(
worker
->
thread
))
{
uInfo
(
"worker:%s:%d is stopping"
,
pool
->
name
,
worker
->
id
);
taosThreadJoin
(
worker
->
thread
,
NULL
);
...
...
@@ -177,7 +177,7 @@ void tAutoQWorkerCleanup(SAutoQWorkerPool *pool) {
uInfo
(
"worker:%s is closed"
,
pool
->
name
);
}
static
void
*
tAutoQWorkerThreadFp
(
SQWorker
*
worker
)
{
static
void
*
tAutoQWorkerThreadFp
(
SQ
ueue
Worker
*
worker
)
{
SAutoQWorkerPool
*
pool
=
worker
->
pool
;
SQueueInfo
qinfo
=
{
0
};
void
*
msg
=
NULL
;
...
...
@@ -222,7 +222,7 @@ STaosQueue *tAutoQWorkerAllocQueue(SAutoQWorkerPool *pool, void *ahandle, FItem
// spawn a thread to process queue
while
(
curWorkerNum
<
dstWorkerNum
)
{
SQ
Worker
*
worker
=
taosMemoryCalloc
(
1
,
sizeof
(
SQ
Worker
));
SQ
ueueWorker
*
worker
=
taosMemoryCalloc
(
1
,
sizeof
(
SQueue
Worker
));
if
(
worker
==
NULL
||
taosArrayPush
(
pool
->
workers
,
&
worker
)
==
NULL
)
{
uError
(
"worker:%s:%d failed to create"
,
pool
->
name
,
curWorkerNum
);
taosMemoryFree
(
worker
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录