Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
4a939192
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
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看板
提交
4a939192
编写于
8月 17, 2023
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: select tags - ctb cursor pause/unlock and lock/resume
上级
27d7c659
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
84 addition
and
30 deletion
+84
-30
include/libs/executor/storageapi.h
include/libs/executor/storageapi.h
+5
-1
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+3
-1
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+57
-22
source/dnode/vnode/src/vnd/vnodeInitApi.c
source/dnode/vnode/src/vnd/vnodeInitApi.c
+2
-0
source/dnode/vnode/src/vnd/vnodeQuery.c
source/dnode/vnode/src/vnd/vnodeQuery.c
+3
-3
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+14
-3
未找到文件。
include/libs/executor/storageapi.h
浏览文件 @
4a939192
...
...
@@ -106,6 +106,8 @@ typedef struct SMCtbCursor {
void
*
pVal
;
int
kLen
;
int
vLen
;
int8_t
paused
;
int
lock
;
}
SMCtbCursor
;
typedef
struct
SRowBuffPos
{
...
...
@@ -295,7 +297,9 @@ int32_t vnodeGetCtbIdListByFilter(void *pVnode, int64_t suid, SArray *list, bool
int32_t vnodeGetStbIdList(void *pVnode, int64_t suid, SArray *list);
*/
SMCtbCursor
*
(
*
openCtbCursor
)(
void
*
pVnode
,
tb_uid_t
uid
,
int
lock
);
void
(
*
closeCtbCursor
)(
SMCtbCursor
*
pCtbCur
,
int
lock
);
int32_t
(
*
resumeCtbCursor
)(
SMCtbCursor
*
pCtbCur
,
int8_t
first
);
void
(
*
pauseCtbCursor
)(
SMCtbCursor
*
pCtbCur
);
void
(
*
closeCtbCursor
)(
SMCtbCursor
*
pCtbCur
);
tb_uid_t
(
*
ctbCursorNext
)(
SMCtbCursor
*
pCur
);
}
SStoreMeta
;
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
4a939192
...
...
@@ -168,7 +168,9 @@ int metaDropIndexFromSTable(SMeta* pMeta, int64_t version, SDropIndexReq* pReq);
int64_t
metaGetTimeSeriesNum
(
SMeta
*
pMeta
);
SMCtbCursor
*
metaOpenCtbCursor
(
void
*
pVnode
,
tb_uid_t
uid
,
int
lock
);
void
metaCloseCtbCursor
(
SMCtbCursor
*
pCtbCur
,
int
lock
);
int32_t
metaResumeCtbCursor
(
SMCtbCursor
*
pCtbCur
,
int8_t
first
);
void
metaPauseCtbCursor
(
SMCtbCursor
*
pCtbCur
);
void
metaCloseCtbCursor
(
SMCtbCursor
*
pCtbCur
);
tb_uid_t
metaCtbCursorNext
(
SMCtbCursor
*
pCtbCur
);
SMStbCursor
*
metaOpenStbCursor
(
SMeta
*
pMeta
,
tb_uid_t
uid
);
void
metaCloseStbCursor
(
SMStbCursor
*
pStbCur
);
...
...
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
4a939192
...
...
@@ -423,40 +423,75 @@ SMCtbCursor *metaOpenCtbCursor(void* pVnode, tb_uid_t uid, int lock) {
pCtbCur
->
pMeta
=
pMeta
;
pCtbCur
->
suid
=
uid
;
if
(
lock
)
{
metaRLock
(
pMeta
);
}
pCtbCur
->
lock
=
lock
;
pCtbCur
->
paused
=
1
;
ret
=
tdbTbcOpen
(
pMeta
->
pCtbIdx
,
(
TBC
**
)
&
pCtbCur
->
pCur
,
NULL
);
ret
=
metaResumeCtbCursor
(
pCtbCur
,
1
);
if
(
ret
<
0
)
{
metaULock
(
pMeta
);
taosMemoryFree
(
pCtbCur
);
return
NULL
;
}
return
pCtbCur
;
}
// move to the suid
ctbIdxKey
.
suid
=
uid
;
ctbIdxKey
.
uid
=
INT64_MIN
;
tdbTbcMoveTo
(
pCtbCur
->
pCur
,
&
ctbIdxKey
,
sizeof
(
ctbIdxKey
),
&
c
);
if
(
c
>
0
)
{
tdbTbcMoveToNext
(
pCtbCur
->
pCur
);
void
metaCloseCtbCursor
(
SMCtbCursor
*
pCtbCur
)
{
if
(
pCtbCur
)
{
if
(
!
pCtbCur
->
paused
)
{
if
(
pCtbCur
->
pMeta
&&
pCtbCur
->
lock
)
metaULock
(
pCtbCur
->
pMeta
);
if
(
pCtbCur
->
pCur
)
{
tdbTbcClose
(
pCtbCur
->
pCur
);
}
}
tdbFree
(
pCtbCur
->
pKey
);
tdbFree
(
pCtbCur
->
pVal
);
}
taosMemoryFree
(
pCtbCur
);
}
return
pCtbCur
;
void
metaPauseCtbCursor
(
SMCtbCursor
*
pCtbCur
)
{
if
(
!
pCtbCur
->
paused
)
{
tdbTbcClose
((
TBC
*
)
pCtbCur
->
pCur
);
if
(
pCtbCur
->
lock
)
{
metaULock
(
pCtbCur
->
pMeta
);
}
pCtbCur
->
paused
=
1
;
}
}
void
metaCloseCtbCursor
(
SMCtbCursor
*
pCtbCur
,
int
lock
)
{
if
(
pCtbCur
)
{
if
(
pCtbCur
->
pMeta
&&
lock
)
metaULock
(
pCtbCur
->
pMeta
);
if
(
pCtbCur
->
pCur
)
{
tdbTbcClose
(
pCtbCur
->
pCur
);
int32_t
metaResumeCtbCursor
(
SMCtbCursor
*
pCtbCur
,
int8_t
first
)
{
if
(
pCtbCur
->
paused
)
{
pCtbCur
->
paused
=
0
;
tdbFree
(
pCtbCur
->
pKey
);
tdbFree
(
pCtbCur
->
pVal
);
if
(
pCtbCur
->
lock
)
{
metaRLock
(
pCtbCur
->
pMeta
);
}
int
ret
=
0
;
ret
=
tdbTbcOpen
(
pCtbCur
->
pMeta
->
pCtbIdx
,
(
TBC
**
)
&
pCtbCur
->
pCur
,
NULL
);
if
(
ret
<
0
)
{
metaCloseCtbCursor
(
pCtbCur
);
return
-
1
;
}
taosMemoryFree
(
pCtbCur
);
if
(
first
)
{
SCtbIdxKey
ctbIdxKey
;
// move to the suid
ctbIdxKey
.
suid
=
pCtbCur
->
suid
;
ctbIdxKey
.
uid
=
INT64_MIN
;
int
c
=
0
;
tdbTbcMoveTo
(
pCtbCur
->
pCur
,
&
ctbIdxKey
,
sizeof
(
ctbIdxKey
),
&
c
);
if
(
c
>
0
)
{
tdbTbcMoveToNext
(
pCtbCur
->
pCur
);
}
}
else
{
int
c
=
0
;
ret
=
tdbTbcMoveTo
(
pCtbCur
->
pCur
,
pCtbCur
->
pKey
,
pCtbCur
->
kLen
,
&
c
);
if
(
c
<
0
)
{
tdbTbcMoveToPrev
(
pCtbCur
->
pCur
);
}
else
{
tdbTbcMoveToNext
(
pCtbCur
->
pCur
);
}
}
}
return
0
;
}
tb_uid_t
metaCtbCursorNext
(
SMCtbCursor
*
pCtbCur
)
{
...
...
@@ -1414,7 +1449,7 @@ int32_t metaGetTableTags(void *pVnode, uint64_t suid, SArray *pUidTagInfo) {
}
taosHashCleanup
(
pSepecifiedUidMap
);
metaCloseCtbCursor
(
pCur
,
1
);
metaCloseCtbCursor
(
pCur
);
return
TSDB_CODE_SUCCESS
;
}
...
...
source/dnode/vnode/src/vnd/vnodeInitApi.c
浏览文件 @
4a939192
...
...
@@ -98,6 +98,8 @@ void initMetadataAPI(SStoreMeta* pMeta) {
pMeta
->
metaPutTbGroupToCache
=
metaPutTbGroupToCache
;
pMeta
->
openCtbCursor
=
metaOpenCtbCursor
;
pMeta
->
resumeCtbCursor
=
metaResumeCtbCursor
;
pMeta
->
pauseCtbCursor
=
metaPauseCtbCursor
;
pMeta
->
closeCtbCursor
=
metaCloseCtbCursor
;
pMeta
->
ctbCursorNext
=
metaCtbCursorNext
;
}
...
...
source/dnode/vnode/src/vnd/vnodeQuery.c
浏览文件 @
4a939192
...
...
@@ -452,7 +452,7 @@ int32_t vnodeGetAllTableList(SVnode *pVnode, uint64_t uid, SArray *list) {
taosArrayPush
(
list
,
&
info
);
}
metaCloseCtbCursor
(
pCur
,
1
);
metaCloseCtbCursor
(
pCur
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -473,7 +473,7 @@ int32_t vnodeGetCtbIdList(void *pVnode, int64_t suid, SArray *list) {
taosArrayPush
(
list
,
&
id
);
}
metaCloseCtbCursor
(
pCur
,
1
);
metaCloseCtbCursor
(
pCur
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -536,7 +536,7 @@ int32_t vnodeGetCtbNum(SVnode *pVnode, int64_t suid, int64_t *num) {
++
(
*
num
);
}
metaCloseCtbCursor
(
pCur
,
0
);
metaCloseCtbCursor
(
pCur
);
return
TSDB_CODE_SUCCESS
;
}
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
4a939192
...
...
@@ -2863,12 +2863,14 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) {
if
(
pInfo
->
pCtbCursor
==
NULL
)
{
pInfo
->
pCtbCursor
=
pAPI
->
metaFn
.
openCtbCursor
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
suid
,
1
);
}
else
{
pAPI
->
metaFn
.
resumeCtbCursor
(
pInfo
->
pCtbCursor
,
0
);
}
SArray
*
aUidTags
=
pInfo
->
aUidTags
;
SArray
*
aFilterIdxs
=
pInfo
->
aFilterIdxs
;
int32_t
count
=
0
;
bool
ctbCursorFinished
=
false
;
while
(
1
)
{
taosArrayClearEx
(
aUidTags
,
tagScanFreeUidTag
);
taosArrayClear
(
aFilterIdxs
);
...
...
@@ -2878,6 +2880,7 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) {
SMCtbCursor
*
pCur
=
pInfo
->
pCtbCursor
;
tb_uid_t
uid
=
pAPI
->
metaFn
.
ctbCursorNext
(
pInfo
->
pCtbCursor
);
if
(
uid
==
0
)
{
ctbCursorFinished
=
true
;
break
;
}
STUidTagInfo
info
=
{.
uid
=
uid
,
.
pTagVal
=
pCur
->
pVal
};
...
...
@@ -2906,7 +2909,15 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) {
break
;
}
}
if
(
count
>
0
)
{
pAPI
->
metaFn
.
pauseCtbCursor
(
pInfo
->
pCtbCursor
);
}
if
(
count
==
0
||
ctbCursorFinished
)
{
pAPI
->
metaFn
.
closeCtbCursor
(
pInfo
->
pCtbCursor
);
pInfo
->
pCtbCursor
=
NULL
;
setOperatorCompleted
(
pOperator
);
}
pRes
->
info
.
rows
=
count
;
pOperator
->
resultInfo
.
totalRows
+=
count
;
return
(
pRes
->
info
.
rows
==
0
)
?
NULL
:
pInfo
->
pRes
;
...
...
@@ -2971,7 +2982,7 @@ static SSDataBlock* doTagScanFromMetaEntry(SOperatorInfo* pOperator) {
static
void
destroyTagScanOperatorInfo
(
void
*
param
)
{
STagScanInfo
*
pInfo
=
(
STagScanInfo
*
)
param
;
if
(
pInfo
->
pCtbCursor
!=
NULL
)
{
pInfo
->
pStorageAPI
->
metaFn
.
closeCtbCursor
(
pInfo
->
pCtbCursor
,
1
);
pInfo
->
pStorageAPI
->
metaFn
.
closeCtbCursor
(
pInfo
->
pCtbCursor
);
}
taosHashCleanup
(
pInfo
->
filterCtx
.
colHash
);
taosArrayDestroy
(
pInfo
->
filterCtx
.
cInfoList
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录