Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f66f203c
T
TDengine
项目概览
taosdata
/
TDengine
9 个月 前同步成功
通知
1176
Star
22014
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看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f66f203c
编写于
8月 23, 2023
作者:
L
liuyao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
reload semi session state
上级
ccb675fe
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
67 addition
and
7 deletion
+67
-7
source/libs/executor/src/streamtimewindowoperator.c
source/libs/executor/src/streamtimewindowoperator.c
+67
-7
未找到文件。
source/libs/executor/src/streamtimewindowoperator.c
浏览文件 @
f66f203c
...
...
@@ -1874,6 +1874,31 @@ static int32_t compactSessionWindow(SOperatorInfo* pOperator, SResultWindowInfo*
return
winNum
;
}
static
void
compactSessionSemiWindow
(
SOperatorInfo
*
pOperator
,
SResultWindowInfo
*
pCurWin
)
{
SExprSupp
*
pSup
=
&
pOperator
->
exprSupp
;
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamSessionAggOperatorInfo
*
pInfo
=
pOperator
->
info
;
SResultRow
*
pCurResult
=
NULL
;
int32_t
numOfOutput
=
pOperator
->
exprSupp
.
numOfExprs
;
SStreamAggSupporter
*
pAggSup
=
&
pInfo
->
streamAggSup
;
// Just look for the window behind StartIndex
while
(
1
)
{
SResultWindowInfo
winInfo
=
{
0
};
SStreamStateCur
*
pCur
=
getNextSessionWinInfo
(
pAggSup
,
NULL
,
pCurWin
,
&
winInfo
);
if
(
!
IS_VALID_SESSION_WIN
(
winInfo
)
||
!
isInWindow
(
pCurWin
,
winInfo
.
sessionWin
.
win
.
skey
,
pAggSup
->
gap
)
||
!
inWinRange
(
&
pAggSup
->
winRange
,
&
winInfo
.
sessionWin
.
win
))
{
taosMemoryFree
(
winInfo
.
pOutputBuf
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
break
;
}
pCurWin
->
sessionWin
.
win
.
ekey
=
TMAX
(
pCurWin
->
sessionWin
.
win
.
ekey
,
winInfo
.
sessionWin
.
win
.
ekey
);
doDeleteSessionWindow
(
pAggSup
,
&
winInfo
.
sessionWin
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
taosMemoryFree
(
winInfo
.
pOutputBuf
);
}
}
int32_t
saveSessionOutputBuf
(
SStreamAggSupporter
*
pAggSup
,
SResultWindowInfo
*
pWinInfo
)
{
saveSessionDiscBuf
(
pAggSup
->
pState
,
&
pWinInfo
->
sessionWin
,
pWinInfo
->
pOutputBuf
,
pAggSup
->
resultRowSize
,
&
pAggSup
->
stateStore
);
...
...
@@ -2081,6 +2106,7 @@ static void rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, SS
int32_t
code
=
getSessionWinBuf
(
pChAggSup
,
pCur
,
&
childWin
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
!
inWinRange
(
&
pAggSup
->
winRange
,
&
childWin
.
sessionWin
.
win
))
{
releaseOutputBuf
(
pAggSup
->
pState
,
NULL
,
(
SResultRow
*
)
childWin
.
pOutputBuf
,
&
pAggSup
->
stateStore
);
continue
;
}
...
...
@@ -2089,6 +2115,7 @@ static void rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, SS
setSessionOutputBuf
(
pAggSup
,
pWinKey
->
win
.
skey
,
pWinKey
->
win
.
ekey
,
pWinKey
->
groupId
,
&
parentWin
);
code
=
initSessionOutputBuf
(
&
parentWin
,
&
pResult
,
pSup
->
pCtx
,
numOfOutput
,
pSup
->
rowEntryInfoOffset
);
if
(
code
!=
TSDB_CODE_SUCCESS
||
pResult
==
NULL
)
{
releaseOutputBuf
(
pAggSup
->
pState
,
NULL
,
(
SResultRow
*
)
childWin
.
pOutputBuf
,
&
pAggSup
->
stateStore
);
break
;
}
}
...
...
@@ -2099,7 +2126,9 @@ static void rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, SS
compactFunctions
(
pSup
->
pCtx
,
pChild
->
exprSupp
.
pCtx
,
numOfOutput
,
pTaskInfo
,
&
pInfo
->
twAggSup
.
timeWindowData
);
compactSessionWindow
(
pOperator
,
&
parentWin
,
pStUpdated
,
NULL
,
true
);
saveResult
(
parentWin
,
pStUpdated
);
releaseOutputBuf
(
pAggSup
->
pState
,
NULL
,
(
SResultRow
*
)
childWin
.
pOutputBuf
,
&
pAggSup
->
stateStore
);
}
else
{
releaseOutputBuf
(
pAggSup
->
pState
,
NULL
,
(
SResultRow
*
)
childWin
.
pOutputBuf
,
&
pAggSup
->
stateStore
);
break
;
}
}
...
...
@@ -2474,13 +2503,11 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) {
}
void
streamSessionReleaseState
(
SOperatorInfo
*
pOperator
)
{
if
(
pOperator
->
operatorType
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION
)
{
SStreamSessionAggOperatorInfo
*
pInfo
=
pOperator
->
info
;
int32_t
resSize
=
taosArrayGetSize
(
pInfo
->
historyWins
)
*
sizeof
(
SSessionKey
);
pInfo
->
streamAggSup
.
stateStore
.
streamStateSaveInfo
(
pInfo
->
streamAggSup
.
pState
,
STREAM_SESSION_OP_STATE_NAME
,
strlen
(
STREAM_SESSION_OP_STATE_NAME
),
pInfo
->
historyWins
->
pData
,
resSize
);
}
SStreamSessionAggOperatorInfo
*
pInfo
=
pOperator
->
info
;
int32_t
resSize
=
taosArrayGetSize
(
pInfo
->
historyWins
)
*
sizeof
(
SSessionKey
);
pInfo
->
streamAggSup
.
stateStore
.
streamStateSaveInfo
(
pInfo
->
streamAggSup
.
pState
,
STREAM_SESSION_OP_STATE_NAME
,
strlen
(
STREAM_SESSION_OP_STATE_NAME
),
pInfo
->
historyWins
->
pData
,
resSize
);
SOperatorInfo
*
downstream
=
pOperator
->
pDownstream
[
0
];
if
(
downstream
->
fpSet
.
releaseStreamStateFn
)
{
downstream
->
fpSet
.
releaseStreamStateFn
(
downstream
);
...
...
@@ -2492,6 +2519,33 @@ void resetWinRange(STimeWindow* winRange) {
winRange
->
ekey
=
INT64_MAX
;
}
void
streamSessionSemiReloadState
(
SOperatorInfo
*
pOperator
)
{
SStreamSessionAggOperatorInfo
*
pInfo
=
pOperator
->
info
;
SStreamAggSupporter
*
pAggSup
=
&
pInfo
->
streamAggSup
;
resetWinRange
(
&
pAggSup
->
winRange
);
SResultWindowInfo
winInfo
=
{
0
};
int32_t
size
=
0
;
void
*
pBuf
=
NULL
;
int32_t
code
=
pAggSup
->
stateStore
.
streamStateGetInfo
(
pAggSup
->
pState
,
STREAM_SESSION_OP_STATE_NAME
,
strlen
(
STREAM_SESSION_OP_STATE_NAME
),
&
pBuf
,
&
size
);
int32_t
num
=
size
/
sizeof
(
SSessionKey
);
SSessionKey
*
pSeKeyBuf
=
(
SSessionKey
*
)
pBuf
;
ASSERT
(
size
==
num
*
sizeof
(
SSessionKey
));
for
(
int32_t
i
=
0
;
i
<
num
;
i
++
)
{
SResultWindowInfo
winInfo
=
{
0
};
setSessionOutputBuf
(
pAggSup
,
pSeKeyBuf
[
i
].
win
.
skey
,
pSeKeyBuf
[
i
].
win
.
ekey
,
pSeKeyBuf
[
i
].
groupId
,
&
winInfo
);
compactSessionSemiWindow
(
pOperator
,
&
winInfo
);
saveSessionOutputBuf
(
pAggSup
,
&
winInfo
);
}
taosMemoryFree
(
pBuf
);
SOperatorInfo
*
downstream
=
pOperator
->
pDownstream
[
0
];
if
(
downstream
->
fpSet
.
reloadStreamStateFn
)
{
downstream
->
fpSet
.
reloadStreamStateFn
(
downstream
);
}
}
void
streamSessionReloadState
(
SOperatorInfo
*
pOperator
)
{
SStreamSessionAggOperatorInfo
*
pInfo
=
pOperator
->
info
;
SStreamAggSupporter
*
pAggSup
=
&
pInfo
->
streamAggSup
;
...
...
@@ -2731,6 +2785,11 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) {
removeSessionResults
(
pInfo
->
pStDeleted
,
pInfo
->
pUpdated
);
tSimpleHashCleanup
(
pInfo
->
pStUpdated
);
pInfo
->
pStUpdated
=
NULL
;
if
(
pInfo
->
isHistoryOp
)
{
getMaxTsWins
(
pInfo
->
pUpdated
,
pInfo
->
historyWins
);
}
initGroupResInfoFromArrayList
(
&
pInfo
->
groupResInfo
,
pInfo
->
pUpdated
);
pInfo
->
pUpdated
=
NULL
;
blockDataEnsureCapacity
(
pBInfo
->
pRes
,
pOperator
->
resultInfo
.
capacity
);
...
...
@@ -2763,6 +2822,7 @@ SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream
if
(
pPhyNode
->
type
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION
)
{
pOperator
->
fpSet
=
createOperatorFpSet
(
optrDummyOpenFn
,
doStreamSessionSemiAgg
,
NULL
,
destroyStreamSessionAggOperatorInfo
,
optrDefaultBufFn
,
NULL
,
optrDefaultGetNextExtFn
,
NULL
);
setOperatorStreamStateFn
(
pOperator
,
streamSessionReleaseState
,
streamSessionSemiReloadState
);
}
setOperatorInfo
(
pOperator
,
getStreamOpName
(
pOperator
->
operatorType
),
pPhyNode
->
type
,
false
,
OP_NOT_OPENED
,
pInfo
,
pTaskInfo
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录