Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
58c5d5e7
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
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看板
提交
58c5d5e7
编写于
7月 20, 2023
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: group cache block cache issue
上级
b9b8fa1b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
42 addition
and
27 deletion
+42
-27
source/libs/executor/inc/groupcache.h
source/libs/executor/inc/groupcache.h
+7
-2
source/libs/executor/src/groupcacheoperator.c
source/libs/executor/src/groupcacheoperator.c
+35
-25
未找到文件。
source/libs/executor/inc/groupcache.h
浏览文件 @
58c5d5e7
...
...
@@ -46,6 +46,11 @@ typedef struct SGroupSeqBlkList {
int64_t
endBlkId
;
}
SGroupSeqBlkList
;
typedef
struct
SGroupBatchBlkList
{
SRWLatch
lock
;
SArray
*
pBlkList
;
}
SGroupBatchBlkList
;
typedef
struct
SGroupCacheData
{
TdThreadMutex
mutex
;
SArray
*
waitQueue
;
...
...
@@ -55,8 +60,8 @@ typedef struct SGroupCacheData {
int32_t
downstreamIdx
;
int32_t
vgId
;
union
{
SGroupSeqBlkList
blk
List
;
S
Array
*
pBlk
List
;
SGroupSeqBlkList
seq
List
;
S
GroupBatchBlkList
batch
List
;
};
uint32_t
fileId
;
int64_t
startOffset
;
...
...
source/libs/executor/src/groupcacheoperator.c
浏览文件 @
58c5d5e7
...
...
@@ -219,6 +219,8 @@ static int32_t retrieveBlkFromBufCache(SGroupCacheOperatorInfo* pGCache, SGroupC
//TODO READ FROM FILE
code
=
TSDB_CODE_INVALID_PARA
;
qError
(
"block %"
PRId64
"not found in dirty block list"
,
blkId
);
return
code
;
}
...
...
@@ -369,10 +371,10 @@ static FORCE_INLINE void initNewGroupData(SGcDownstreamCtx* pCtx, SGroupCacheDat
pGroup
->
vgId
=
vgId
;
pGroup
->
fileId
=
-
1
;
if
(
batchFetch
)
{
pGroup
->
pBlkList
=
taosArrayInit
(
10
,
POINTER_BYTES
);
pGroup
->
batchList
.
pBlkList
=
taosArrayInit
(
10
,
POINTER_BYTES
);
}
else
{
pGroup
->
blk
List
.
startBlkId
=
-
1
;
pGroup
->
blk
List
.
endBlkId
=
-
1
;
pGroup
->
seq
List
.
startBlkId
=
-
1
;
pGroup
->
seq
List
.
endBlkId
=
-
1
;
}
pGroup
->
startOffset
=
-
1
;
...
...
@@ -422,19 +424,21 @@ static int32_t addNewGroupData(struct SOperatorInfo* pOperator, SOperatorParam*
static
int32_t
addBlkToGroupCache
(
bool
batchFetch
,
SGroupCacheData
*
pGroup
,
SGcBlkBufInfo
*
pNewBlk
)
{
if
(
batchFetch
)
{
taosArrayPush
(
pGroup
->
pBlkList
,
&
pNewBlk
->
blkId
);
qError
(
"block added to group cache, total block num:%"
PRId64
,
(
int64_t
)
taosArrayGetSize
(
pGroup
->
pBlkList
));
taosWLockLatch
(
&
pGroup
->
batchList
.
lock
);
taosArrayPush
(
pGroup
->
batchList
.
pBlkList
,
&
pNewBlk
->
blkId
);
qError
(
"block added to group cache, total block num:%"
PRId64
,
(
int64_t
)
taosArrayGetSize
(
pGroup
->
batchList
.
pBlkList
));
taosWUnLockLatch
(
&
pGroup
->
batchList
.
lock
);
return
TSDB_CODE_SUCCESS
;
}
if
(
pGroup
->
blk
List
.
endBlkId
>
0
)
{
pGroup
->
blkList
.
endBlkId
=
pNewBlk
->
blkId
;
if
(
pGroup
->
seq
List
.
endBlkId
>
0
)
{
atomic_store_64
(
&
pGroup
->
seqList
.
endBlkId
,
pNewBlk
->
blkId
)
;
}
else
{
pGroup
->
blkList
.
startBlkId
=
pNewBlk
->
blkId
;
pGroup
->
blkList
.
endBlkId
=
pNewBlk
->
blkId
;
atomic_store_64
(
&
pGroup
->
seqList
.
startBlkId
,
pNewBlk
->
blkId
)
;
atomic_store_64
(
&
pGroup
->
seqList
.
endBlkId
,
pNewBlk
->
blkId
)
;
}
qError
(
"block added to group cache, total block num:%"
PRId64
,
pGroup
->
blkList
.
endBlkId
-
pGroup
->
blk
List
.
startBlkId
+
1
);
qError
(
"block added to group cache, total block num:%"
PRId64
,
pGroup
->
seqList
.
endBlkId
-
pGroup
->
seq
List
.
startBlkId
+
1
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -568,32 +572,38 @@ static int32_t getBlkFromSessionCacheImpl(struct SOperatorInfo* pOperator, int64
*
got
=
true
;
if
(
pGCache
->
batchFetch
)
{
SGroupBatchBlkList
*
pBatchList
=
&
pSession
->
pGroupData
->
batchList
;
taosRLockLatch
(
&
pBatchList
->
lock
);
int64_t
blkNum
=
taosArrayGetSize
(
pBatchList
->
pBlkList
);
if
(
pSession
->
lastBlkId
<
0
)
{
if
(
taosArrayGetSize
(
pSession
->
pGroupData
->
pBlkList
)
>
0
)
{
int64_t
*
pIdx
=
taosArrayGet
(
pSession
->
pGroupData
->
pBlkList
,
0
);
if
(
blkNum
>
0
)
{
int64_t
*
pIdx
=
taosArrayGet
(
pBatchList
->
pBlkList
,
0
);
taosRUnLockLatch
(
&
pBatchList
->
lock
);
code
=
retrieveBlkFromBufCache
(
pGCache
,
pSession
->
pGroupData
,
sessionId
,
*
pIdx
,
&
pSession
->
nextOffset
,
ppRes
);
pSession
->
lastBlkId
=
*
pIdx
;
return
code
;
}
}
else
if
(
pSession
->
lastBlkId
<
taosArrayGetSize
(
pSession
->
pGroupData
->
pBlkList
))
{
int64_t
*
pIdx
=
taosArrayGet
(
pSession
->
pGroupData
->
pBlkList
,
pSession
->
lastBlkId
+
1
);
}
else
if
(
pSession
->
lastBlkId
<
blkNum
)
{
int64_t
*
pIdx
=
taosArrayGet
(
pBatchList
->
pBlkList
,
pSession
->
lastBlkId
+
1
);
taosRUnLockLatch
(
&
pBatchList
->
lock
);
code
=
retrieveBlkFromBufCache
(
pGCache
,
pSession
->
pGroupData
,
sessionId
,
*
pIdx
,
&
pSession
->
nextOffset
,
ppRes
);
pSession
->
lastBlkId
++
;
return
code
;
}
}
if
(
pSession
->
lastBlkId
<
0
)
{
int64_t
startBlkId
=
atomic_load_64
(
&
pSession
->
pGroupData
->
blkList
.
startBlkId
);
if
(
startBlkId
>
0
)
{
code
=
retrieveBlkFromBufCache
(
pGCache
,
pSession
->
pGroupData
,
sessionId
,
startBlkId
,
&
pSession
->
nextOffset
,
ppRes
);
pSession
->
lastBlkId
=
startBlkId
;
taosRUnLockLatch
(
&
pBatchList
->
lock
);
}
else
{
if
(
pSession
->
lastBlkId
<
0
)
{
int64_t
startBlkId
=
atomic_load_64
(
&
pSession
->
pGroupData
->
seqList
.
startBlkId
);
if
(
startBlkId
>
0
)
{
code
=
retrieveBlkFromBufCache
(
pGCache
,
pSession
->
pGroupData
,
sessionId
,
startBlkId
,
&
pSession
->
nextOffset
,
ppRes
);
pSession
->
lastBlkId
=
startBlkId
;
return
code
;
}
}
else
if
(
pSession
->
lastBlkId
<
atomic_load_64
(
&
pSession
->
pGroupData
->
seqList
.
endBlkId
))
{
code
=
retrieveBlkFromBufCache
(
pGCache
,
pSession
->
pGroupData
,
sessionId
,
pSession
->
lastBlkId
+
1
,
&
pSession
->
nextOffset
,
ppRes
);
pSession
->
lastBlkId
++
;
return
code
;
}
}
else
if
(
pSession
->
lastBlkId
<
atomic_load_64
(
&
pSession
->
pGroupData
->
blkList
.
endBlkId
))
{
code
=
retrieveBlkFromBufCache
(
pGCache
,
pSession
->
pGroupData
,
sessionId
,
pSession
->
lastBlkId
+
1
,
&
pSession
->
nextOffset
,
ppRes
);
pSession
->
lastBlkId
++
;
return
code
;
}
if
(
atomic_load_8
((
int8_t
*
)
&
pSession
->
pGroupData
->
fetchDone
))
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录