Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
1d5f431d
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看板
提交
1d5f431d
编写于
6月 17, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/3.0' into fix/tsim
上级
7f046953
f78e3294
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
2595 addition
and
557 deletion
+2595
-557
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+7
-3
tests/system-test/2-query/distribute_agg_apercentile.py
tests/system-test/2-query/distribute_agg_apercentile.py
+198
-0
tests/system-test/2-query/distribute_agg_count.py
tests/system-test/2-query/distribute_agg_count.py
+296
-0
tests/system-test/2-query/distribute_agg_max.py
tests/system-test/2-query/distribute_agg_max.py
+293
-0
tests/system-test/2-query/distribute_agg_min.py
tests/system-test/2-query/distribute_agg_min.py
+294
-0
tests/system-test/2-query/distribute_agg_spread.py
tests/system-test/2-query/distribute_agg_spread.py
+281
-0
tests/system-test/2-query/distribute_agg_sum.py
tests/system-test/2-query/distribute_agg_sum.py
+278
-0
tests/system-test/2-query/max.py
tests/system-test/2-query/max.py
+187
-170
tests/system-test/7-tmq/basic5.py
tests/system-test/7-tmq/basic5.py
+2
-2
tests/system-test/7-tmq/subscribeDb0.py
tests/system-test/7-tmq/subscribeDb0.py
+0
-172
tests/system-test/7-tmq/subscribeDb1.py
tests/system-test/7-tmq/subscribeDb1.py
+68
-210
tests/system-test/7-tmq/subscribeDb2.py
tests/system-test/7-tmq/subscribeDb2.py
+347
-0
tests/system-test/7-tmq/subscribeDb3.py
tests/system-test/7-tmq/subscribeDb3.py
+337
-0
tests/system-test/fulltest.sh
tests/system-test/fulltest.sh
+6
-0
tools/taosadapter
tools/taosadapter
+1
-0
未找到文件。
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
1d5f431d
...
@@ -111,7 +111,7 @@ int32_t tsdbBegin(STsdb *pTsdb) {
...
@@ -111,7 +111,7 @@ int32_t tsdbBegin(STsdb *pTsdb) {
int32_t
tsdbCommit
(
STsdb
*
pTsdb
)
{
int32_t
tsdbCommit
(
STsdb
*
pTsdb
)
{
if
(
!
pTsdb
)
return
0
;
if
(
!
pTsdb
)
return
0
;
int32_t
code
=
0
;
int32_t
code
=
0
;
SCommitH
commith
=
{
0
};
SCommitH
commith
=
{
0
};
SDFileSet
*
pSet
=
NULL
;
SDFileSet
*
pSet
=
NULL
;
...
@@ -495,7 +495,9 @@ static int32_t tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
...
@@ -495,7 +495,9 @@ static int32_t tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
break
;
break
;
}
}
if
(
pIter
&&
pIter
->
pTable
&&
(
!
pIdx
||
(
pIter
->
pTable
->
suid
<=
pIdx
->
suid
||
pIter
->
pTable
->
uid
<=
pIdx
->
uid
)))
{
if
(
pIter
&&
pIter
->
pTable
&&
(
!
pIdx
||
((
pIter
->
pTable
->
suid
<
pIdx
->
suid
)
||
((
pIter
->
pTable
->
suid
==
pIdx
->
suid
)
&&
(
pIter
->
pTable
->
uid
<=
pIdx
->
uid
)))))
{
if
(
tsdbCommitToTable
(
pCommith
,
mIter
)
<
0
)
{
if
(
tsdbCommitToTable
(
pCommith
,
mIter
)
<
0
)
{
tsdbCloseCommitFile
(
pCommith
,
true
);
tsdbCloseCommitFile
(
pCommith
,
true
);
// revert the file change
// revert the file change
...
@@ -503,7 +505,7 @@ static int32_t tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
...
@@ -503,7 +505,7 @@ static int32_t tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
return
-
1
;
return
-
1
;
}
}
if
(
pIdx
&&
(
pIter
->
pTable
->
uid
==
pIdx
->
uid
))
{
if
(
pIdx
&&
(
(
pIter
->
pTable
->
uid
==
pIdx
->
uid
)
&&
(
pIter
->
pTable
->
suid
==
pIdx
->
suid
)
))
{
++
fIter
;
++
fIter
;
}
}
++
mIter
;
++
mIter
;
...
@@ -518,6 +520,8 @@ static int32_t tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
...
@@ -518,6 +520,8 @@ static int32_t tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
return
-
1
;
return
-
1
;
}
}
++
fIter
;
++
fIter
;
}
else
{
ASSERT
(
0
);
}
}
}
}
...
...
tests/system-test/2-query/distribute_agg_apercentile.py
0 → 100644
浏览文件 @
1d5f431d
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
import
numpy
as
np
import
random
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
vnode_disbutes
=
None
self
.
ts
=
1537146000000
def
prepare_datas_of_distribute
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
tdSql
.
execute
(
'''
create table t1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
'''
)
for
i
in
range
(
20
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
for
i
in
range
(
9
):
tdSql
.
execute
(
f
"insert into ct1 values ( now()-
{
i
*
10
}
s,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
tdSql
.
execute
(
f
"insert into ct4 values ( now()-
{
i
*
90
}
d,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
for
i
in
range
(
1
,
21
):
if
i
==
1
or
i
==
4
:
continue
else
:
tbname
=
"ct"
+
f
'
{
i
}
'
for
j
in
range
(
9
):
tdSql
.
execute
(
f
"insert into
{
tbname
}
values ( now()-
{
(
i
+
j
)
*
10
}
s,
{
1
*
(
j
+
i
)
}
,
{
11111
*
(
j
+
i
)
}
,
{
111
*
(
j
+
i
)
}
,
{
11
*
(
j
)
}
,
{
1.11
*
(
j
+
i
)
}
,
{
11.11
*
(
j
+
i
)
}
,
{
(
j
+
i
)
%
2
}
, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
f
'''insert into t1 values
( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
'''
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
def
check_distribute_datas
(
self
):
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
self
.
vnode_disbutes
=
vnode_tables
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
def
distribute_agg_query
(
self
):
# basic filter
tdSql
.
query
(
"select apercentile(c1 , 20) from stb1 where c1 is null"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select apercentile(c1 , 20) from stb1 where t1=1"
)
tdSql
.
checkData
(
0
,
0
,
2.800000000
)
tdSql
.
query
(
"select apercentile(c1+c2 ,100) from stb1 where c1 =1 "
)
tdSql
.
checkData
(
0
,
0
,
11112.000000000
)
tdSql
.
query
(
"select apercentile(c1 ,10 ) from stb1 where tbname=
\"
ct2
\"
"
)
tdSql
.
checkData
(
0
,
0
,
2.000000000
)
tdSql
.
query
(
"select apercentile(c1,20) from stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select apercentile(c1,20) from stb1 where t1> 4 partition by tbname"
)
tdSql
.
checkRows
(
15
)
# union all
tdSql
.
query
(
"select apercentile(c1,20) from stb1 union all select apercentile(c1,20) from stb1 "
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
7.389181281
)
# join
tdSql
.
execute
(
" create database if not exists db "
)
tdSql
.
execute
(
" use db "
)
tdSql
.
execute
(
" create stable st (ts timestamp , c1 int ,c2 float) tags(t1 int) "
)
tdSql
.
execute
(
" create table tb1 using st tags(1) "
)
tdSql
.
execute
(
" create table tb2 using st tags(2) "
)
for
i
in
range
(
10
):
ts
=
i
*
10
+
self
.
ts
tdSql
.
execute
(
f
" insert into tb1 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
execute
(
f
" insert into tb2 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
query
(
"select apercentile(tb1.c1,100), apercentile(tb2.c2,100) from tb1, tb2 where tb1.ts=tb2.ts"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
9.000000000
)
tdSql
.
checkData
(
0
,
0
,
9.000000000
)
# group by
tdSql
.
execute
(
" use testdb "
)
tdSql
.
query
(
" select max(c1),c1 from stb1 group by t1 "
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
" select max(c1),c1 from stb1 group by c1 "
)
tdSql
.
checkRows
(
30
)
tdSql
.
query
(
" select max(c1),c2 from stb1 group by c2 "
)
tdSql
.
checkRows
(
31
)
# partition by tbname or partition by tag
tdSql
.
query
(
"select apercentile(c1 ,10)from stb1 partition by tbname"
)
query_data
=
tdSql
.
queryResult
# nest query for support max
tdSql
.
query
(
"select apercentile(c2+2,10)+1 from (select max(c1) c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
31.000000000
)
tdSql
.
query
(
"select apercentile(c1+2,10)+1 as c2 from (select ts ,c1 ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
7.560701700
)
tdSql
.
query
(
"select apercentile(a+2,10)+1 as c2 from (select ts ,abs(c1) a ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
7.560701700
)
# mixup with other functions
tdSql
.
query
(
"select max(c1),count(c1),last(c2,c3),spread(c1), apercentile(c1,10) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
28
)
tdSql
.
checkData
(
0
,
1
,
184
)
tdSql
.
checkData
(
0
,
2
,
-
99999
)
tdSql
.
checkData
(
0
,
3
,
-
999
)
tdSql
.
checkData
(
0
,
4
,
28.000000000
)
tdSql
.
checkData
(
0
,
5
,
4.560701700
)
def
run
(
self
):
self
.
prepare_datas_of_distribute
()
self
.
check_distribute_datas
()
self
.
distribute_agg_query
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/2-query/distribute_agg_count.py
0 → 100644
浏览文件 @
1d5f431d
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
import
numpy
as
np
import
random
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
vnode_disbutes
=
None
self
.
ts
=
1537146000000
def
check_count_functions
(
self
,
tbname
,
col_name
):
max_sql
=
f
"select count(
{
col_name
}
) from
{
tbname
}
;"
same_sql
=
f
"select sum(c) from (select
{
col_name
}
,1 as c from
{
tbname
}
where
{
col_name
}
is not null) "
tdSql
.
query
(
max_sql
)
max_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
max_result
!=
same_result
:
tdLog
.
exit
(
" count function work not as expected, sql : %s "
%
max_sql
)
else
:
tdLog
.
info
(
" count function work as expected, sql : %s "
%
max_sql
)
def
prepare_datas_of_distribute
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
tdSql
.
execute
(
'''
create table t1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
'''
)
for
i
in
range
(
20
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
for
i
in
range
(
9
):
tdSql
.
execute
(
f
"insert into ct1 values ( now()-
{
i
*
10
}
s,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
tdSql
.
execute
(
f
"insert into ct4 values ( now()-
{
i
*
90
}
d,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
for
i
in
range
(
1
,
21
):
if
i
==
1
or
i
==
4
:
continue
else
:
tbname
=
"ct"
+
f
'
{
i
}
'
for
j
in
range
(
9
):
tdSql
.
execute
(
f
"insert into
{
tbname
}
values ( now()-
{
(
i
+
j
)
*
10
}
s,
{
1
*
(
j
+
i
)
}
,
{
11111
*
(
j
+
i
)
}
,
{
111
*
(
j
+
i
)
}
,
{
11
*
(
j
)
}
,
{
1.11
*
(
j
+
i
)
}
,
{
11.11
*
(
j
+
i
)
}
,
{
(
j
+
i
)
%
2
}
, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
f
'''insert into t1 values
( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
'''
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
def
check_distribute_datas
(
self
):
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
self
.
vnode_disbutes
=
vnode_tables
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
def
check_count_distribute_diff_vnode
(
self
,
col_name
):
vgroup_ids
=
[]
for
k
,
v
in
self
.
vnode_disbutes
.
items
():
if
len
(
v
)
>=
2
:
vgroup_ids
.
append
(
k
)
distribute_tbnames
=
[]
for
vgroup_id
in
vgroup_ids
:
vnode_tables
=
self
.
vnode_disbutes
[
vgroup_id
]
distribute_tbnames
.
append
(
random
.
sample
(
vnode_tables
,
1
)[
0
])
tbname_ins
=
""
for
tbname
in
distribute_tbnames
:
tbname_ins
+=
"'%s' ,"
%
tbname
tbname_filters
=
tbname_ins
[:
-
1
]
max_sql
=
f
"select count(
{
col_name
}
) from stb1 where tbname in (
{
tbname_filters
}
);"
same_sql
=
f
"select sum(c) from (select
{
col_name
}
,1 as c from stb1 where tbname in (
{
tbname_filters
}
) and
{
col_name
}
is not null) "
tdSql
.
query
(
max_sql
)
max_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
max_result
!=
same_result
:
tdLog
.
exit
(
" count function work not as expected, sql : %s "
%
max_sql
)
else
:
tdLog
.
info
(
" count function work as expected, sql : %s "
%
max_sql
)
def
check_count_status
(
self
):
# check max function work status
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
tablenames
.
append
(
table_name
[
0
])
tdSql
.
query
(
"desc stb1"
)
col_names
=
tdSql
.
queryResult
colnames
=
[]
for
col_name
in
col_names
:
if
col_name
[
1
]
in
[
"INT"
,
"BIGINT"
,
"SMALLINT"
,
"TINYINT"
,
"FLOAT"
,
"DOUBLE"
]:
colnames
.
append
(
col_name
[
0
])
for
tablename
in
tablenames
:
for
colname
in
colnames
:
self
.
check_count_functions
(
tablename
,
colname
)
# check max function for different vnode
for
colname
in
colnames
:
if
colname
.
startswith
(
"c"
):
self
.
check_count_distribute_diff_vnode
(
colname
)
else
:
# self.check_count_distribute_diff_vnode(colname) # bug for tag
pass
def
distribute_agg_query
(
self
):
# basic filter
tdSql
.
query
(
"select count(c1) from stb1 "
)
tdSql
.
checkData
(
0
,
0
,
184
)
tdSql
.
query
(
"select count(c1) from stb1 where t1=1"
)
tdSql
.
checkData
(
0
,
0
,
9
)
tdSql
.
query
(
"select count(c1+c2) from stb1 where c1 =1 "
)
tdSql
.
checkData
(
0
,
0
,
2
)
tdSql
.
query
(
"select count(c1) from stb1 where tbname=
\"
ct2
\"
"
)
tdSql
.
checkData
(
0
,
0
,
9
)
tdSql
.
query
(
"select count(c1) from stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select count(c1) from stb1 where t1> 4 partition by tbname"
)
tdSql
.
checkRows
(
15
)
# union all
tdSql
.
query
(
"select count(c1) from stb1 union all select count(c1) from stb1 "
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
184
)
# join
tdSql
.
execute
(
" create database if not exists db "
)
tdSql
.
execute
(
" use db "
)
tdSql
.
execute
(
" create stable st (ts timestamp , c1 int ,c2 float) tags(t1 int) "
)
tdSql
.
execute
(
" create table tb1 using st tags(1) "
)
tdSql
.
execute
(
" create table tb2 using st tags(2) "
)
for
i
in
range
(
10
):
ts
=
i
*
10
+
self
.
ts
tdSql
.
execute
(
f
" insert into tb1 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
execute
(
f
" insert into tb2 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
query
(
"select count(tb1.c1), count(tb2.c2) from tb1, tb2 where tb1.ts=tb2.ts"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
checkData
(
0
,
1
,
10
)
# group by
tdSql
.
execute
(
" use testdb "
)
tdSql
.
query
(
" select count(*) from stb1 "
)
tdSql
.
checkData
(
0
,
0
,
187
)
tdSql
.
query
(
" select count(*) from stb1 group by t1 "
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
" select count(*) from stb1 group by c1 "
)
tdSql
.
checkRows
(
30
)
tdSql
.
query
(
" select count(*) from stb1 group by c2 "
)
tdSql
.
checkRows
(
31
)
# partition by tbname or partition by tag
tdSql
.
query
(
"select max(c1),tbname from stb1 partition by tbname"
)
query_data
=
tdSql
.
queryResult
for
row
in
query_data
:
tbname
=
row
[
1
]
tdSql
.
query
(
" select max(c1) from %s "
%
tbname
)
tdSql
.
checkData
(
0
,
0
,
row
[
0
])
tdSql
.
query
(
"select max(c1),tbname from stb1 partition by t1"
)
query_data
=
tdSql
.
queryResult
for
row
in
query_data
:
tbname
=
row
[
1
]
tdSql
.
query
(
" select max(c1) from %s "
%
tbname
)
tdSql
.
checkData
(
0
,
0
,
row
[
0
])
# nest query for support max
tdSql
.
query
(
"select abs(c2+2)+1 from (select count(c1) c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
187.000000000
)
tdSql
.
query
(
"select count(c1+2) as c2 from (select ts ,c1 ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
184
)
tdSql
.
query
(
"select count(a+2) as c2 from (select ts ,abs(c1) a ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
184
)
# mixup with other functions
tdSql
.
query
(
"select max(c1),count(c1),last(c2,c3) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
28
)
tdSql
.
checkData
(
0
,
1
,
184
)
tdSql
.
checkData
(
0
,
2
,
-
99999
)
tdSql
.
checkData
(
0
,
3
,
-
999
)
def
run
(
self
):
self
.
prepare_datas_of_distribute
()
self
.
check_distribute_datas
()
self
.
check_count_status
()
self
.
distribute_agg_query
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/2-query/distribute_agg_max.py
0 → 100644
浏览文件 @
1d5f431d
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
import
numpy
as
np
import
random
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
vnode_disbutes
=
None
self
.
ts
=
1537146000000
def
check_max_functions
(
self
,
tbname
,
col_name
):
max_sql
=
f
"select max(
{
col_name
}
) from
{
tbname
}
;"
same_sql
=
f
"select
{
col_name
}
from
{
tbname
}
order by
{
col_name
}
desc limit 1"
tdSql
.
query
(
max_sql
)
max_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
max_result
!=
same_result
:
tdLog
.
exit
(
" max function work not as expected, sql : %s "
%
max_sql
)
else
:
tdLog
.
info
(
" max function work as expected, sql : %s "
%
max_sql
)
def
prepare_datas_of_distribute
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
tdSql
.
execute
(
'''
create table t1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
'''
)
for
i
in
range
(
20
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
for
i
in
range
(
9
):
tdSql
.
execute
(
f
"insert into ct1 values ( now()-
{
i
*
10
}
s,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
tdSql
.
execute
(
f
"insert into ct4 values ( now()-
{
i
*
90
}
d,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
for
i
in
range
(
1
,
21
):
if
i
==
1
or
i
==
4
:
continue
else
:
tbname
=
"ct"
+
f
'
{
i
}
'
for
j
in
range
(
9
):
tdSql
.
execute
(
f
"insert into
{
tbname
}
values ( now()-
{
(
i
+
j
)
*
10
}
s,
{
1
*
(
j
+
i
)
}
,
{
11111
*
(
j
+
i
)
}
,
{
111
*
(
j
+
i
)
}
,
{
11
*
(
j
)
}
,
{
1.11
*
(
j
+
i
)
}
,
{
11.11
*
(
j
+
i
)
}
,
{
(
j
+
i
)
%
2
}
, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
f
'''insert into t1 values
( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
'''
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
def
check_distribute_datas
(
self
):
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
self
.
vnode_disbutes
=
vnode_tables
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
def
check_max_distribute_diff_vnode
(
self
,
col_name
):
vgroup_ids
=
[]
for
k
,
v
in
self
.
vnode_disbutes
.
items
():
if
len
(
v
)
>=
2
:
vgroup_ids
.
append
(
k
)
distribute_tbnames
=
[]
for
vgroup_id
in
vgroup_ids
:
vnode_tables
=
self
.
vnode_disbutes
[
vgroup_id
]
distribute_tbnames
.
append
(
random
.
sample
(
vnode_tables
,
1
)[
0
])
tbname_ins
=
""
for
tbname
in
distribute_tbnames
:
tbname_ins
+=
"'%s' ,"
%
tbname
tbname_filters
=
tbname_ins
[:
-
1
]
max_sql
=
f
"select max(
{
col_name
}
) from stb1 where tbname in (
{
tbname_filters
}
);"
same_sql
=
f
"select
{
col_name
}
from stb1 where tbname in (
{
tbname_filters
}
) order by
{
col_name
}
desc limit 1"
tdSql
.
query
(
max_sql
)
max_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
max_result
!=
same_result
:
tdLog
.
exit
(
" max function work not as expected, sql : %s "
%
max_sql
)
else
:
tdLog
.
info
(
" max function work as expected, sql : %s "
%
max_sql
)
def
check_max_status
(
self
):
# check max function work status
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
tablenames
.
append
(
table_name
[
0
])
tdSql
.
query
(
"desc stb1"
)
col_names
=
tdSql
.
queryResult
colnames
=
[]
for
col_name
in
col_names
:
if
col_name
[
1
]
in
[
"INT"
,
"BIGINT"
,
"SMALLINT"
,
"TINYINT"
,
"FLOAT"
,
"DOUBLE"
]:
colnames
.
append
(
col_name
[
0
])
for
tablename
in
tablenames
:
for
colname
in
colnames
:
self
.
check_max_functions
(
tablename
,
colname
)
# check max function for different vnode
for
colname
in
colnames
:
if
colname
.
startswith
(
"c"
):
self
.
check_max_distribute_diff_vnode
(
colname
)
else
:
# self.check_max_distribute_diff_vnode(colname) # bug for tag
pass
def
distribute_agg_query
(
self
):
# basic filter
tdSql
.
query
(
"select max(c1) from stb1 where c1 is null"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select max(c1) from stb1 where t1=1"
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
query
(
"select max(c1+c2) from stb1 where c1 =1 "
)
tdSql
.
checkData
(
0
,
0
,
11112.000000000
)
tdSql
.
query
(
"select max(c1) from stb1 where tbname=
\"
ct2
\"
"
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
query
(
"select max(c1) from stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select max(c1) from stb1 where t1> 4 partition by tbname"
)
tdSql
.
checkRows
(
15
)
# union all
tdSql
.
query
(
"select max(c1) from stb1 union all select max(c1) from stb1 "
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
28
)
# join
tdSql
.
execute
(
" create database if not exists db "
)
tdSql
.
execute
(
" use db "
)
tdSql
.
execute
(
" create stable st (ts timestamp , c1 int ,c2 float) tags(t1 int) "
)
tdSql
.
execute
(
" create table tb1 using st tags(1) "
)
tdSql
.
execute
(
" create table tb2 using st tags(2) "
)
for
i
in
range
(
10
):
ts
=
i
*
10
+
self
.
ts
tdSql
.
execute
(
f
" insert into tb1 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
execute
(
f
" insert into tb2 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
query
(
"select max(tb1.c1), tb2.c2 from tb1, tb2 where tb1.ts=tb2.ts"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
9
)
tdSql
.
checkData
(
0
,
0
,
9.00000
)
# group by
tdSql
.
execute
(
" use testdb "
)
tdSql
.
query
(
" select max(c1),c1 from stb1 group by t1 "
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
" select max(c1),c1 from stb1 group by c1 "
)
tdSql
.
checkRows
(
30
)
tdSql
.
query
(
" select max(c1),c2 from stb1 group by c2 "
)
tdSql
.
checkRows
(
31
)
# partition by tbname or partition by tag
tdSql
.
query
(
"select max(c1),tbname from stb1 partition by tbname"
)
query_data
=
tdSql
.
queryResult
for
row
in
query_data
:
tbname
=
row
[
1
]
tdSql
.
query
(
" select max(c1) from %s "
%
tbname
)
tdSql
.
checkData
(
0
,
0
,
row
[
0
])
tdSql
.
query
(
"select max(c1),tbname from stb1 partition by t1"
)
query_data
=
tdSql
.
queryResult
for
row
in
query_data
:
tbname
=
row
[
1
]
tdSql
.
query
(
" select max(c1) from %s "
%
tbname
)
tdSql
.
checkData
(
0
,
0
,
row
[
0
])
# nest query for support max
tdSql
.
query
(
"select abs(c2+2)+1 from (select max(c1) c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
31.000000000
)
tdSql
.
query
(
"select max(c1+2)+1 as c2 from (select ts ,c1 ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
31.000000000
)
tdSql
.
query
(
"select max(a+2)+1 as c2 from (select ts ,abs(c1) a ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
31.000000000
)
# mixup with other functions
tdSql
.
query
(
"select max(c1),count(c1),last(c2,c3) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
28
)
tdSql
.
checkData
(
0
,
1
,
184
)
tdSql
.
checkData
(
0
,
2
,
-
99999
)
tdSql
.
checkData
(
0
,
3
,
-
999
)
def
run
(
self
):
self
.
prepare_datas_of_distribute
()
self
.
check_distribute_datas
()
self
.
check_max_status
()
self
.
distribute_agg_query
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/2-query/distribute_agg_min.py
0 → 100644
浏览文件 @
1d5f431d
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
import
numpy
as
np
import
random
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
vnode_disbutes
=
None
self
.
ts
=
1537146000000
def
check_min_functions
(
self
,
tbname
,
col_name
):
min_sql
=
f
"select min(
{
col_name
}
) from
{
tbname
}
;"
same_sql
=
f
"select
{
col_name
}
from
{
tbname
}
where
{
col_name
}
is not null order by
{
col_name
}
asc limit 1"
tdSql
.
query
(
min_sql
)
min_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
min_result
!=
same_result
:
tdLog
.
exit
(
" min function work not as expected, sql : %s "
%
min_sql
)
else
:
tdLog
.
info
(
" min function work as expected, sql : %s "
%
min_sql
)
def
prepare_datas_of_distribute
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
tdSql
.
execute
(
'''
create table t1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
'''
)
for
i
in
range
(
20
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
for
i
in
range
(
9
):
tdSql
.
execute
(
f
"insert into ct1 values ( now()-
{
i
*
10
}
s,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
tdSql
.
execute
(
f
"insert into ct4 values ( now()-
{
i
*
90
}
d,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
for
i
in
range
(
1
,
21
):
if
i
==
1
or
i
==
4
:
continue
else
:
tbname
=
"ct"
+
f
'
{
i
}
'
for
j
in
range
(
9
):
tdSql
.
execute
(
f
"insert into
{
tbname
}
values ( now()-
{
(
i
+
j
)
*
10
}
s,
{
1
*
(
j
+
i
)
}
,
{
11111
*
(
j
+
i
)
}
,
{
111
*
(
j
+
i
)
}
,
{
11
*
(
j
)
}
,
{
1.11
*
(
j
+
i
)
}
,
{
11.11
*
(
j
+
i
)
}
,
{
(
j
+
i
)
%
2
}
, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
f
'''insert into t1 values
( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
'''
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
def
check_distribute_datas
(
self
):
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
self
.
vnode_disbutes
=
vnode_tables
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
def
check_min_distribute_diff_vnode
(
self
,
col_name
):
vgroup_ids
=
[]
for
k
,
v
in
self
.
vnode_disbutes
.
items
():
if
len
(
v
)
>=
2
:
vgroup_ids
.
append
(
k
)
distribute_tbnames
=
[]
for
vgroup_id
in
vgroup_ids
:
vnode_tables
=
self
.
vnode_disbutes
[
vgroup_id
]
distribute_tbnames
.
append
(
random
.
sample
(
vnode_tables
,
1
)[
0
])
tbname_ins
=
""
for
tbname
in
distribute_tbnames
:
tbname_ins
+=
"'%s' ,"
%
tbname
tbname_filters
=
tbname_ins
[:
-
1
]
min_sql
=
f
"select min(
{
col_name
}
) from stb1 where tbname in (
{
tbname_filters
}
);"
same_sql
=
f
"select
{
col_name
}
from stb1 where tbname in (
{
tbname_filters
}
) and
{
col_name
}
is not null order by
{
col_name
}
asc limit 1"
tdSql
.
query
(
min_sql
)
min_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
min_result
!=
same_result
:
tdLog
.
exit
(
" min function work not as expected, sql : %s "
%
min_sql
)
else
:
tdLog
.
info
(
" min function work as expected, sql : %s "
%
min_sql
)
def
check_min_status
(
self
):
# check max function work status
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
tablenames
.
append
(
table_name
[
0
])
tdSql
.
query
(
"desc stb1"
)
col_names
=
tdSql
.
queryResult
colnames
=
[]
for
col_name
in
col_names
:
if
col_name
[
1
]
in
[
"INT"
,
"BIGINT"
,
"SMALLINT"
,
"TINYINT"
,
"FLOAT"
,
"DOUBLE"
]:
colnames
.
append
(
col_name
[
0
])
for
tablename
in
tablenames
:
for
colname
in
colnames
:
self
.
check_min_functions
(
tablename
,
colname
)
# check max function for different vnode
for
colname
in
colnames
:
if
colname
.
startswith
(
"c"
):
self
.
check_min_distribute_diff_vnode
(
colname
)
else
:
# self.check_min_distribute_diff_vnode(colname) # bug for tag
pass
def
distribute_agg_query
(
self
):
# basic filter
tdSql
.
query
(
"select min(c1) from stb1 where c1 is null"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select min(c1) from stb1 where t1=1"
)
tdSql
.
checkData
(
0
,
0
,
2
)
tdSql
.
query
(
"select min(c1+c2) from stb1 where c1 =1 "
)
tdSql
.
checkData
(
0
,
0
,
11112.000000000
)
tdSql
.
query
(
"select min(c1) from stb1 where tbname=
\"
ct2
\"
"
)
tdSql
.
checkData
(
0
,
0
,
2
)
tdSql
.
query
(
"select min(c1) from stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select min(c1) from stb1 where t1> 4 partition by tbname"
)
tdSql
.
checkRows
(
15
)
# union all
tdSql
.
query
(
"select min(c1) from stb1 union all select min(c1) from stb1 "
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
0
)
# join
tdSql
.
execute
(
" create database if not exists db "
)
tdSql
.
execute
(
" use db "
)
tdSql
.
execute
(
" create stable st (ts timestamp , c1 int ,c2 float) tags(t1 int) "
)
tdSql
.
execute
(
" create table tb1 using st tags(1) "
)
tdSql
.
execute
(
" create table tb2 using st tags(2) "
)
for
i
in
range
(
10
):
ts
=
i
*
10
+
self
.
ts
tdSql
.
execute
(
f
" insert into tb1 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
execute
(
f
" insert into tb2 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
query
(
"select min(tb1.c1), tb2.c2 from tb1, tb2 where tb1.ts=tb2.ts"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
0
)
tdSql
.
checkData
(
0
,
0
,
0.00000
)
# group by
tdSql
.
execute
(
" use testdb "
)
tdSql
.
query
(
" select min(c1),c1 from stb1 group by t1 "
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
" select min(c1),c1 from stb1 group by c1 "
)
tdSql
.
checkRows
(
30
)
tdSql
.
query
(
" select min(c1),c2 from stb1 group by c2 "
)
tdSql
.
checkRows
(
31
)
# partition by tbname or partition by tag
tdSql
.
query
(
"select min(c1),tbname from stb1 partition by tbname"
)
query_data
=
tdSql
.
queryResult
for
row
in
query_data
:
tbname
=
row
[
1
]
tdSql
.
query
(
" select min(c1) from %s "
%
tbname
)
tdSql
.
checkData
(
0
,
0
,
row
[
0
])
tdSql
.
query
(
"select min(c1),tbname from stb1 partition by t1"
)
query_data
=
tdSql
.
queryResult
for
row
in
query_data
:
tbname
=
row
[
1
]
tdSql
.
query
(
" select min(c1) from %s "
%
tbname
)
tdSql
.
checkData
(
0
,
0
,
row
[
0
])
# nest query for support max
tdSql
.
query
(
"select abs(c2+2)+1 from (select min(c1) c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
3.000000000
)
tdSql
.
query
(
"select min(c1+2)+1 as c2 from (select ts ,c1 ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
3.000000000
)
tdSql
.
query
(
"select min(a+2)+1 as c2 from (select ts ,abs(c1) a ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
3.000000000
)
# mixup with other functions
tdSql
.
query
(
"select max(c1),count(c1),last(c2,c3),min(c1) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
28
)
tdSql
.
checkData
(
0
,
1
,
184
)
tdSql
.
checkData
(
0
,
2
,
-
99999
)
tdSql
.
checkData
(
0
,
3
,
-
999
)
tdSql
.
checkData
(
0
,
4
,
0
)
def
run
(
self
):
self
.
prepare_datas_of_distribute
()
self
.
check_distribute_datas
()
self
.
check_min_status
()
self
.
distribute_agg_query
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/2-query/distribute_agg_spread.py
0 → 100644
浏览文件 @
1d5f431d
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
import
numpy
as
np
import
random
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
vnode_disbutes
=
None
self
.
ts
=
1537146000000
def
check_spread_functions
(
self
,
tbname
,
col_name
):
spread_sql
=
f
"select spread(
{
col_name
}
) from
{
tbname
}
;"
same_sql
=
f
"select max(
{
col_name
}
)-min(
{
col_name
}
) from
{
tbname
}
"
tdSql
.
query
(
spread_sql
)
spread_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
spread_result
!=
same_result
:
tdLog
.
exit
(
" max function work not as expected, sql : %s "
%
spread_sql
)
else
:
tdLog
.
info
(
" max function work as expected, sql : %s "
%
spread_sql
)
def
prepare_datas_of_distribute
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
tdSql
.
execute
(
'''
create table t1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
'''
)
for
i
in
range
(
20
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
for
i
in
range
(
9
):
tdSql
.
execute
(
f
"insert into ct1 values ( now()-
{
i
*
10
}
s,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
tdSql
.
execute
(
f
"insert into ct4 values ( now()-
{
i
*
90
}
d,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
for
i
in
range
(
1
,
21
):
if
i
==
1
or
i
==
4
:
continue
else
:
tbname
=
"ct"
+
f
'
{
i
}
'
for
j
in
range
(
9
):
tdSql
.
execute
(
f
"insert into
{
tbname
}
values ( now()-
{
(
i
+
j
)
*
10
}
s,
{
1
*
(
j
+
i
)
}
,
{
11111
*
(
j
+
i
)
}
,
{
111
*
(
j
+
i
)
}
,
{
11
*
(
j
)
}
,
{
1.11
*
(
j
+
i
)
}
,
{
11.11
*
(
j
+
i
)
}
,
{
(
j
+
i
)
%
2
}
, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
f
'''insert into t1 values
( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
'''
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
def
check_distribute_datas
(
self
):
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
self
.
vnode_disbutes
=
vnode_tables
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
def
check_spread_distribute_diff_vnode
(
self
,
col_name
):
vgroup_ids
=
[]
for
k
,
v
in
self
.
vnode_disbutes
.
items
():
if
len
(
v
)
>=
2
:
vgroup_ids
.
append
(
k
)
distribute_tbnames
=
[]
for
vgroup_id
in
vgroup_ids
:
vnode_tables
=
self
.
vnode_disbutes
[
vgroup_id
]
distribute_tbnames
.
append
(
random
.
sample
(
vnode_tables
,
1
)[
0
])
tbname_ins
=
""
for
tbname
in
distribute_tbnames
:
tbname_ins
+=
"'%s' ,"
%
tbname
tbname_filters
=
tbname_ins
[:
-
1
]
spread_sql
=
f
"select spread(
{
col_name
}
) from stb1 where tbname in (
{
tbname_filters
}
)"
same_sql
=
f
"select max(
{
col_name
}
) - min(
{
col_name
}
) from stb1 where tbname in (
{
tbname_filters
}
)"
tdSql
.
query
(
spread_sql
)
spread_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
spread_result
!=
same_result
:
tdLog
.
exit
(
" spread function work not as expected, sql : %s "
%
spread_sql
)
else
:
tdLog
.
info
(
" spread function work as expected, sql : %s "
%
spread_sql
)
def
check_spread_status
(
self
):
# check max function work status
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
tablenames
.
append
(
table_name
[
0
])
tdSql
.
query
(
"desc stb1"
)
col_names
=
tdSql
.
queryResult
colnames
=
[]
for
col_name
in
col_names
:
if
col_name
[
1
]
in
[
"INT"
,
"BIGINT"
,
"SMALLINT"
,
"TINYINT"
,
"FLOAT"
,
"DOUBLE"
]:
colnames
.
append
(
col_name
[
0
])
for
tablename
in
tablenames
:
for
colname
in
colnames
:
self
.
check_spread_functions
(
tablename
,
colname
)
# check max function for different vnode
for
colname
in
colnames
:
if
colname
.
startswith
(
"c"
):
self
.
check_spread_distribute_diff_vnode
(
colname
)
else
:
# self.check_spread_distribute_diff_vnode(colname) # bug for tag
pass
def
distribute_agg_query
(
self
):
# basic filter
tdSql
.
query
(
"select spread(c1) from stb1 where c1 is null"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select spread(c1) from stb1 where t1=1"
)
tdSql
.
checkData
(
0
,
0
,
8.000000000
)
tdSql
.
query
(
"select spread(c1+c2) from stb1 where c1 =1 "
)
tdSql
.
checkData
(
0
,
0
,
0.000000000
)
tdSql
.
query
(
"select spread(c1) from stb1 where tbname=
\"
ct2
\"
"
)
tdSql
.
checkData
(
0
,
0
,
8.000000000
)
tdSql
.
query
(
"select spread(c1) from stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select spread(c1) from stb1 where t1> 4 partition by tbname"
)
tdSql
.
checkRows
(
15
)
# union all
tdSql
.
query
(
"select spread(c1) from stb1 union all select max(c1)-min(c1) from stb1 "
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
28.000000000
)
# join
tdSql
.
execute
(
" create database if not exists db "
)
tdSql
.
execute
(
" use db "
)
tdSql
.
execute
(
" create stable st (ts timestamp , c1 int ,c2 float) tags(t1 int) "
)
tdSql
.
execute
(
" create table tb1 using st tags(1) "
)
tdSql
.
execute
(
" create table tb2 using st tags(2) "
)
for
i
in
range
(
10
):
ts
=
i
*
10
+
self
.
ts
tdSql
.
execute
(
f
" insert into tb1 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
execute
(
f
" insert into tb2 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
query
(
"select spread(tb1.c1), spread(tb2.c2) from tb1, tb2 where tb1.ts=tb2.ts"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
9.000000000
)
tdSql
.
checkData
(
0
,
0
,
9.00000
)
# group by
tdSql
.
execute
(
" use testdb "
)
tdSql
.
query
(
" select max(c1),c1 from stb1 group by t1 "
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
" select max(c1),c1 from stb1 group by c1 "
)
tdSql
.
checkRows
(
30
)
tdSql
.
query
(
" select max(c1),c2 from stb1 group by c2 "
)
tdSql
.
checkRows
(
31
)
# partition by tbname or partition by tag
tdSql
.
query
(
"select spread(c1) from stb1 partition by tbname"
)
query_data
=
tdSql
.
queryResult
# nest query for support max
tdSql
.
query
(
"select spread(c2+2)+1 from (select max(c1) c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
query
(
"select spread(c1+2)+1 as c2 from (select ts ,c1 ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
29.000000000
)
tdSql
.
query
(
"select spread(a+2)+1 as c2 from (select ts ,abs(c1) a ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
29.000000000
)
# mixup with other functions
tdSql
.
query
(
"select max(c1),count(c1),last(c2,c3),spread(c1) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
28
)
tdSql
.
checkData
(
0
,
1
,
184
)
tdSql
.
checkData
(
0
,
2
,
-
99999
)
tdSql
.
checkData
(
0
,
3
,
-
999
)
tdSql
.
checkData
(
0
,
4
,
28.000000000
)
def
run
(
self
):
self
.
prepare_datas_of_distribute
()
self
.
check_distribute_datas
()
self
.
check_spread_status
()
self
.
distribute_agg_query
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/2-query/distribute_agg_sum.py
0 → 100644
浏览文件 @
1d5f431d
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
import
numpy
as
np
import
random
,
os
,
sys
import
platform
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
vnode_disbutes
=
None
self
.
ts
=
1537146000000
def
check_sum_functions
(
self
,
tbname
,
col_name
):
sum_sql
=
f
"select sum(
{
col_name
}
) from
{
tbname
}
;"
same_sql
=
f
"select
{
col_name
}
from
{
tbname
}
where
{
col_name
}
is not null "
tdSql
.
query
(
same_sql
)
pre_data
=
np
.
array
(
tdSql
.
queryResult
)[
np
.
array
(
tdSql
.
queryResult
)
!=
None
]
if
(
platform
.
system
().
lower
()
==
'windows'
and
pre_data
.
dtype
==
'int32'
):
pre_data
=
np
.
array
(
pre_data
,
dtype
=
'int64'
)
pre_sum
=
np
.
sum
(
pre_data
)
tdSql
.
query
(
sum_sql
)
tdSql
.
checkData
(
0
,
0
,
pre_sum
)
def
prepare_datas_of_distribute
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
tdSql
.
execute
(
'''
create table t1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
'''
)
for
i
in
range
(
20
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
for
i
in
range
(
9
):
tdSql
.
execute
(
f
"insert into ct1 values ( now()-
{
i
*
10
}
s,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
tdSql
.
execute
(
f
"insert into ct4 values ( now()-
{
i
*
90
}
d,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
for
i
in
range
(
1
,
21
):
if
i
==
1
or
i
==
4
:
continue
else
:
tbname
=
"ct"
+
f
'
{
i
}
'
for
j
in
range
(
9
):
tdSql
.
execute
(
f
"insert into
{
tbname
}
values ( now()-
{
(
i
+
j
)
*
10
}
s,
{
1
*
(
j
+
i
)
}
,
{
11111
*
(
j
+
i
)
}
,
{
111
*
(
j
+
i
)
}
,
{
11
*
(
j
)
}
,
{
1.11
*
(
j
+
i
)
}
,
{
11.11
*
(
j
+
i
)
}
,
{
(
j
+
i
)
%
2
}
, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
f
'''insert into t1 values
( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
'''
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
def
check_distribute_datas
(
self
):
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
self
.
vnode_disbutes
=
vnode_tables
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
def
check_sum_distribute_diff_vnode
(
self
,
col_name
):
vgroup_ids
=
[]
for
k
,
v
in
self
.
vnode_disbutes
.
items
():
if
len
(
v
)
>=
2
:
vgroup_ids
.
append
(
k
)
distribute_tbnames
=
[]
for
vgroup_id
in
vgroup_ids
:
vnode_tables
=
self
.
vnode_disbutes
[
vgroup_id
]
distribute_tbnames
.
append
(
random
.
sample
(
vnode_tables
,
1
)[
0
])
tbname_ins
=
""
for
tbname
in
distribute_tbnames
:
tbname_ins
+=
"'%s' ,"
%
tbname
tbname_filters
=
tbname_ins
[:
-
1
]
sum_sql
=
f
"select sum(
{
col_name
}
) from stb1 where tbname in (
{
tbname_filters
}
);"
same_sql
=
f
"select
{
col_name
}
from stb1 where tbname in (
{
tbname_filters
}
) and
{
col_name
}
is not null "
tdSql
.
query
(
same_sql
)
pre_data
=
np
.
array
(
tdSql
.
queryResult
)[
np
.
array
(
tdSql
.
queryResult
)
!=
None
]
if
(
platform
.
system
().
lower
()
==
'windows'
and
pre_data
.
dtype
==
'int32'
):
pre_data
=
np
.
array
(
pre_data
,
dtype
=
'int64'
)
pre_sum
=
np
.
sum
(
pre_data
)
tdSql
.
query
(
sum_sql
)
tdSql
.
checkData
(
0
,
0
,
pre_sum
)
def
check_sum_status
(
self
):
# check max function work status
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
tablenames
.
append
(
table_name
[
0
])
tdSql
.
query
(
"desc stb1"
)
col_names
=
tdSql
.
queryResult
colnames
=
[]
for
col_name
in
col_names
:
if
col_name
[
1
]
in
[
"INT"
,
"BIGINT"
,
"SMALLINT"
,
"TINYINT"
,
"FLOAT"
,
"DOUBLE"
]:
colnames
.
append
(
col_name
[
0
])
for
tablename
in
tablenames
:
for
colname
in
colnames
:
self
.
check_sum_functions
(
tablename
,
colname
)
# check max function for different vnode
for
colname
in
colnames
:
if
colname
.
startswith
(
"c"
):
self
.
check_sum_distribute_diff_vnode
(
colname
)
else
:
# self.check_sum_distribute_diff_vnode(colname) # bug for tag
pass
def
distribute_agg_query
(
self
):
# basic filter
tdSql
.
query
(
" select sum(c1) from stb1 "
)
tdSql
.
checkData
(
0
,
0
,
2592
)
tdSql
.
query
(
" select sum(a) from (select sum(c1) a from stb1 partition by tbname) "
)
tdSql
.
checkData
(
0
,
0
,
2592
)
tdSql
.
query
(
" select sum(c1) from stb1 where t1=1"
)
tdSql
.
checkData
(
0
,
0
,
54
)
tdSql
.
query
(
"select sum(c1+c2) from stb1 where c1 =1 "
)
tdSql
.
checkData
(
0
,
0
,
22224.000000000
)
tdSql
.
query
(
"select sum(c1) from stb1 where tbname=
\"
ct2
\"
"
)
tdSql
.
checkData
(
0
,
0
,
54
)
tdSql
.
query
(
"select sum(c1) from stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select sum(c1) from stb1 where t1> 4 partition by tbname"
)
tdSql
.
checkRows
(
15
)
# union all
tdSql
.
query
(
"select sum(c1) from stb1 union all select sum(c1) from stb1 "
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
2592
)
tdSql
.
query
(
"select sum(a) from (select sum(c1) a from stb1 union all select sum(c1) a from stb1)"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
5184
)
# join
tdSql
.
execute
(
" create database if not exists db "
)
tdSql
.
execute
(
" use db "
)
tdSql
.
execute
(
" create stable st (ts timestamp , c1 int ,c2 float) tags(t1 int) "
)
tdSql
.
execute
(
" create table tb1 using st tags(1) "
)
tdSql
.
execute
(
" create table tb2 using st tags(2) "
)
for
i
in
range
(
10
):
ts
=
i
*
10
+
self
.
ts
tdSql
.
execute
(
f
" insert into tb1 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
execute
(
f
" insert into tb2 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
query
(
"select sum(tb1.c1), sum(tb2.c2) from tb1, tb2 where tb1.ts=tb2.ts"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
45
)
tdSql
.
checkData
(
0
,
1
,
45.000000000
)
# group by
tdSql
.
execute
(
" use testdb "
)
# partition by tbname or partition by tag
tdSql
.
query
(
"select sum(c1) from stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
# nest query for support max
tdSql
.
query
(
"select abs(c2+2)+1 from (select sum(c1) c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
2595.000000000
)
tdSql
.
query
(
"select sum(c1+2) as c2 from (select ts ,c1 ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
2960.000000000
)
tdSql
.
query
(
"select sum(a+2) as c2 from (select ts ,abs(c1) a ,c2 from stb1)"
)
tdSql
.
checkData
(
0
,
0
,
2960.000000000
)
# mixup with other functions
tdSql
.
query
(
"select max(c1),count(c1),last(c2,c3),sum(c1+c2) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
28
)
tdSql
.
checkData
(
0
,
1
,
184
)
tdSql
.
checkData
(
0
,
2
,
-
99999
)
tdSql
.
checkData
(
0
,
3
,
-
999
)
tdSql
.
checkData
(
0
,
4
,
28202310.000000000
)
def
run
(
self
):
self
.
prepare_datas_of_distribute
()
self
.
check_distribute_datas
()
self
.
check_sum_status
()
self
.
distribute_agg_query
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/2-query/max.py
浏览文件 @
1d5f431d
...
@@ -5,198 +5,215 @@ import numpy as np
...
@@ -5,198 +5,215 @@ import numpy as np
class
TDTestCase
:
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
tdSql
.
init
(
conn
.
cursor
())
self
.
rowNum
=
10
self
.
rowNum
=
10
self
.
ts
=
1537146000000
self
.
ts
=
1537146000000
self
.
binary_str
=
'taosdata'
def
prepare_data
(
self
):
self
.
nchar_str
=
'涛思数据'
def
max_check_stb_and_tb_base
(
self
):
pass
def
run
(
self
):
tdSql
.
prepare
()
tdSql
.
prepare
()
intData
=
[]
intData
=
[]
floatData
=
[]
floatData
=
[]
tdSql
.
execute
(
'''create table stb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
tdSql
.
execute
(
'''create table stb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 float, col6 double,
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(loc nchar(20))'''
)
col7 bool, col8 binary(20), col9 nchar(20), col11 tinyint unsigned, col12 smallint unsigned, col13 int unsigned, col14 bigint unsigned) tags(loc nchar(20))'''
)
tdSql
.
execute
(
"create table stb_1 using stb tags('beijing')"
)
tdSql
.
execute
(
"create table stb_1 using stb tags('beijing')"
)
tdSql
.
execute
(
'''create table ntb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 float, col6 double,
col7 bool, col8 binary(20), col9 nchar(20), col11 tinyint unsigned, col12 smallint unsigned, col13 int unsigned, col14 bigint unsigned)'''
)
for
i
in
range
(
self
.
rowNum
):
for
i
in
range
(
self
.
rowNum
):
tdSql
.
execute
(
"insert into ntb values(%d, %d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d', %d, %d, %d, %d)"
tdSql
.
execute
(
f
"insert into stb_1 values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '
{
self
.
binary_str
}
%d', '
{
self
.
nchar_str
}
%d')"
%
(
self
.
ts
+
i
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
0.1
,
i
+
0.1
,
i
%
2
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
))
%
(
self
.
ts
+
i
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
0.1
,
i
+
0.1
,
i
%
2
,
i
+
1
,
i
+
1
))
intData
.
append
(
i
+
1
)
intData
.
append
(
i
+
1
)
floatData
.
append
(
i
+
0.1
)
floatData
.
append
(
i
+
0.1
)
for
i
in
[
'ts'
,
'col11'
,
'col12'
,
'col13'
]:
for
j
in
[
'db.stb'
,
'stb'
,
'db.stb_1'
,
'stb_1'
]:
tdSql
.
error
(
f
'select max(
{
i
}
from
{
j
}
)'
)
for
i
in
range
(
1
,
11
):
for
j
in
[
'db.stb'
,
'stb'
,
'db.stb_1'
,
'stb_1'
]:
tdSql
.
query
(
f
"select max(col
{
i
}
) from
{
j
}
"
)
if
i
<
9
:
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
elif
i
>=
9
:
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col1) from stb_1 where col2<=5"
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
query
(
"select max(col1) from stb where col2<=5"
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
execute
(
'drop database db'
)
def
max_check_ntb_base
(
self
):
tdSql
.
prepare
()
intData
=
[]
floatData
=
[]
tdSql
.
execute
(
'''create table ntb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20))'''
)
for
i
in
range
(
self
.
rowNum
):
for
i
in
range
(
self
.
rowNum
):
tdSql
.
execute
(
"insert into stb_1 values(%d, %d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d', %d, %d, %d, %d)"
tdSql
.
execute
(
f
"insert into ntb values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '
{
self
.
binary_str
}
%d', '
{
self
.
nchar_str
}
%d')"
%
(
self
.
ts
+
i
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
0.1
,
i
+
0.1
,
i
%
2
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
))
%
(
self
.
ts
+
i
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
0.1
,
i
+
0.1
,
i
%
2
,
i
+
1
,
i
+
1
))
intData
.
append
(
i
+
1
)
intData
.
append
(
i
+
1
)
floatData
.
append
(
i
+
0.1
)
floatData
.
append
(
i
+
0.1
)
for
i
in
[
'ts'
,
'col11'
,
'col12'
,
'col13'
]:
# max verifacation
for
j
in
[
'db.ntb'
,
'ntb'
]:
tdSql
.
error
(
"select max(ts) from stb_1"
)
tdSql
.
error
(
f
'select max(
{
i
}
from
{
j
}
)'
)
tdSql
.
error
(
"select max(ts) from db.stb_1"
)
for
i
in
range
(
1
,
11
):
tdSql
.
error
(
"select max(col7) from stb_1"
)
for
j
in
[
'db.ntb'
,
'ntb'
]:
tdSql
.
error
(
"select max(col7) from db.stb_1"
)
tdSql
.
query
(
f
"select max(col
{
i
}
) from
{
j
}
"
)
tdSql
.
error
(
"select max(col8) from stb_1"
)
if
i
<
9
:
tdSql
.
error
(
"select max(col8) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
error
(
"select max(col9) from stb_1"
)
elif
i
>=
9
:
tdSql
.
error
(
"select max(col9) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col1) from ntb where col2<=5"
)
tdSql
.
query
(
"select max(col1) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col1) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col2) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col2) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col3) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col3) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col4) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col4) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col11) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col11) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col12) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col12) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col13) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col13) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col14) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col14) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col5) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col5) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col6) from stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col6) from db.stb_1"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col1) from stb_1 where col2<=5"
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
execute
(
'drop database db'
)
def
check_max_functions
(
self
,
tbname
,
col_name
):
max_sql
=
f
"select max(
{
col_name
}
) from
{
tbname
}
;"
same_sql
=
f
"select
{
col_name
}
from
{
tbname
}
order by
{
col_name
}
desc limit 1"
tdSql
.
query
(
max_sql
)
max_result
=
tdSql
.
queryResult
tdSql
.
query
(
same_sql
)
same_result
=
tdSql
.
queryResult
if
max_result
!=
same_result
:
tdLog
.
exit
(
" max function work not as expected, sql : %s "
%
max_sql
)
else
:
tdLog
.
info
(
" max function work as expected, sql : %s "
%
max_sql
)
def
support_distributed_aggregate
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
tdSql
.
execute
(
'''
create table t1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
'''
)
for
i
in
range
(
20
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
for
i
in
range
(
9
):
tdSql
.
execute
(
f
"insert into ct1 values ( now()-
{
i
*
10
}
s,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
tdSql
.
execute
(
f
"insert into ct4 values ( now()-
{
i
*
90
}
d,
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, 'binary
{
i
}
', 'nchar
{
i
}
', now()+
{
1
*
i
}
a )"
)
for
i
in
range
(
1
,
21
):
if
i
==
1
or
i
==
4
:
continue
else
:
tbname
=
"ct"
+
f
'
{
i
}
'
for
j
in
range
(
9
):
tdSql
.
execute
(
f
"insert into
{
tbname
}
values ( now()-
{
(
i
+
j
)
*
10
}
s,
{
1
*
(
j
+
i
)
}
,
{
11111
*
(
j
+
i
)
}
,
{
111
*
(
j
+
i
)
}
,
{
11
*
(
j
)
}
,
{
1.11
*
(
j
+
i
)
}
,
{
11.11
*
(
j
+
i
)
}
,
{
(
j
+
i
)
%
2
}
, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )"
)
tdSql
.
execute
(
"insert into ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
f
'''insert into t1 values
( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
'''
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
# check max function work status
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
tablenames
.
append
(
table_name
[
0
])
tdSql
.
query
(
"desc stb1"
)
col_names
=
tdSql
.
queryResult
colnames
=
[]
for
col_name
in
col_names
:
if
col_name
[
1
]
in
[
"INT"
,
"BIGINT"
,
"SMALLINT"
,
"TINYINT"
,
"FLOAT"
,
"DOUBLE"
]:
colnames
.
append
(
col_name
[
0
])
for
tablename
in
tablenames
:
for
colname
in
colnames
:
self
.
check_max_functions
(
tablename
,
colname
)
tdSql
.
error
(
"select max(ts) from stb"
)
# max function with basic filter
tdSql
.
error
(
"select max(ts) from db.stb"
)
print
(
vnode_tables
)
tdSql
.
error
(
"select max(col7) from stb"
)
tdSql
.
error
(
"select max(col7) from db.stb"
)
tdSql
.
error
(
"select max(col8) from stb"
)
tdSql
.
error
(
"select max(col8) from db.stb"
)
tdSql
.
error
(
"select max(col9) from stb"
)
tdSql
.
error
(
"select max(col9) from db.stb"
)
tdSql
.
query
(
"select max(col1) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col1) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col2) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col2) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col3) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col3) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col4) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col4) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col11) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col11) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col12) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col12) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col13) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col13) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col14) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col14) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col5) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col5) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col6) from stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col6) from db.stb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col1) from stb where col2<=5"
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
error
(
"select max(ts) from ntb"
)
def
run
(
self
):
tdSql
.
error
(
"select max(ts) from db.ntb"
)
tdSql
.
error
(
"select max(col7) from ntb"
)
# max verifacation
tdSql
.
error
(
"select max(col7) from db.ntb"
)
self
.
max_check_stb_and_tb_base
()
tdSql
.
error
(
"select max(col8) from ntb"
)
self
.
max_check_ntb_base
()
tdSql
.
error
(
"select max(col8) from db.ntb"
)
tdSql
.
error
(
"select max(col9) from ntb"
)
self
.
support_distributed_aggregate
()
tdSql
.
error
(
"select max(col9) from db.ntb"
)
tdSql
.
query
(
"select max(col1) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col1) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col2) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col2) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col3) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col3) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col4) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col4) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col11) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col11) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col12) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col12) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col13) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col13) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col14) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col14) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
intData
))
tdSql
.
query
(
"select max(col5) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col5) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col6) from ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col6) from db.ntb"
)
tdSql
.
checkData
(
0
,
0
,
np
.
max
(
floatData
))
tdSql
.
query
(
"select max(col1) from stb_1 where col2<=5"
)
tdSql
.
checkData
(
0
,
0
,
5
)
def
stop
(
self
):
def
stop
(
self
):
tdSql
.
close
()
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
...
...
tests/system-test/7-tmq/basic5.py
浏览文件 @
1d5f431d
...
@@ -192,7 +192,7 @@ class TDTestCase:
...
@@ -192,7 +192,7 @@ class TDTestCase:
time
.
sleep
(
1
)
time
.
sleep
(
1
)
tdLog
.
info
(
"start consume processor"
)
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
10
0
pollDelay
=
2
0
showMsg
=
1
showMsg
=
1
showRow
=
1
showRow
=
1
...
@@ -208,7 +208,7 @@ class TDTestCase:
...
@@ -208,7 +208,7 @@ class TDTestCase:
os
.
system
(
shellCmd
)
os
.
system
(
shellCmd
)
# wait for data ready
# wait for data ready
prepareEnvThread
.
join
()
#
prepareEnvThread.join()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
tdLog
.
info
(
"insert process end, and start to check consume result"
)
while
1
:
while
1
:
...
...
tests/system-test/7-tmq/subscribeDb0.py
浏览文件 @
1d5f431d
...
@@ -322,176 +322,6 @@ class TDTestCase:
...
@@ -322,176 +322,6 @@ class TDTestCase:
tdLog
.
printNoPrefix
(
"======== test case 5 end ...... "
)
tdLog
.
printNoPrefix
(
"======== test case 5 end ...... "
)
def
tmqCase6
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 6: Produce while one consumers to subscribe tow topic, Each contains one db"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db60'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
5000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
()
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
parameterDict2
=
{
'cfg'
:
''
,
\
'dbName'
:
'db61'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb2'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
5000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict2
[
'dbName'
],
parameterDict2
[
'vgroups'
]))
prepareEnvThread2
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict2
)
prepareEnvThread2
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db60'
topicName2
=
'topic_db61'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName2
,
parameterDict2
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
+
parameterDict2
[
"rowsPerTbl"
]
*
parameterDict2
[
"ctbNum"
]
topicList
=
topicName1
+
','
+
topicName2
ifcheckdata
=
0
ifManualCommit
=
0
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
#consumerId = 1
#self.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
100
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
# wait for data ready
prepareEnvThread
.
join
()
prepareEnvThread2
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdSql
.
query
(
"drop topic %s"
%
topicName2
)
tdLog
.
printNoPrefix
(
"======== test case 6 end ...... "
)
def
tmqCase7
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 7: Produce while two consumers to subscribe tow topic, Each contains one db"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db70'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
5000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
()
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
parameterDict2
=
{
'cfg'
:
''
,
\
'dbName'
:
'db71'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb2'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
5000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict2
[
'dbName'
],
parameterDict2
[
'vgroups'
]))
prepareEnvThread2
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict2
)
prepareEnvThread2
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db60'
topicName2
=
'topic_db61'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName2
,
parameterDict2
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
+
parameterDict2
[
"rowsPerTbl"
]
*
parameterDict2
[
"ctbNum"
]
topicList
=
topicName1
+
','
+
topicName2
ifcheckdata
=
0
ifManualCommit
=
1
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
consumerId
=
1
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
100
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
# wait for data ready
prepareEnvThread
.
join
()
prepareEnvThread2
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
expectRows
=
2
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdSql
.
query
(
"drop topic %s"
%
topicName2
)
tdLog
.
printNoPrefix
(
"======== test case 7 end ...... "
)
def
run
(
self
):
def
run
(
self
):
tdSql
.
prepare
()
tdSql
.
prepare
()
...
@@ -505,8 +335,6 @@ class TDTestCase:
...
@@ -505,8 +335,6 @@ class TDTestCase:
self
.
tmqCase4
(
cfgPath
,
buildPath
)
self
.
tmqCase4
(
cfgPath
,
buildPath
)
self
.
tmqCase5
(
cfgPath
,
buildPath
)
self
.
tmqCase5
(
cfgPath
,
buildPath
)
self
.
tmqCase6
(
cfgPath
,
buildPath
)
self
.
tmqCase7
(
cfgPath
,
buildPath
)
def
stop
(
self
):
def
stop
(
self
):
...
...
tests/system-test/7-tmq/subscribeDb1.py
浏览文件 @
1d5f431d
...
@@ -72,10 +72,10 @@ class TDTestCase:
...
@@ -72,10 +72,10 @@ class TDTestCase:
if
tdSql
.
getRows
()
==
expectRows
:
if
tdSql
.
getRows
()
==
expectRows
:
break
break
else
:
else
:
time
.
sleep
(
5
)
time
.
sleep
(
5
)
for
i
in
range
(
expectRows
):
for
i
in
range
(
expectRows
):
tdLog
.
info
(
"
ts: %s, consume id: %d, consume msgs: %d, consume rows: %d"
%
(
tdSql
.
getData
(
i
,
0
),
tdSql
.
getData
(
i
,
1
),
tdSql
.
getData
(
i
,
2
),
tdSql
.
getData
(
i
,
3
)))
tdLog
.
info
(
"
consume id: %d, consume msgs: %d, consume rows: %d"
%
(
tdSql
.
getData
(
i
,
1
),
tdSql
.
getData
(
i
,
2
),
tdSql
.
getData
(
i
,
3
)))
resultList
.
append
(
tdSql
.
getData
(
i
,
3
))
resultList
.
append
(
tdSql
.
getData
(
i
,
3
))
return
resultList
return
resultList
...
@@ -85,7 +85,7 @@ class TDTestCase:
...
@@ -85,7 +85,7 @@ class TDTestCase:
logFile
=
cfgPath
+
'/../log/valgrind-tmq.log'
logFile
=
cfgPath
+
'/../log/valgrind-tmq.log'
shellCmd
=
'nohup valgrind --log-file='
+
logFile
shellCmd
=
'nohup valgrind --log-file='
+
logFile
shellCmd
+=
'--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v --workaround-gcc296-bugs=yes '
shellCmd
+=
'--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v --workaround-gcc296-bugs=yes '
if
(
platform
.
system
().
lower
()
==
'windows'
):
if
(
platform
.
system
().
lower
()
==
'windows'
):
shellCmd
=
'mintty -h never -w hide '
+
buildPath
+
'
\\
build
\\
bin
\\
tmq_sim.exe -c '
+
cfgPath
shellCmd
=
'mintty -h never -w hide '
+
buildPath
+
'
\\
build
\\
bin
\\
tmq_sim.exe -c '
+
cfgPath
shellCmd
+=
" -y %d -d %s -g %d -r %d -w %s "
%
(
pollDelay
,
dbName
,
showMsg
,
showRow
,
cdbName
)
shellCmd
+=
" -y %d -d %s -g %d -r %d -w %s "
%
(
pollDelay
,
dbName
,
showMsg
,
showRow
,
cdbName
)
...
@@ -97,7 +97,7 @@ class TDTestCase:
...
@@ -97,7 +97,7 @@ class TDTestCase:
tdLog
.
info
(
shellCmd
)
tdLog
.
info
(
shellCmd
)
os
.
system
(
shellCmd
)
os
.
system
(
shellCmd
)
def
create_tables
(
self
,
tsql
,
dbName
,
vgroups
,
stbName
,
ctbNum
,
rowsPerTbl
):
def
create_tables
(
self
,
tsql
,
dbName
,
vgroups
,
stbName
,
ctbNum
):
tsql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
dbName
,
vgroups
))
tsql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
dbName
,
vgroups
))
tsql
.
execute
(
"use %s"
%
dbName
)
tsql
.
execute
(
"use %s"
%
dbName
)
tsql
.
execute
(
"create table if not exists %s (ts timestamp, c1 bigint, c2 binary(16)) tags(t1 int)"
%
stbName
)
tsql
.
execute
(
"create table if not exists %s (ts timestamp, c1 bigint, c2 binary(16)) tags(t1 int)"
%
stbName
)
...
@@ -151,8 +151,7 @@ class TDTestCase:
...
@@ -151,8 +151,7 @@ class TDTestCase:
parameterDict
[
"dbName"
],
\
parameterDict
[
"dbName"
],
\
parameterDict
[
"vgroups"
],
\
parameterDict
[
"vgroups"
],
\
parameterDict
[
"stbName"
],
\
parameterDict
[
"stbName"
],
\
parameterDict
[
"ctbNum"
],
\
parameterDict
[
"ctbNum"
])
parameterDict
[
"rowsPerTbl"
])
self
.
insert_data
(
tsql
,
\
self
.
insert_data
(
tsql
,
\
parameterDict
[
"dbName"
],
\
parameterDict
[
"dbName"
],
\
...
@@ -163,16 +162,16 @@ class TDTestCase:
...
@@ -163,16 +162,16 @@ class TDTestCase:
parameterDict
[
"startTs"
])
parameterDict
[
"startTs"
])
return
return
def
tmqCase
8
(
self
,
cfgPath
,
buildPath
):
def
tmqCase
6
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case
8: Produce while one consume to subscribe one db, inclue 1 st
b"
)
tdLog
.
printNoPrefix
(
"======== test case
6: Produce while one consumers to subscribe tow topic, Each contains one d
b"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db
8
'
,
\
'dbName'
:
'db
60
'
,
\
'vgroups'
:
4
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10
000
,
\
'rowsPerTbl'
:
5
000
,
\
'batchNum'
:
100
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
parameterDict
[
'cfg'
]
=
cfgPath
...
@@ -183,100 +182,43 @@ class TDTestCase:
...
@@ -183,100 +182,43 @@ class TDTestCase:
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
/
2
topicList
=
topicName1
ifcheckdata
=
0
ifManualCommit
=
0
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
parameterDict2
=
{
'cfg'
:
''
,
\
pollDelay
=
100
'dbName'
:
'db61'
,
\
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
# wait for data ready
prepareEnvThread
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
tdLog
.
info
(
"again start consume processer"
)
self
.
initConsumerTable
()
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdLog
.
printNoPrefix
(
"======== test case 8 end ...... "
)
def
tmqCase9
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 9: Produce while one consume to subscribe one db, inclue 1 stb"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db9'
,
\
'vgroups'
:
4
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'stbName'
:
'stb
2
'
,
\
'ctbNum'
:
10
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10
000
,
\
'rowsPerTbl'
:
5
000
,
\
'batchNum'
:
100
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
(
)
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict2
[
'dbName'
],
parameterDict2
[
'vgroups'
])
)
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread2
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict2
)
prepareEnvThread2
.
start
()
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
topicName1
=
'topic_db60'
topicName2
=
'topic_db61'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName2
,
parameterDict2
[
'dbName'
]))
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
/
2
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
+
parameterDict2
[
"rowsPerTbl"
]
*
parameterDict2
[
"ctbNum"
]
topicList
=
topicName1
topicList
=
topicName1
+
','
+
topicName2
ifcheckdata
=
0
ifcheckdata
=
0
ifManualCommit
=
1
ifManualCommit
=
0
keyList
=
'group.id:cgrp1,\
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
#consumerId = 1
#self.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
event
.
wait
()
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
tdLog
.
info
(
"start consume processor"
)
...
@@ -286,7 +228,8 @@ class TDTestCase:
...
@@ -286,7 +228,8 @@ class TDTestCase:
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
# wait for data ready
# wait for data ready
prepareEnvThread
.
join
()
prepareEnvThread
.
join
()
prepareEnvThread2
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
tdLog
.
info
(
"insert process end, and start to check consume result"
)
expectRows
=
1
expectRows
=
1
...
@@ -295,44 +238,25 @@ class TDTestCase:
...
@@ -295,44 +238,25 @@ class TDTestCase:
for
i
in
range
(
expectRows
):
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
totalConsumeRows
+=
resultList
[
i
]
tdSql
.
query
(
"select count(*) from %s.%s"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'stbName'
]))
if
totalConsumeRows
!=
expectrowcnt
:
countOfStb
=
tdSql
.
getData
(
0
,
0
)
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
print
(
"====total rows of stb: %d"
%
countOfStb
)
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
if
totalConsumeRows
<
expectrowcnt
:
tdLog
.
exit
(
"tmq consume rows error!"
)
tdLog
.
info
(
"again start consume processer"
)
self
.
initConsumerTable
()
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows2
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows2
+=
resultList
[
i
]
tdLog
.
info
(
"firstly act consume rows: %d"
%
(
totalConsumeRows
))
tdLog
.
info
(
"secondly act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows2
,
expectrowcnt
))
if
totalConsumeRows
+
totalConsumeRows2
!=
expectrowcnt
:
tdLog
.
exit
(
"tmq consume rows error!"
)
tdLog
.
exit
(
"tmq consume rows error!"
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdSql
.
query
(
"drop topic %s"
%
topicName2
)
tdLog
.
printNoPrefix
(
"======== test case
9
end ...... "
)
tdLog
.
printNoPrefix
(
"======== test case
6
end ...... "
)
def
tmqCase
10
(
self
,
cfgPath
,
buildPath
):
def
tmqCase
7
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case
10: Produce while one consume to subscribe one db, inclue 1 st
b"
)
tdLog
.
printNoPrefix
(
"======== test case
7: Produce while two consumers to subscribe tow topic, Each contains one d
b"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db
1
0'
,
\
'dbName'
:
'db
7
0'
,
\
'vgroups'
:
4
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10
000
,
\
'rowsPerTbl'
:
5
000
,
\
'batchNum'
:
100
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
parameterDict
[
'cfg'
]
=
cfgPath
...
@@ -343,135 +267,70 @@ class TDTestCase:
...
@@ -343,135 +267,70 @@ class TDTestCase:
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
topicList
=
topicName1
ifcheckdata
=
0
ifManualCommit
=
1
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
parameterDict2
=
{
'cfg'
:
''
,
\
pollDelay
=
100
'dbName'
:
'db71'
,
\
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
time
.
sleep
(
2
)
tdLog
.
info
(
"pkill consume processor"
)
if
(
platform
.
system
().
lower
()
==
'windows'
):
os
.
system
(
"TASKKILL /F /IM tmq_sim.exe"
)
else
:
os
.
system
(
'pkill tmq_sim'
)
expectRows
=
0
resultList
=
self
.
selectConsumeResult
(
expectRows
)
# wait for data ready
prepareEnvThread
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
tdLog
.
info
(
"again start consume processer"
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
time
.
sleep
(
15
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdLog
.
printNoPrefix
(
"======== test case 10 end ...... "
)
def
tmqCase11
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 11: Produce while one consume to subscribe one db, inclue 1 stb"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db11'
,
\
'vgroups'
:
4
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'stbName'
:
'stb
2
'
,
\
'ctbNum'
:
10
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10
000
,
\
'rowsPerTbl'
:
5
000
,
\
'batchNum'
:
100
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
(
)
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict2
[
'dbName'
],
parameterDict2
[
'vgroups'
])
)
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread2
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict2
)
prepareEnvThread2
.
start
()
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
topicName1
=
'topic_db60'
topicName2
=
'topic_db61'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName2
,
parameterDict2
[
'dbName'
]))
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
+
parameterDict2
[
"rowsPerTbl"
]
*
parameterDict2
[
"ctbNum"
]
topicList
=
topicName1
topicList
=
topicName1
+
','
+
topicName2
ifcheckdata
=
0
ifcheckdata
=
0
ifManualCommit
=
1
ifManualCommit
=
1
keyList
=
'group.id:cgrp1,\
keyList
=
'group.id:cgrp1,\
enable.auto.commit:
tru
e,\
enable.auto.commit:
fals
e,\
auto.commit.interval.ms:
1
000,\
auto.commit.interval.ms:
6
000,\
auto.offset.reset:earliest'
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
consumerId
=
1
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
2
0
pollDelay
=
10
0
showMsg
=
1
showMsg
=
1
showRow
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
time
.
sleep
(
6
)
tdLog
.
info
(
"pkill consume processor"
)
if
(
platform
.
system
().
lower
()
==
'windows'
):
os
.
system
(
"TASKKILL /F /IM tmq_sim.exe"
)
else
:
os
.
system
(
'pkill tmq_sim'
)
expectRows
=
0
resultList
=
self
.
selectConsumeResult
(
expectRows
)
# wait for data ready
# wait for data ready
prepareEnvThread
.
join
()
prepareEnvThread
.
join
()
prepareEnvThread2
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
tdLog
.
info
(
"insert process end, and start to check consume result"
)
expectRows
=
2
tdLog
.
info
(
"again start consume processer"
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
>=
expectrowcnt
or
totalConsumeRows
<=
0
:
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows
between %d and 0
"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
info
(
"act consume rows: %d, expect consume rows
: %d
"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
tdLog
.
exit
(
"tmq consume rows error!"
)
time
.
sleep
(
15
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdSql
.
query
(
"drop topic %s"
%
topicName2
)
tdLog
.
printNoPrefix
(
"======== test case
11
end ...... "
)
tdLog
.
printNoPrefix
(
"======== test case
7
end ...... "
)
def
run
(
self
):
def
run
(
self
):
tdSql
.
prepare
()
tdSql
.
prepare
()
...
@@ -484,10 +343,9 @@ class TDTestCase:
...
@@ -484,10 +343,9 @@ class TDTestCase:
cfgPath
=
buildPath
+
"/../sim/psim/cfg"
cfgPath
=
buildPath
+
"/../sim/psim/cfg"
tdLog
.
info
(
"cfgPath: %s"
%
cfgPath
)
tdLog
.
info
(
"cfgPath: %s"
%
cfgPath
)
self
.
tmqCase8
(
cfgPath
,
buildPath
)
self
.
tmqCase6
(
cfgPath
,
buildPath
)
self
.
tmqCase9
(
cfgPath
,
buildPath
)
self
.
tmqCase7
(
cfgPath
,
buildPath
)
self
.
tmqCase10
(
cfgPath
,
buildPath
)
self
.
tmqCase11
(
cfgPath
,
buildPath
)
def
stop
(
self
):
def
stop
(
self
):
tdSql
.
close
()
tdSql
.
close
()
...
...
tests/system-test/7-tmq/subscribeDb2.py
0 → 100644
浏览文件 @
1d5f431d
import
taos
import
sys
import
time
import
socket
import
os
import
threading
from
util.log
import
*
from
util.sql
import
*
from
util.cases
import
*
from
util.dnodes
import
*
class
TDTestCase
:
hostname
=
socket
.
gethostname
()
#rpcDebugFlagVal = '143'
#clientCfgDict = {'serverPort': '', 'firstEp': '', 'secondEp':'', 'rpcDebugFlag':'135', 'fqdn':''}
#clientCfgDict["rpcDebugFlag"] = rpcDebugFlagVal
#updatecfgDict = {'clientCfg': {}, 'serverPort': '', 'firstEp': '', 'secondEp':'', 'rpcDebugFlag':'135', 'fqdn':''}
#updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal
#print ("===================: ", updatecfgDict)
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
f
"start to excute
{
__file__
}
"
)
tdSql
.
init
(
conn
.
cursor
())
#tdSql.init(conn.cursor(), logSql) # output sql.txt file
def
getBuildPath
(
self
):
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
(
"community"
in
selfPath
):
projPath
=
selfPath
[:
selfPath
.
find
(
"community"
)]
else
:
projPath
=
selfPath
[:
selfPath
.
find
(
"tests"
)]
for
root
,
dirs
,
files
in
os
.
walk
(
projPath
):
if
(
"taosd"
in
files
or
"taosd.exe"
in
files
):
rootRealPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
root
))
if
(
"packaging"
not
in
rootRealPath
):
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
break
return
buildPath
def
newcur
(
self
,
cfg
,
host
,
port
):
user
=
"root"
password
=
"taosdata"
con
=
taos
.
connect
(
host
=
host
,
user
=
user
,
password
=
password
,
config
=
cfg
,
port
=
port
)
cur
=
con
.
cursor
()
print
(
cur
)
return
cur
def
initConsumerTable
(
self
,
cdbName
=
'cdb'
):
tdLog
.
info
(
"create consume database, and consume info table, and consume result table"
)
tdSql
.
query
(
"create database if not exists %s vgroups 1"
%
(
cdbName
))
tdSql
.
query
(
"drop table if exists %s.consumeinfo "
%
(
cdbName
))
tdSql
.
query
(
"drop table if exists %s.consumeresult "
%
(
cdbName
))
tdSql
.
query
(
"create table %s.consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int, ifmanualcommit int)"
%
cdbName
)
tdSql
.
query
(
"create table %s.consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)"
%
cdbName
)
def
insertConsumerInfo
(
self
,
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifmanualcommit
,
cdbName
=
'cdb'
):
sql
=
"insert into %s.consumeinfo values "
%
cdbName
sql
+=
"(now, %d, '%s', '%s', %d, %d, %d)"
%
(
consumerId
,
topicList
,
keyList
,
expectrowcnt
,
ifcheckdata
,
ifmanualcommit
)
tdLog
.
info
(
"consume info sql: %s"
%
sql
)
tdSql
.
query
(
sql
)
def
selectConsumeResult
(
self
,
expectRows
,
cdbName
=
'cdb'
):
resultList
=
[]
while
1
:
tdSql
.
query
(
"select * from %s.consumeresult"
%
cdbName
)
#tdLog.info("row: %d, %l64d, %l64d"%(tdSql.getData(0, 1),tdSql.getData(0, 2),tdSql.getData(0, 3))
if
tdSql
.
getRows
()
==
expectRows
:
break
else
:
time
.
sleep
(
5
)
for
i
in
range
(
expectRows
):
tdLog
.
info
(
"ts: %s, consume id: %d, consume msgs: %d, consume rows: %d"
%
(
tdSql
.
getData
(
i
,
0
),
tdSql
.
getData
(
i
,
1
),
tdSql
.
getData
(
i
,
2
),
tdSql
.
getData
(
i
,
3
)))
resultList
.
append
(
tdSql
.
getData
(
i
,
3
))
return
resultList
def
startTmqSimProcess
(
self
,
buildPath
,
cfgPath
,
pollDelay
,
dbName
,
showMsg
=
1
,
showRow
=
1
,
cdbName
=
'cdb'
,
valgrind
=
0
):
if
valgrind
==
1
:
logFile
=
cfgPath
+
'/../log/valgrind-tmq.log'
shellCmd
=
'nohup valgrind --log-file='
+
logFile
shellCmd
+=
'--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v --workaround-gcc296-bugs=yes '
if
(
platform
.
system
().
lower
()
==
'windows'
):
shellCmd
=
'mintty -h never -w hide '
+
buildPath
+
'
\\
build
\\
bin
\\
tmq_sim.exe -c '
+
cfgPath
shellCmd
+=
" -y %d -d %s -g %d -r %d -w %s "
%
(
pollDelay
,
dbName
,
showMsg
,
showRow
,
cdbName
)
shellCmd
+=
"> nul 2>&1 &"
else
:
shellCmd
=
'nohup '
+
buildPath
+
'/build/bin/tmq_sim -c '
+
cfgPath
shellCmd
+=
" -y %d -d %s -g %d -r %d -w %s "
%
(
pollDelay
,
dbName
,
showMsg
,
showRow
,
cdbName
)
shellCmd
+=
"> /dev/null 2>&1 &"
tdLog
.
info
(
shellCmd
)
os
.
system
(
shellCmd
)
def
create_tables
(
self
,
tsql
,
dbName
,
vgroups
,
stbName
,
ctbNum
,
rowsPerTbl
):
tsql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
dbName
,
vgroups
))
tsql
.
execute
(
"use %s"
%
dbName
)
tsql
.
execute
(
"create table if not exists %s (ts timestamp, c1 bigint, c2 binary(16)) tags(t1 int)"
%
stbName
)
pre_create
=
"create table"
sql
=
pre_create
#tdLog.debug("doing create one stable %s and %d child table in %s ..." %(stbname, count ,dbname))
for
i
in
range
(
ctbNum
):
sql
+=
" %s_%d using %s tags(%d)"
%
(
stbName
,
i
,
stbName
,
i
+
1
)
if
(
i
>
0
)
and
(
i
%
100
==
0
):
tsql
.
execute
(
sql
)
sql
=
pre_create
if
sql
!=
pre_create
:
tsql
.
execute
(
sql
)
event
.
set
()
tdLog
.
debug
(
"complete to create database[%s], stable[%s] and %d child tables"
%
(
dbName
,
stbName
,
ctbNum
))
return
def
insert_data
(
self
,
tsql
,
dbName
,
stbName
,
ctbNum
,
rowsPerTbl
,
batchNum
,
startTs
):
tdLog
.
debug
(
"start to insert data ............"
)
tsql
.
execute
(
"use %s"
%
dbName
)
pre_insert
=
"insert into "
sql
=
pre_insert
t
=
time
.
time
()
startTs
=
int
(
round
(
t
*
1000
))
#tdLog.debug("doing insert data into stable:%s rows:%d ..."%(stbName, allRows))
for
i
in
range
(
ctbNum
):
sql
+=
" %s_%d values "
%
(
stbName
,
i
)
for
j
in
range
(
rowsPerTbl
):
sql
+=
"(%d, %d, 'tmqrow_%d') "
%
(
startTs
+
j
,
j
,
j
)
if
(
j
>
0
)
and
((
j
%
batchNum
==
0
)
or
(
j
==
rowsPerTbl
-
1
)):
tsql
.
execute
(
sql
)
if
j
<
rowsPerTbl
-
1
:
sql
=
"insert into %s_%d values "
%
(
stbName
,
i
)
else
:
sql
=
"insert into "
#end sql
if
sql
!=
pre_insert
:
#print("insert sql:%s"%sql)
tsql
.
execute
(
sql
)
tdLog
.
debug
(
"insert data ............ [OK]"
)
return
def
prepareEnv
(
self
,
**
parameterDict
):
print
(
"input parameters:"
)
print
(
parameterDict
)
# create new connector for my thread
tsql
=
self
.
newcur
(
parameterDict
[
'cfg'
],
'localhost'
,
6030
)
self
.
create_tables
(
tsql
,
\
parameterDict
[
"dbName"
],
\
parameterDict
[
"vgroups"
],
\
parameterDict
[
"stbName"
],
\
parameterDict
[
"ctbNum"
],
\
parameterDict
[
"rowsPerTbl"
])
self
.
insert_data
(
tsql
,
\
parameterDict
[
"dbName"
],
\
parameterDict
[
"stbName"
],
\
parameterDict
[
"ctbNum"
],
\
parameterDict
[
"rowsPerTbl"
],
\
parameterDict
[
"batchNum"
],
\
parameterDict
[
"startTs"
])
return
def
tmqCase8
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 8: Produce while one consume to subscribe one db, inclue 1 stb"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db8'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
()
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
/
2
topicList
=
topicName1
ifcheckdata
=
0
ifManualCommit
=
0
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
100
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
# wait for data ready
prepareEnvThread
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
tdLog
.
info
(
"again start consume processer"
)
self
.
initConsumerTable
()
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdLog
.
printNoPrefix
(
"======== test case 8 end ...... "
)
def
tmqCase9
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 9: Produce while one consume to subscribe one db, inclue 1 stb"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db9'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
()
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
/
2
topicList
=
topicName1
ifcheckdata
=
0
ifManualCommit
=
1
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
100
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
# wait for data ready
prepareEnvThread
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
tdSql
.
query
(
"select count(*) from %s.%s"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'stbName'
]))
countOfStb
=
tdSql
.
getData
(
0
,
0
)
print
(
"====total rows of stb: %d"
%
countOfStb
)
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
if
totalConsumeRows
<
expectrowcnt
:
tdLog
.
exit
(
"tmq consume rows error!"
)
tdLog
.
info
(
"again start consume processer"
)
self
.
initConsumerTable
()
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows2
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows2
+=
resultList
[
i
]
tdLog
.
info
(
"firstly act consume rows: %d"
%
(
totalConsumeRows
))
tdLog
.
info
(
"secondly act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows2
,
expectrowcnt
))
if
totalConsumeRows
+
totalConsumeRows2
!=
expectrowcnt
:
tdLog
.
exit
(
"tmq consume rows error!"
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdLog
.
printNoPrefix
(
"======== test case 9 end ...... "
)
def
run
(
self
):
tdSql
.
prepare
()
buildPath
=
self
.
getBuildPath
()
if
(
buildPath
==
""
):
tdLog
.
exit
(
"taosd not found!"
)
else
:
tdLog
.
info
(
"taosd found in %s"
%
buildPath
)
cfgPath
=
buildPath
+
"/../sim/psim/cfg"
tdLog
.
info
(
"cfgPath: %s"
%
cfgPath
)
self
.
tmqCase8
(
cfgPath
,
buildPath
)
self
.
tmqCase9
(
cfgPath
,
buildPath
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
event
=
threading
.
Event
()
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tests/system-test/7-tmq/subscribeDb3.py
0 → 100644
浏览文件 @
1d5f431d
import
taos
import
sys
import
time
import
socket
import
os
import
threading
from
util.log
import
*
from
util.sql
import
*
from
util.cases
import
*
from
util.dnodes
import
*
class
TDTestCase
:
hostname
=
socket
.
gethostname
()
#rpcDebugFlagVal = '143'
#clientCfgDict = {'serverPort': '', 'firstEp': '', 'secondEp':'', 'rpcDebugFlag':'135', 'fqdn':''}
#clientCfgDict["rpcDebugFlag"] = rpcDebugFlagVal
#updatecfgDict = {'clientCfg': {}, 'serverPort': '', 'firstEp': '', 'secondEp':'', 'rpcDebugFlag':'135', 'fqdn':''}
#updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal
#print ("===================: ", updatecfgDict)
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
f
"start to excute
{
__file__
}
"
)
tdSql
.
init
(
conn
.
cursor
())
#tdSql.init(conn.cursor(), logSql) # output sql.txt file
def
getBuildPath
(
self
):
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
(
"community"
in
selfPath
):
projPath
=
selfPath
[:
selfPath
.
find
(
"community"
)]
else
:
projPath
=
selfPath
[:
selfPath
.
find
(
"tests"
)]
for
root
,
dirs
,
files
in
os
.
walk
(
projPath
):
if
(
"taosd"
in
files
or
"taosd.exe"
in
files
):
rootRealPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
root
))
if
(
"packaging"
not
in
rootRealPath
):
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
break
return
buildPath
def
newcur
(
self
,
cfg
,
host
,
port
):
user
=
"root"
password
=
"taosdata"
con
=
taos
.
connect
(
host
=
host
,
user
=
user
,
password
=
password
,
config
=
cfg
,
port
=
port
)
cur
=
con
.
cursor
()
print
(
cur
)
return
cur
def
initConsumerTable
(
self
,
cdbName
=
'cdb'
):
tdLog
.
info
(
"create consume database, and consume info table, and consume result table"
)
tdSql
.
query
(
"create database if not exists %s vgroups 1"
%
(
cdbName
))
tdSql
.
query
(
"drop table if exists %s.consumeinfo "
%
(
cdbName
))
tdSql
.
query
(
"drop table if exists %s.consumeresult "
%
(
cdbName
))
tdSql
.
query
(
"create table %s.consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int, ifmanualcommit int)"
%
cdbName
)
tdSql
.
query
(
"create table %s.consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)"
%
cdbName
)
def
insertConsumerInfo
(
self
,
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifmanualcommit
,
cdbName
=
'cdb'
):
sql
=
"insert into %s.consumeinfo values "
%
cdbName
sql
+=
"(now, %d, '%s', '%s', %d, %d, %d)"
%
(
consumerId
,
topicList
,
keyList
,
expectrowcnt
,
ifcheckdata
,
ifmanualcommit
)
tdLog
.
info
(
"consume info sql: %s"
%
sql
)
tdSql
.
query
(
sql
)
def
selectConsumeResult
(
self
,
expectRows
,
cdbName
=
'cdb'
):
resultList
=
[]
while
1
:
tdSql
.
query
(
"select * from %s.consumeresult"
%
cdbName
)
#tdLog.info("row: %d, %l64d, %l64d"%(tdSql.getData(0, 1),tdSql.getData(0, 2),tdSql.getData(0, 3))
if
tdSql
.
getRows
()
==
expectRows
:
break
else
:
time
.
sleep
(
5
)
for
i
in
range
(
expectRows
):
tdLog
.
info
(
"ts: %s, consume id: %d, consume msgs: %d, consume rows: %d"
%
(
tdSql
.
getData
(
i
,
0
),
tdSql
.
getData
(
i
,
1
),
tdSql
.
getData
(
i
,
2
),
tdSql
.
getData
(
i
,
3
)))
resultList
.
append
(
tdSql
.
getData
(
i
,
3
))
return
resultList
def
startTmqSimProcess
(
self
,
buildPath
,
cfgPath
,
pollDelay
,
dbName
,
showMsg
=
1
,
showRow
=
1
,
cdbName
=
'cdb'
,
valgrind
=
0
):
if
valgrind
==
1
:
logFile
=
cfgPath
+
'/../log/valgrind-tmq.log'
shellCmd
=
'nohup valgrind --log-file='
+
logFile
shellCmd
+=
'--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v --workaround-gcc296-bugs=yes '
if
(
platform
.
system
().
lower
()
==
'windows'
):
shellCmd
=
'mintty -h never -w hide '
+
buildPath
+
'
\\
build
\\
bin
\\
tmq_sim.exe -c '
+
cfgPath
shellCmd
+=
" -y %d -d %s -g %d -r %d -w %s "
%
(
pollDelay
,
dbName
,
showMsg
,
showRow
,
cdbName
)
shellCmd
+=
"> nul 2>&1 &"
else
:
shellCmd
=
'nohup '
+
buildPath
+
'/build/bin/tmq_sim -c '
+
cfgPath
shellCmd
+=
" -y %d -d %s -g %d -r %d -w %s "
%
(
pollDelay
,
dbName
,
showMsg
,
showRow
,
cdbName
)
shellCmd
+=
"> /dev/null 2>&1 &"
tdLog
.
info
(
shellCmd
)
os
.
system
(
shellCmd
)
def
create_tables
(
self
,
tsql
,
dbName
,
vgroups
,
stbName
,
ctbNum
,
rowsPerTbl
):
tsql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
dbName
,
vgroups
))
tsql
.
execute
(
"use %s"
%
dbName
)
tsql
.
execute
(
"create table if not exists %s (ts timestamp, c1 bigint, c2 binary(16)) tags(t1 int)"
%
stbName
)
pre_create
=
"create table"
sql
=
pre_create
#tdLog.debug("doing create one stable %s and %d child table in %s ..." %(stbname, count ,dbname))
for
i
in
range
(
ctbNum
):
sql
+=
" %s_%d using %s tags(%d)"
%
(
stbName
,
i
,
stbName
,
i
+
1
)
if
(
i
>
0
)
and
(
i
%
100
==
0
):
tsql
.
execute
(
sql
)
sql
=
pre_create
if
sql
!=
pre_create
:
tsql
.
execute
(
sql
)
event
.
set
()
tdLog
.
debug
(
"complete to create database[%s], stable[%s] and %d child tables"
%
(
dbName
,
stbName
,
ctbNum
))
return
def
insert_data
(
self
,
tsql
,
dbName
,
stbName
,
ctbNum
,
rowsPerTbl
,
batchNum
,
startTs
):
tdLog
.
debug
(
"start to insert data ............"
)
tsql
.
execute
(
"use %s"
%
dbName
)
pre_insert
=
"insert into "
sql
=
pre_insert
t
=
time
.
time
()
startTs
=
int
(
round
(
t
*
1000
))
#tdLog.debug("doing insert data into stable:%s rows:%d ..."%(stbName, allRows))
for
i
in
range
(
ctbNum
):
sql
+=
" %s_%d values "
%
(
stbName
,
i
)
for
j
in
range
(
rowsPerTbl
):
sql
+=
"(%d, %d, 'tmqrow_%d') "
%
(
startTs
+
j
,
j
,
j
)
if
(
j
>
0
)
and
((
j
%
batchNum
==
0
)
or
(
j
==
rowsPerTbl
-
1
)):
tsql
.
execute
(
sql
)
if
j
<
rowsPerTbl
-
1
:
sql
=
"insert into %s_%d values "
%
(
stbName
,
i
)
else
:
sql
=
"insert into "
#end sql
if
sql
!=
pre_insert
:
#print("insert sql:%s"%sql)
tsql
.
execute
(
sql
)
tdLog
.
debug
(
"insert data ............ [OK]"
)
return
def
prepareEnv
(
self
,
**
parameterDict
):
print
(
"input parameters:"
)
print
(
parameterDict
)
# create new connector for my thread
tsql
=
self
.
newcur
(
parameterDict
[
'cfg'
],
'localhost'
,
6030
)
self
.
create_tables
(
tsql
,
\
parameterDict
[
"dbName"
],
\
parameterDict
[
"vgroups"
],
\
parameterDict
[
"stbName"
],
\
parameterDict
[
"ctbNum"
],
\
parameterDict
[
"rowsPerTbl"
])
self
.
insert_data
(
tsql
,
\
parameterDict
[
"dbName"
],
\
parameterDict
[
"stbName"
],
\
parameterDict
[
"ctbNum"
],
\
parameterDict
[
"rowsPerTbl"
],
\
parameterDict
[
"batchNum"
],
\
parameterDict
[
"startTs"
])
return
def
tmqCase10
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 10: Produce while one consume to subscribe one db, inclue 1 stb"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db10'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
()
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
topicList
=
topicName1
ifcheckdata
=
0
ifManualCommit
=
1
keyList
=
'group.id:cgrp1,\
enable.auto.commit:false,\
auto.commit.interval.ms:6000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
100
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
time
.
sleep
(
2
)
tdLog
.
info
(
"pkill consume processor"
)
if
(
platform
.
system
().
lower
()
==
'windows'
):
os
.
system
(
"TASKKILL /F /IM tmq_sim.exe"
)
else
:
os
.
system
(
'pkill tmq_sim'
)
expectRows
=
0
resultList
=
self
.
selectConsumeResult
(
expectRows
)
# wait for data ready
prepareEnvThread
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
tdLog
.
info
(
"again start consume processer"
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
!=
expectrowcnt
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows: %d"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
time
.
sleep
(
15
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdLog
.
printNoPrefix
(
"======== test case 10 end ...... "
)
def
tmqCase11
(
self
,
cfgPath
,
buildPath
):
tdLog
.
printNoPrefix
(
"======== test case 11: Produce while one consume to subscribe one db, inclue 1 stb"
)
tdLog
.
info
(
"step 1: create database, stb, ctb and insert data"
)
# create and start thread
parameterDict
=
{
'cfg'
:
''
,
\
'dbName'
:
'db11'
,
\
'vgroups'
:
4
,
\
'stbName'
:
'stb'
,
\
'ctbNum'
:
10
,
\
'rowsPerTbl'
:
10000
,
\
'batchNum'
:
100
,
\
'startTs'
:
1640966400000
}
# 2022-01-01 00:00:00.000
parameterDict
[
'cfg'
]
=
cfgPath
self
.
initConsumerTable
()
tdSql
.
execute
(
"create database if not exists %s vgroups %d"
%
(
parameterDict
[
'dbName'
],
parameterDict
[
'vgroups'
]))
prepareEnvThread
=
threading
.
Thread
(
target
=
self
.
prepareEnv
,
kwargs
=
parameterDict
)
prepareEnvThread
.
start
()
tdLog
.
info
(
"create topics from db"
)
topicName1
=
'topic_db1'
tdSql
.
execute
(
"create topic %s as database %s"
%
(
topicName1
,
parameterDict
[
'dbName'
]))
consumerId
=
0
expectrowcnt
=
parameterDict
[
"rowsPerTbl"
]
*
parameterDict
[
"ctbNum"
]
topicList
=
topicName1
ifcheckdata
=
0
ifManualCommit
=
1
keyList
=
'group.id:cgrp1,\
enable.auto.commit:true,\
auto.commit.interval.ms:1000,\
auto.offset.reset:earliest'
self
.
insertConsumerInfo
(
consumerId
,
expectrowcnt
,
topicList
,
keyList
,
ifcheckdata
,
ifManualCommit
)
event
.
wait
()
tdLog
.
info
(
"start consume processor"
)
pollDelay
=
20
showMsg
=
1
showRow
=
1
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
time
.
sleep
(
6
)
tdLog
.
info
(
"pkill consume processor"
)
if
(
platform
.
system
().
lower
()
==
'windows'
):
os
.
system
(
"TASKKILL /F /IM tmq_sim.exe"
)
else
:
os
.
system
(
'pkill tmq_sim'
)
expectRows
=
0
resultList
=
self
.
selectConsumeResult
(
expectRows
)
# wait for data ready
prepareEnvThread
.
join
()
tdLog
.
info
(
"insert process end, and start to check consume result"
)
tdLog
.
info
(
"again start consume processer"
)
self
.
startTmqSimProcess
(
buildPath
,
cfgPath
,
pollDelay
,
parameterDict
[
"dbName"
],
showMsg
,
showRow
)
expectRows
=
1
resultList
=
self
.
selectConsumeResult
(
expectRows
)
totalConsumeRows
=
0
for
i
in
range
(
expectRows
):
totalConsumeRows
+=
resultList
[
i
]
if
totalConsumeRows
>=
expectrowcnt
or
totalConsumeRows
<=
0
:
tdLog
.
info
(
"act consume rows: %d, expect consume rows between %d and 0"
%
(
totalConsumeRows
,
expectrowcnt
))
tdLog
.
exit
(
"tmq consume rows error!"
)
time
.
sleep
(
15
)
tdSql
.
query
(
"drop topic %s"
%
topicName1
)
tdLog
.
printNoPrefix
(
"======== test case 11 end ...... "
)
def
run
(
self
):
tdSql
.
prepare
()
buildPath
=
self
.
getBuildPath
()
if
(
buildPath
==
""
):
tdLog
.
exit
(
"taosd not found!"
)
else
:
tdLog
.
info
(
"taosd found in %s"
%
buildPath
)
cfgPath
=
buildPath
+
"/../sim/psim/cfg"
tdLog
.
info
(
"cfgPath: %s"
%
cfgPath
)
self
.
tmqCase10
(
cfgPath
,
buildPath
)
self
.
tmqCase11
(
cfgPath
,
buildPath
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
event
=
threading
.
Event
()
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tests/system-test/fulltest.sh
浏览文件 @
1d5f431d
...
@@ -98,6 +98,12 @@ python3 ./test.py -f 2-query/stateduration.py
...
@@ -98,6 +98,12 @@ python3 ./test.py -f 2-query/stateduration.py
python3 ./test.py
-f
2-query/function_stateduration.py
python3 ./test.py
-f
2-query/function_stateduration.py
python3 ./test.py
-f
2-query/statecount.py
python3 ./test.py
-f
2-query/statecount.py
python3 ./test.py
-f
2-query/tail.py
python3 ./test.py
-f
2-query/tail.py
python3 ./test.py
-f
2-query/distribute_agg_count.py
python3 ./test.py
-f
2-query/distribute_agg_max.py
python3 ./test.py
-f
2-query/distribute_agg_min.py
python3 ./test.py
-f
2-query/distribute_agg_sum.py
python3 ./test.py
-f
2-query/distribute_agg_spread.py
python3 ./test.py
-f
2-query/distribute_agg_apercentile.py
python3 ./test.py
-f
6-cluster/5dnode1mnode.py
python3 ./test.py
-f
6-cluster/5dnode1mnode.py
python3 ./test.py
-f
6-cluster/5dnode2mnode.py
python3 ./test.py
-f
6-cluster/5dnode2mnode.py
...
...
taosadapter
@
9ce3f5c9
Subproject commit 9ce3f5c98ef95d9c7c596c4ed7302b0ed69a92b2
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录