Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
84c1eb3c
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1185
Star
22015
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,发现更多精彩内容 >>
提交
84c1eb3c
编写于
2月 29, 2020
作者:
H
hjxilinx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix bugs in regression test(degenerated cases, committed blocks are ignored in get cache blocks).
上级
819b4c61
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
5 deletion
+21
-5
src/system/detail/src/vnodeQueryImpl.c
src/system/detail/src/vnodeQueryImpl.c
+21
-5
未找到文件。
src/system/detail/src/vnodeQueryImpl.c
浏览文件 @
84c1eb3c
...
...
@@ -1057,7 +1057,7 @@ void savePointPosition(SPositionInfo *position, int32_t fileId, int32_t slot, in
position
->
pos
=
pos
;
}
bool
isCacheBlockValid
(
SQuery
*
pQuery
,
SCacheBlock
*
pBlock
,
SMeterObj
*
pMeterObj
)
{
bool
isCacheBlockValid
(
SQuery
*
pQuery
,
SCacheBlock
*
pBlock
,
SMeterObj
*
pMeterObj
,
int32_t
slot
)
{
if
(
pMeterObj
!=
pBlock
->
pMeterObj
||
pBlock
->
blockId
>
pQuery
->
blockId
)
{
SMeterObj
*
pNewMeterObj
=
pBlock
->
pMeterObj
;
char
*
id
=
(
pNewMeterObj
!=
NULL
)
?
pNewMeterObj
->
meterId
:
NULL
;
...
...
@@ -1081,11 +1081,19 @@ bool isCacheBlockValid(SQuery *pQuery, SCacheBlock *pBlock, SMeterObj *pMeterObj
dWarn
(
"QInfo:%p vid:%d sid:%d id:%s, cache block is empty. slot:%d first:%d, last:%d, numOfBlocks:%d,"
"allocated but not write data yet."
,
GET_QINFO_ADDR
(
pQuery
),
pMeterObj
->
vnode
,
pMeterObj
->
sid
,
pMeterObj
->
meterId
,
pQuery
->
slot
,
pQuery
->
firstSlot
,
GET_QINFO_ADDR
(
pQuery
),
pMeterObj
->
vnode
,
pMeterObj
->
sid
,
pMeterObj
->
meterId
,
slot
,
pQuery
->
firstSlot
,
pQuery
->
currentSlot
,
pQuery
->
numOfBlocks
);
return
false
;
}
SCacheInfo
*
pCacheInfo
=
(
SCacheInfo
*
)
pMeterObj
->
pCache
;
if
(
pCacheInfo
->
commitPoint
==
pMeterObj
->
pointsPerBlock
&&
pQuery
->
slot
==
pCacheInfo
->
currentSlot
)
{
dWarn
(
"QInfo:%p vid:%d sid:%d id:%s, cache block is committed, ignore. slot:%d first:%d, last:%d, numOfBlocks:%d"
,
GET_QINFO_ADDR
(
pQuery
),
pMeterObj
->
vnode
,
pMeterObj
->
sid
,
pMeterObj
->
meterId
,
slot
,
pQuery
->
firstSlot
,
pQuery
->
currentSlot
,
pQuery
->
numOfBlocks
);
return
false
;
}
return
true
;
}
...
...
@@ -1117,7 +1125,7 @@ SCacheBlock *getCacheDataBlock(SMeterObj *pMeterObj, SQueryRuntimeEnv *pRuntimeE
}
// block is empty or block does not belongs to current table, return NULL value
if
(
!
isCacheBlockValid
(
pQuery
,
pBlock
,
pMeterObj
))
{
if
(
!
isCacheBlockValid
(
pQuery
,
pBlock
,
pMeterObj
,
slot
))
{
return
NULL
;
}
...
...
@@ -1203,7 +1211,7 @@ SCacheBlock *getCacheDataBlock(SMeterObj *pMeterObj, SQueryRuntimeEnv *pRuntimeE
pQuery
->
fileId
=
-
1
;
pQuery
->
slot
=
slot
;
if
(
!
isCacheBlockValid
(
pQuery
,
pNewBlock
,
pMeterObj
))
{
if
(
!
isCacheBlockValid
(
pQuery
,
pNewBlock
,
pMeterObj
,
slot
))
{
return
NULL
;
}
...
...
@@ -1621,6 +1629,11 @@ static void doCheckQueryCompleted(SQueryRuntimeEnv *pRuntimeEnv, TSKEY lastKey,
if
(
pRuntimeEnv
->
scanFlag
!=
MASTER_SCAN
||
(
!
isIntervalQuery
(
pQuery
)))
{
return
;
}
// no qualified results exist, abort check
if
(
pWindowResInfo
->
size
==
0
)
{
return
;
}
// query completed
if
((
lastKey
>=
pQuery
->
ekey
&&
QUERY_IS_ASC_QUERY
(
pQuery
))
||
...
...
@@ -4134,13 +4147,14 @@ static bool forwardQueryStartPosIfNeeded(SQInfo *pQInfo, STableQuerySupportObj *
tw
=
win
;
int32_t
startPos
=
getNextQualifiedWindow
(
pRuntimeEnv
,
&
tw
,
pWindowResInfo
,
&
blockInfo
,
primaryKey
,
searchFn
);
assert
(
startPos
>
0
);
assert
(
startPos
>
=
0
);
pQuery
->
limit
.
offset
-=
1
;
// set the abort info
pQuery
->
pos
=
startPos
;
pQuery
->
lastKey
=
primaryKey
[
startPos
];
pWindowResInfo
->
prevSKey
=
tw
.
skey
;
win
=
tw
;
continue
;
}
else
{
...
...
@@ -4176,6 +4190,8 @@ static bool forwardQueryStartPosIfNeeded(SQInfo *pQInfo, STableQuerySupportObj *
// set the abort info
pQuery
->
pos
=
QUERY_IS_ASC_QUERY
(
pQuery
)
?
0
:
blockInfo
.
size
-
1
;
pQuery
->
lastKey
=
QUERY_IS_ASC_QUERY
(
pQuery
)
?
blockInfo
.
keyFirst
:
blockInfo
.
keyLast
;
pWindowResInfo
->
prevSKey
=
n
.
skey
;
win
=
n
;
if
(
pQuery
->
limit
.
offset
==
0
&&
IS_DISK_DATA_BLOCK
(
pQuery
))
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录