Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b6f55fa0
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看板
提交
b6f55fa0
编写于
7月 18, 2022
作者:
L
Liu Jicong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(stream): batch optimization for submit msg
上级
4dad4138
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
73 addition
and
12 deletion
+73
-12
include/common/tcommon.h
include/common/tcommon.h
+1
-1
include/libs/stream/tstream.h
include/libs/stream/tstream.h
+7
-0
source/libs/stream/src/streamData.c
source/libs/stream/src/streamData.c
+53
-1
source/libs/stream/src/streamExec.c
source/libs/stream/src/streamExec.c
+12
-10
未找到文件。
include/common/tcommon.h
浏览文件 @
b6f55fa0
...
...
@@ -54,12 +54,12 @@ enum {
enum
{
STREAM_INPUT__DATA_SUBMIT
=
1
,
STREAM_INPUT__DATA_BLOCK
,
STREAM_INPUT__MERGED_SUBMIT
,
// STREAM_INPUT__TABLE_SCAN,
STREAM_INPUT__TQ_SCAN
,
STREAM_INPUT__DATA_RETRIEVE
,
STREAM_INPUT__GET_RES
,
STREAM_INPUT__CHECKPOINT
,
STREAM_INPUT__DROP
,
};
typedef
enum
EStreamType
{
...
...
include/libs/stream/tstream.h
浏览文件 @
b6f55fa0
...
...
@@ -77,6 +77,13 @@ typedef struct {
SSubmitReq
*
data
;
}
SStreamDataSubmit
;
typedef
struct
{
int8_t
type
;
int64_t
ver
;
SArray
*
dataRefs
;
// SArray<int32_t*>
SArray
*
reqs
;
// SArray<SSubmitReq*>
}
SStreamMergedSubmit
;
typedef
struct
{
int8_t
type
;
...
...
source/libs/stream/src/streamData.c
浏览文件 @
b6f55fa0
...
...
@@ -77,6 +77,27 @@ FAIL:
return
NULL
;
}
SStreamMergedSubmit
*
streamMergedSubmitNew
()
{
SStreamMergedSubmit
*
pMerged
=
(
SStreamMergedSubmit
*
)
taosAllocateQitem
(
sizeof
(
SStreamMergedSubmit
),
DEF_QITEM
);
if
(
pMerged
==
NULL
)
return
NULL
;
pMerged
->
reqs
=
taosArrayInit
(
0
,
sizeof
(
void
*
));
pMerged
->
dataRefs
=
taosArrayInit
(
0
,
sizeof
(
void
*
));
if
(
pMerged
->
dataRefs
==
NULL
||
pMerged
->
reqs
==
NULL
)
goto
FAIL
;
return
pMerged
;
FAIL:
if
(
pMerged
->
reqs
)
taosArrayDestroy
(
pMerged
->
reqs
);
if
(
pMerged
->
dataRefs
)
taosArrayDestroy
(
pMerged
->
dataRefs
);
taosFreeQitem
(
pMerged
);
return
NULL
;
}
int32_t
streamMergeSubmit
(
SStreamMergedSubmit
*
pMerged
,
SStreamDataSubmit
*
pSubmit
)
{
taosArrayPush
(
pMerged
->
dataRefs
,
pSubmit
->
dataRef
);
taosArrayPush
(
pMerged
->
reqs
,
pSubmit
->
data
);
pMerged
->
ver
=
pSubmit
->
ver
;
return
0
;
}
static
FORCE_INLINE
void
streamDataSubmitRefInc
(
SStreamDataSubmit
*
pDataSubmit
)
{
atomic_add_fetch_32
(
pDataSubmit
->
dataRef
,
1
);
}
...
...
@@ -102,10 +123,26 @@ void streamDataSubmitRefDec(SStreamDataSubmit* pDataSubmit) {
int32_t
streamAppendQueueItem
(
SStreamQueueItem
*
dst
,
SStreamQueueItem
*
elem
)
{
ASSERT
(
elem
);
if
(
dst
->
type
==
elem
->
type
&&
dst
->
type
==
STREAM_INPUT__DATA_BLOCK
)
{
if
(
dst
->
type
==
STREAM_INPUT__DATA_BLOCK
&&
elem
->
type
==
STREAM_INPUT__DATA_BLOCK
)
{
SStreamDataBlock
*
pBlock
=
(
SStreamDataBlock
*
)
dst
;
SStreamDataBlock
*
pBlockSrc
=
(
SStreamDataBlock
*
)
elem
;
taosArrayAddAll
(
pBlock
->
blocks
,
pBlockSrc
->
blocks
);
taosArrayDestroy
(
pBlockSrc
->
blocks
);
taosFreeQitem
(
elem
);
return
0
;
}
else
if
(
dst
->
type
==
STREAM_INPUT__MERGED_SUBMIT
&&
elem
->
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
SStreamMergedSubmit
*
pMerged
=
(
SStreamMergedSubmit
*
)
dst
;
SStreamDataSubmit
*
pBlockSrc
=
(
SStreamDataSubmit
*
)
elem
;
streamMergeSubmit
(
pMerged
,
pBlockSrc
);
taosFreeQitem
(
elem
);
return
0
;
}
else
if
(
dst
->
type
==
STREAM_INPUT__DATA_SUBMIT
&&
elem
->
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
SStreamMergedSubmit
*
pMerged
=
streamMergedSubmitNew
();
ASSERT
(
pMerged
);
streamMergeSubmit
(
pMerged
,
(
SStreamDataSubmit
*
)
dst
);
streamMergeSubmit
(
pMerged
,
(
SStreamDataSubmit
*
)
elem
);
taosFreeQitem
(
dst
);
taosFreeQitem
(
elem
);
return
0
;
}
else
{
return
-
1
;
...
...
@@ -123,5 +160,20 @@ void streamFreeQitem(SStreamQueueItem* data) {
}
else
if
(
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
streamDataSubmitRefDec
((
SStreamDataSubmit
*
)
data
);
taosFreeQitem
(
data
);
}
else
if
(
type
==
STREAM_INPUT__MERGED_SUBMIT
)
{
SStreamMergedSubmit
*
pMerge
=
(
SStreamMergedSubmit
*
)
data
;
int32_t
sz
=
taosArrayGetSize
(
pMerge
->
reqs
);
for
(
int32_t
i
=
0
;
i
<
sz
;
i
++
)
{
int32_t
*
ref
=
taosArrayGet
(
pMerge
->
dataRefs
,
i
);
(
*
ref
)
--
;
if
(
*
ref
==
0
)
{
void
*
data
=
taosArrayGet
(
pMerge
->
reqs
,
i
);
taosMemoryFree
(
data
);
taosMemoryFree
(
ref
);
}
}
taosArrayDestroy
(
pMerge
->
reqs
);
taosArrayDestroy
(
pMerge
->
dataRefs
);
taosFreeQitem
(
pMerge
);
}
}
source/libs/stream/src/streamExec.c
浏览文件 @
b6f55fa0
...
...
@@ -33,9 +33,12 @@ static int32_t streamTaskExecImpl(SStreamTask* pTask, void* data, SArray* pRes)
SArray
*
blocks
=
pBlock
->
blocks
;
qDebug
(
"task %d %p set ssdata input"
,
pTask
->
taskId
,
pTask
);
qSetMultiStreamInput
(
exec
,
blocks
->
pData
,
blocks
->
size
,
STREAM_INPUT__DATA_BLOCK
,
false
);
}
else
if
(
pItem
->
type
==
STREAM_INPUT__DROP
)
{
// TODO exec drop
return
0
;
}
else
if
(
pItem
->
type
==
STREAM_INPUT__MERGED_SUBMIT
)
{
SStreamMergedSubmit
*
pMerged
=
(
SStreamMergedSubmit
*
)
data
;
SArray
*
blocks
=
pMerged
->
reqs
;
qSetMultiStreamInput
(
exec
,
blocks
->
pData
,
blocks
->
size
,
STREAM_INPUT__DATA_SUBMIT
,
false
);
}
else
{
ASSERT
(
0
);
}
// exec
...
...
@@ -155,11 +158,9 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
if
(
data
==
NULL
)
{
data
=
qItem
;
streamQueueProcessSuccess
(
pTask
->
inputQueue
);
if
(
qItem
->
type
==
STREAM_INPUT__DATA_BLOCK
)
{
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
}
else
{
break
;
}
/*if (qItem->type == STREAM_INPUT__DATA_BLOCK) {*/
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
/*}*/
}
else
{
if
(
streamAppendQueueItem
(
data
,
qItem
)
<
0
)
{
streamQueueProcessFail
(
pTask
->
inputQueue
);
...
...
@@ -168,11 +169,10 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
cnt
++
;
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
streamQueueProcessSuccess
(
pTask
->
inputQueue
);
taosArrayDestroy
(((
SStreamDataBlock
*
)
qItem
)
->
blocks
);
taosFreeQitem
(
qItem
);
}
}
}
if
(
pTask
->
taskStatus
==
TASK_STATUS__DROPPING
)
{
if
(
data
)
streamFreeQitem
(
data
);
taosArrayDestroyEx
(
pRes
,
(
FDelete
)
blockDataFreeRes
);
...
...
@@ -194,6 +194,7 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
if
(
taosArrayGetSize
(
pRes
)
!=
0
)
{
SStreamDataBlock
*
qRes
=
taosAllocateQitem
(
sizeof
(
SStreamDataBlock
),
DEF_QITEM
);
if
(
qRes
==
NULL
)
{
// TODO log failed ver
streamQueueProcessFail
(
pTask
->
inputQueue
);
taosArrayDestroy
(
pRes
);
return
NULL
;
...
...
@@ -201,6 +202,7 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
qRes
->
type
=
STREAM_INPUT__DATA_BLOCK
;
qRes
->
blocks
=
pRes
;
if
(
streamTaskOutput
(
pTask
,
qRes
)
<
0
)
{
// TODO log failed ver
/*streamQueueProcessFail(pTask->inputQueue);*/
taosArrayDestroyEx
(
pRes
,
(
FDelete
)
blockDataFreeRes
);
taosFreeQitem
(
qRes
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录